我有以下时间安排优化问题:
有n个Rest时间要安排。一次Rest占用每个15分钟的k时间颗粒。我看到的总视界是m个时间颗粒。每次谷物都有一个需要优化的中断量。开始中断的范围是每个中断定义的,您不能自由选择范围。
break.scala:
case class Break(vehicleId: String, durationInGrains: Int)
Timegrain.scala:
@PlanningEntity
case class TimeGrain(desiredBreaks: Int,
instant: Instant,
@CustomShadowVariable(...), // Dummy annotation, I want to use the entity in constraint stream
var breaks: Set[Break])
中断分配:
@PlanningEntity
case class BreakAssignment(
break: Break,
@PlanningVariable(valueRangeProviderRefs = Array("timeGrainRange"))
var startingTimeGrain: TimeGrain,
@ValueRangeProvider(id = "timeGrainRange")
@ProblemFactCollectionProperty @field
timeGrainRange: java.util.List[TimeGrain],
@CustomShadowVariable(
variableListenerClass = classOf[StartingTimeGrainVariableListener],
sources = Array(new PlanningVariableReference(variableName = "startingTimeGrain"))
)
var timeGrains: util.Set[TimeGrain]
)
object BreakAssignment {
class StartingTimeGrainVariableListener extends VariableListener[Solution, BreakAssignment] {
override def afterVariableChanged(scoreDirector: ScoreDirector[Solution], entity: BreakAssignment): Unit = {
val end = entity.startingTimeGrain.instant
.plusSeconds((entity.break.durationInGrains * TimeGrain.grainLength).toSeconds)
scoreDirector.getWorkingSolution.timeGrains.asScala
.filter(
timeGrain =>
timeGrain.instant == entity.startingTimeGrain.instant ||
entity.startingTimeGrain.instant.isBefore(timeGrain.instant) && end
.isAfter(timeGrain.instant)
)
.foreach { timeGrain =>
scoreDirector.beforeVariableChanged(timeGrain, "breaks")
timeGrain.breaks = timeGrain.breaks + entity.break
scoreDirector.afterVariableChanged(timeGrain, "breaks")
}
}
}
}
private def constraint(constraintFactory: ConstraintFactory) =
constraintFactory
.from(classOf[TimeGrain])
.filter(timeGrain => timeGrain.breaks.nonEmpty)
.penalize(
"Constraint",
HardSoftScore.ONE_SOFT,
(timeGrain: TimeGrain) => {
math.abs(timeGrain.desiredBreaks - timeGrain.breaks.size)
}
)
我在想出正确的模型的时候,是不是走错了方向?
如果我正确理解您的意思,那么从概念上讲,在TimeGrain类中,我将保留一个(自定义)shadow变量(仅)保留与该TimeGrain(实例)重叠的Break实例的计数。为了简单起见,我叫它breakCount。让我称x为一个中断所跨越的时间颗粒数。
因此,当求解器将一个Break实例分配给一个TimeGrain实例时,我将增加该TimeGrain实例的Break Count。不仅要计算THát TimeGrain实例的breakCount,还要计算接下来几个(x-1)个TimeGrain实例的breakCount。请注意将这些增量中的每一个都包装在“ScoreDirector.BeforeVariableChanged()”-“ScoreDirector.AfterVariableChanged()”括号中。
剩下的就用分数计算了。但请注意,我自己还会将时间颗粒的理想中断计数和它的“真实”中断计数(即阴影变量)的差平方,就像OptaPlanner的文档中解释的那样,以加强更多的“公平性”。
编辑:当然,在从时间颗粒实例中删除中断实例时,也会减少时间颗粒的中断计数...
相同优先级线程按照时间片轮番调度 相同优先级线程按照时间片轮番调度 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first
所有人, 有没有一种方法,我可以使用spring调度器,改变基于一天的时间的固定费率? 对于例如:一个方法应该在10-12AM以1000ms的速率运行,然后在12AM之后切换到5000ms 还是必须用不同的cron创建多个方法?
我遇到了单词中断问题,它是这样的: 给定一个输入字符串和一个字典,如果可能,将输入字符串分割成一个空间分隔的字典单词序列。 然而,在Quora中,一个用户发布了一个线性时间解决方案 我不知道它怎么会是线性的。他们在时间复杂度计算上有什么错误吗?这个问题的最佳可能最坏情况时间复杂度是多少。我在这里发布了最常见的DP解决方案
我正在与石英时间表和一切工作完美根据要求。但有一件事我想实现,即我希望我的下一个作业执行将触发(currentFinishTime+intervalOfScheduler) 间隔为30秒的作业执行示例: 请帮助我解决我的问题。
我偶然发现了这个不错的教程https://github.com/manashmndl/DeadSimpleSpeechRecognizer其中数据是基于由文件夹分隔的样本进行训练的,所有mfcc都是一次计算的。 我正试图以不同的方式实现类似的目标。 基于此:https://librosa.github.io/librosa/generated/librosa.feature.mfcc.html l
在SJF算法中,我们使用公式来预测下一个CPU突发时间: 然后我们选择预测突发时间最短的进程。现在我的问题是:我们已经知道进程到达的CPU突发时间了吗?如果是,那么为什么要预测CPU突发时间呢?我们可以只使用最短时间的进程来调度。如果不是,即,我们对进程的突发时间没有任何想法,预测的突发时间(n 1)如何帮助我们选择进程?希望我能解释我的困惑。谢谢。