我正在使用OptaPlanner从一天需要处理的一组任务中计算轮班(即开始时间,结束时间和必要的资格)。
我使用drools得分导演并设置了许多规则来将任务分配给轮班,同时保持约束:
到目前为止,我得到了相当不错的结果。 然而,还有一个优化。应该可以进行不同长度的换档(例如,8小时,6小时和4小时换档),并且存在换档被认为是生产的阈值(例如,如果60%的时间被任务覆盖)。因此,与长期无效的人相比,拥有更多,更短但更富有成效的转变会更好。
我很难定义像这样的东西。问题在于我认为这是转变的一种属性。然而,这种转变是我的计划事实,因此在计算过程中不能改变它的状态。
你知道我怎么能解决这个问题吗?
提前致谢, 问候, 亨德里克
答案 0 :(得分:1)
假设Task
和Shift
是问题事实,TaskAssignment
是由task
定义并具有计划变量shift
的计划实体
when
$s: Shift($t : treshold)
$totalTime : Number(intValue < $t) from accumulate (TaskAssignment(shift == $s, $t : time) sum($t))
then
add($t - $totalTime)
end