我正在使用 OptaPlanner 计算一组需要在一天内处理的任务的班次(即开始时间、结束时间和必要的资格)。
我使用了一个drools score director,并设置了一些规则来将任务分配给轮班,同时保持如下约束:
- 永远不要将重叠的任务分配给同一个班次
- 永远不要将两个任务分配给同一个班次,因为这会导致违反最大班次长度
- 当没有一组可能的资格与两项任务的必要资格相匹配时,永远不要在同一班次上安排两项任务等。
到目前为止,我得到了相当不错的结果。但是,还剩下一项优化。应该可以有不同长度的轮班(例如 8 小时、6 小时和 4 小时轮班),并且有一个可以认为轮班有效的阈值(例如,如果任务涵盖了 60% 的时间)。因此,与长期无效率的轮班相比,进行更多、更短但富有成效的轮班会更好。
我很难将类似的东西定义为规则。在我看来,问题在于这是一种转变的属性。然而,这种转变是我的计划事实,因此在计算过程中不能改变它的状态。
你知道我该如何解决这个问题吗?
在此先感谢, 问候, Hendrik