【问题标题】:Dealing with changing properties of a "ProblemFact" in a shift planning scenario?在轮班计划场景中处理“ProblemFact”属性的变化?
【发布时间】:2013-10-17 11:31:05
【问题描述】:

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

我使用 drools score director 并设置了一些规则来将任务分配给轮班,同时保持以下约束:

  • 切勿将重叠的任务分配给同一个班次
  • 永远不要将两个任务分配给同一个班次,否则会导致违反最大班次长度
  • 当没有可能的资格集与两项任务的必要资格相匹配时,绝不会在同一班次上同时执行两项任务 等

到目前为止,我得到了相当不错的结果。 但是,还剩下一项优化。应该可以有不同长度的轮班(例如 8 小时、6 小时和 4 小时轮班),并且有一个阈值可以认为一个班次是富有成效的(例如,如果 60% 的时间被任务覆盖)。因此,与长期无效率的轮班相比,进行更多、更短但富有成效的轮班会更好。

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

你知道我该如何解决这个问题吗?

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

【问题讨论】:

    标签: optaplanner


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多