在總體水平上,問題很簡單:安排一支工作人員進行一人一天的覆蓋,在任何特定日子將工作人員分成3個池,每個員工都有一個休假要求,每個員工每週至多有兩班倒等等。算法人員調度解決方案
我不願意這樣做手動,因爲它在我的組織已經做了幾個世紀了。我喜歡做一些像遺傳算法一樣酷的東西(例如[1] http://www.sersc.org/journals/IJAST/vol14/1.pdf)。
有沒有可靠的開源/免費的替代品呢?這聽起來像是一個優化問題,我可以啓動C++,R等插入一些優化庫嗎?
謝謝
在總體水平上,問題很簡單:安排一支工作人員進行一人一天的覆蓋,在任何特定日子將工作人員分成3個池,每個員工都有一個休假要求,每個員工每週至多有兩班倒等等。算法人員調度解決方案
我不願意這樣做手動,因爲它在我的組織已經做了幾個世紀了。我喜歡做一些像遺傳算法一樣酷的東西(例如[1] http://www.sersc.org/journals/IJAST/vol14/1.pdf)。
有沒有可靠的開源/免費的替代品呢?這聽起來像是一個優化問題,我可以啓動C++,R等插入一些優化庫嗎?
謝謝
您可以嘗試OptaPlanner(以前稱爲Drools Planner),它基於Java和開源。
這是一個優化問題。它奇怪地被稱爲調度問題。 :-D 根據數據的大小,您可能需要進行Metaheuristics,如遺傳算法,螞蟻羣優化等,但我會從這裏開始通過滾動您自己的基於規則的啓發式。
基本上,將規則定義爲事物之間的關聯(人A不能同時在度假和工作中)或者時間表上的條件(在任何給定時間只有三個人)。然後創建一個時間表,並逐個插入所有員工。如果插入規則被破壞,則不要插入並選擇其他人員。
這應該,如果你做得對,想出一個有效的,但不是最佳的時間表,然後你可以做很酷的東西,如定義操作符(交換,移動,3交換),這將給你是一個社區(所有有效的時間表,可以通過應用操作員來達到)。然後,您可以選擇附近的最佳時間表,然後重複。這是鄰居後裔。但是有很多基於鄰域的方法可供選擇。我相信模擬退火適用於調度問題。
看着Drools Planner,幾個月前他們已經將他們的模擬退火算法推出了beta版。 –
看起來不錯!雖然這項工作有點大嗎? –
由於每天只有一個人,這似乎可以設置爲整數/二進制編程問題。有很多包做整數編程。無論您決定使用哪種方法來解決這些問題,這些問題中棘手的部分是找到指定問題約束的簡明方法。在這種情況下,什麼是假期需求等。
Drools Planner看起來是最完美的工具,謝謝!然而,安裝似乎非常複雜。目前有一些困難,試圖把它放在一起,但天哪,這裏有很多我不知道的組件。 –
@明你遇到什麼樣的問題?我想知道,所以我們可以改善體驗。最簡單的方法是下載計劃程序zip並運行runExamples.bat/.sh。看看參考手冊如何從maven等使用它。 –