簡體   English   中英

名冊/時間表生成

[英]Roster/Timetable generation

考慮到商業和勞動法的限制,我正在開發一種工具來為員工制定一個長達一個月的時間表。 類似問題的挑戰和差異不大

  • 輪班概念包含最多半個小時的休息時間。
  • 沒有完整的8個班次的概念被稱為類似問題。 例如,需要在上午8點擁有2個資源,在下午3點擁有2.5個資源(例如,休息半個小時)。
  • 以及常規限制,例如每天的小時數,休息前的時間,休息時間...

可能的解決方案是依靠使用又名OR-Tools和Optaplanner的求解器。 有什么提示嗎?

如果您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM