如何用约束开发高效的作业调度?
调度程序应包括以下方法:
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和时间参数。
此问题的可能解决方案可能基于技术回溯。作业用作选择点,时间瞬间用作选择(在最坏的情况下,活动的总持续时间是工作持续时间的总和,导致完全顺序执行)。
或者,我应该充分表示数据,然后在时间轴上生成调度,将工作置于约束之下,并在不满足约束时在作业(以及依赖于它的所有作业)中前进。 但我不知道在java中我究竟能做到这一点。
换句话说,我正在寻找一种避免强烈回溯方法的方法,在所描述的工作管理中。
答案 0 :(得分:1)
试试OptaPlanner(java,开源)。有a quick start here。
例如,将每个Job
分配给startMinute
,然后添加评分规则,如:
when
$leftJob : Job($startMinute : startMinute)
// getEndMinute() returns startMinute + durationInMinutes
$rightJob : Job(beforeJob == $leftJob, endMinute > $startMinute)
then
// punish
end
答案 1 :(得分:0)
您可以使用开源约束编程库。 This帖子指向许多用Java编写的求解器,用于约束满足问题等等。