在班次规划方案中处理“ProblemFact”属性的变化?

时间:2013-10-17 11:31:06

标签: optaplanner

我正在使用OptaPlanner从一天需要处理的一组任务中计算轮班(即开始时间,结束时间和必要的资格)。

我使用drools得分导演并设置了许多规则来将任务分配给轮班,同时保持约束:

  • 永远不会将重叠的任务分配到同一班次
  • 当这会导致违反最大班次
  • 时,永远不会将两个任务分配给同一班次
  • 当没有可能的一组资格符合两个任务的必要资格时,在同一班次上永远不会有两个任务 等

到目前为止,我得到了相当不错的结果。 然而,还有一个优化。应该可以进行不同长度的换档(例如,8小时,6小时和4小时换档),并且存在换档被认为是生产的阈值(例如,如果60%的时间被任务覆盖)。因此,与长期无效的人相比,拥有更多,更短但更富有成效的转变会更好。

我很难定义像这样的东西。问题在于我认为这是转变的一种属性。然而,这种转变是我的计划事实,因此在计算过程中不能改变它的状态。

你知道我怎么能解决这个问题吗?

提前致谢, 问候,   亨德里克

1 个答案:

答案 0 :(得分:1)

假设TaskShift是问题事实,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