0

我正在处理任务调度问题。我想实施一个规则,以确保在任何时候,整个过程都不​​会使用更多可用资源。为此,我考虑过循环总时间过程的每一秒,并计算每秒使用的资源总和,如下所示:

accumulate(Task($sec <=endTime, $sec>= startTime, $res : resources);
                $sum : sum($res);
                $sum> Global.getInstance().getAvailableResources())

"$sec" 表示要检查的秒数。

我如何使用流口水循环每一秒?

是否有任何等价物:

for ($sec= 0; $sec<$totalTime; $sec++)  {...}
4

1 回答 1

1

单独检查每一秒可能会大大减慢您的分数计算速度。

另一种可能效果更好的替代方法:我会编写一个规则,以便在至少有一项任务开始或结束时每秒在逻辑上插入一个标记。

when
   Task($startTime : startTime, $endTime : endTime)
then
   insertLogical(new Mark($startTime));
   insertLogical(new Mark($endTime));
// Important: 2 Mark instances with the same time
//            are equals() true (and therefore have the same hashCode()).

然后就是每2分之间积累的问题

when
   Mark($startTime: time)
   Mark(time > $startTime, $endTime : time)
   not Mark(time > $startTime, time < $endTime)
   $total : ... accumulate( ... over every Task between $startTime and $endTime ...)
then
   scoreHolder.addHardConstraintMatch(($available - $total) * ($endTime - $startTime));
于 2014-06-03T07:15:19.640 回答