1

如何制定有约束的有效作业调度?

调度程序应包括以下方法:

startBeforeEndOf(Job j)
startAfterEndOf(Job j)
startBeforeStartOf(Job j)
startAfterStartOf(Job j)
endBeforeEndOf(Job j)
endAfterEndOf(Job j)
endBeforeStartOf(Job j)
endAfterStartOf(Job j)

每个作业都有一个 id 和 time 参数。

对此问题的可能解决方案可能是基于技术回溯。作业用作选择点,时间瞬间用作选择(在最坏的情况下,活动的总持续时间是工作持续时间的总和,从而导致完全顺序执行)。

或者,我应该充分地表示数据,然后在时间轴上生成调度,将工作置于约束之下,并在不满足约束时在作业(以及依赖它的所有作业)中前进。但我不知道我如何在java中做到这一点。

换句话说,我在所描述的工作管理中寻找一种避免强烈回溯方法的方法。

4

2 回答 2

1

试试OptaPlanner(java,开源)。这里有一个快速入门

例如,将每个分配Job给 a startMinute,然后添加评分规则,例如:

when
    $leftJob : Job($startMinute : startMinute)
    // getEndMinute() returns startMinute + durationInMinutes
    $rightJob : Job(beforeJob == $leftJob, endMinute > $startMinute)
then
    // punish
end
于 2012-03-26T11:23:57.187 回答
0

您可以使用开源约束编程库。这篇文章指出了许多用 Java 编写的用于约束满足问题等的求解器。

于 2012-03-24T10:20:49.833 回答