[英]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.