通過OptaPlanner優化 COVID-19 疫苗接種預約安排(2)

本文爲OptaPlanner官方博客《Optimizing COVID-19 vaccination appointment scheduling》的第二篇譯文。第一篇介紹了通過OptaPlanner進行新冠疫苗接種預約規劃的業務需求。

本文承接上一篇的內容,着重講解基於現有的業務約束,在通過OptaPlanner具體的開發實現過程中的各個要點和規劃方案。

其中重點描述在規劃過程中的持續規劃、規劃時間窗口和固定規劃實體等概念。這類概念與方案在我們日常的APS,VRP和排班等規劃場景中非常實用。大家可以參考其思想和設計。

(以下爲譯文)

 

求解器(規劃引擎)

  OptaPlanner 的核心是求解器,它是獲取規劃問題數據集,並覆蓋規劃約束和配置的引擎。在本案例中,問題數據集包括有關人員、疫苗和疫苗接種中心的所有信息。求解器通過各種數據組合進行工作,最終生成一個優化的預約時間表,並向分配到特定中心的疫苗接種發出預約。下圖顯示了引擎創建的計劃:

  

持續規劃

  連續規劃是一種同時管理一個或多個未來的計劃週期,並可以每月、每週、每天、每小時甚至更頻繁地重複該過程的技術。規劃的時間窗口按指定的時間間隔往後移動。下圖顯示了每天更新的兩週計劃窗口:

   兩週的計劃時間窗口分爲兩部分。第一週處於已發佈狀態(即已規劃好並公佈出去),第二週處於草擬狀態(即待計劃狀態)。在計劃時間窗口的已發佈部分和草稿部分中,都會將人員分配給可預約的空檔。但是,只有已發佈部分(即已確定部分)中的人員會收到正式約會通知。其他(第二週、草擬狀態)的預約,在下一次運行中可能會有所變更,因此,這個時間,這部分人並未收到正式通知。通過這種方法,你就可以避免將早早將預約安排定死,在預約過程中更靈活應變,而不會一次性固定死預約而無法變通。例如,如果有人需要接種第二劑,並且已經預約到週一(許可時間範圍內)進行接種,其最理想接種時間是週三。如果你在稍晚一點,在草擬部分的時間範圍內,可以給到他更佳時間,那麼屆時可以分配一個更接近最理想接種時間的預約給他。

  您可以自定義規劃時間窗口的大小,但請注意問題空間(通常由數據量,即預約人數及預約中心數決定)的大小。問題空間是創建預約日程的重要構成因素。因此,您提前計劃的天數越多,問題空間就越大。

固定規劃實體

  如果你每天都在進行持續規劃(將新的申請加進來,發佈新的預約日程,確定未來哪些預約時間段已被佔用等),那麼在兩週內就會出現一些已分配給預約者的工作安排。爲確保已被預訂的資源不會被重複預約,你需要通過固定現有預約安排,將它們標記爲已分配。“固定預約”操作用於錨定一個或多個指定的預約分配結果,並強制 OptaPlanner 在進行新一輪規劃運算時,繞開這些已固定的預約進行規劃運算。固定的規劃實體(例如一個預約)在求解運算期間不再被更改,從而保證它原有預約的確定性。
一個預約是否被固定,由其預約狀態決定。如果您查看上一張圖片,您可以在上圖左側看到,一個預約空檔可以有五種狀態:開放、已邀請、已接受、已拒絕或重新規劃。

注意:實際上,你在quickstart演示代碼中,無法直接看到這些狀態,因爲OptaPlanner引擎只關心預約是否固定。

  因此,從上圖中可以看出,程序需要能夠繞開已經安排好的預約進行規劃運算。狀態爲“已邀請”或“已接受”的預約已經被固定。狀態爲 開放、重新規劃 和 已拒絕 的預約空檔未固定,可用於安排。

  在此示例中,當引擎運行時,它會在已發佈範圍和草擬範圍內搜索整個兩週計劃窗口。除了未計劃的輸入數據之外,引擎還會考慮所有未固定的實體(具有開放、重新規劃或已拒絕狀態的預約空檔),以找到最佳解決方案。如果引擎每天運行,你將看到在運行引擎之前,計劃時間窗口添加了新的一天,如上圖中間所示。第三個時間表(最底一個)表示引擎規劃的輸出結果。

  請注意(見中間和底下的兩個表),當新一天的預約分配後,本來處於計劃窗口草擬部分的 Amy 和 Edna(見中間表) ,將會被安排在計劃窗口的已發佈部分(見最底下的表),這種情況是可能的,因爲表中的Gus和Hugo要求重新規劃。這不會引起任何混淆,因爲 Amy 和 Edna 在前一個時間窗口內,並未收到正式約定日期,即他們在下一個時間窗口有可能被提前到已發佈部分。現在,因爲他們出現在計劃窗口的已發佈部分,他們將收到正式通知,並要求他們回覆“接受”或“拒絕”該安排,若接受,他們的預約就被固定。


敬請關注。我們將發佈後續博客,以更深入、更技術地瞭解 OptaPlanner 疫苗接種預約計劃程序快速入門。

 

源代碼: https://github.com/kiegroup/optaplanner-quickstarts

本文章由Emily與Murphy合著,由張健彪翻譯。

 

 

本系列文章在公衆號不定時連載,請關注公衆號(讓APS成爲可能)及時接收,二維碼:

 


如需瞭解更多關於Optaplanner的應用,請發電郵致:[email protected]
或到討論組發表你的意見:
若有需要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人日常工作繁忙,通過微信,QQ等工具可能無法深入溝通,較複雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章