optaplanner示例中的修改

时间:2015-02-03 10:25:58

标签: optaplanner

我需要创建一些非常类似于optaplanner中的护理名单示例的内容。

规划要求如下:

  • 护士有特殊技能。
  • 整天,周和周末都有变化。
  • 新功能:不同的任务需要不同的技能。
  • 新功能:工作人员通常会在早上花两个小时执行特殊任务,然后剩下的时间在他们的主要任务上 任务。

我认为建模的最佳方式是班次有一个列表,每个任务都需要一组技能,每个班次都需要一系列任务。

然后Optaplanner不仅会将护士分配给轮班,还会将任务组合起来并将其分配给轮班。

我的问题是: 任务是计划实体,计划变量,计划价值吗? 我是否需要修改求解器工厂?如果是,有关如何做到这一点的任何提示?

1 个答案:

答案 0 :(得分:2)

听起来不是拥有Shift粒度,而是具有更小的粒度,即任务粒度。

在这种情况下,我考虑将Task作为计划实体(使用Employee的计划变量)。然后麻烦的是添加一个约束来确保1天的几个任务很好地加到1个班次......这有点痛苦,不仅仅是写约束,还因为元启发式会自定义移动到交换的好处总是在移动中移动相同移位的所有任务(这有点像支柱交换移动(参见文档),但随后过滤同一班次的任务)。

在确定班次之前,您确定不能保持简单并预定班次中的任务吗?

对于具有多种技能要求的班次:这很容易并且已经是OptaPlanner示例中的一部分:ShiftTypeSkillRequirement是ShiftType和Skill之间的多种关系(您可能希望将其更改为Shift和Skill之间)