1. 程式人生 > 其它 >通過OptaPlanner優化 COVID-19 疫苗接種預約安排(2)

通過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郵件列表,國內網路可能較難訪問,需自行解決)