[英]Roster/Timetable generation
如果您使用OptaPlanner,并且由于第2项约束而不想遵循为员工分配8小时班次(计划实体)(计划值)的员工名册设计,那么您可以尝试遵循“廉价时间示例”设计,像这样的东西:
@PlanningEntity public class WorkAssignment {
Employee employee;
@PlanningVariable PotentialShiftStartTime startTime
@PlanningVariable int durationInHalfHours
}
PotentialShiftStartTime基本上是轮班可以有效开始的任何时间,因此,周一8:00,周一8:30,周一9:00等。
以这种自由形式的方式,搜索空间将是巨大的,但是有一些技巧可以提高可伸缩性(邻近选择,为CH提早选择,为CH限制选择,...)。
为了摆脱自由格式的影响(=减少搜索空间),您可以将startTime和durationInHalfHours合并到PotentialShift中,例如,如果不可能在下午16:00开始8小时轮班。 但是在引入这种复杂性之前,请确保收益巨大。
无论如何,这种设计的麻烦在于确定要创建多少个WorkAssignment实例。 因此,您可能希望创建每个员工可能的最大数目,并使用nullable=true
来忽略未使用的分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.