非易失性規劃的原理與實現方法

  常言道,計劃不如變化快。計劃的制定本身就建基於對未來一定時間範圍內的環境條件假設,當計劃制定後到執行完成的時間段內,若環境條件發生變化,那麼計劃也需要進行適當的調整才能滿足實際要求。但計劃的調整往往伴隨着相應的代價,不僅僅是計劃的重新制定所需的工作量,更大的代價來自於計劃變更對執行工作的影響。例如提前備料、設備預調等準備工作;這是計劃和控制的最大挑戰之一;因此,計劃的變更也極具研究價值。如何在環境條件發生變更導致原有計劃無法繼續執行時,快速定製一個最低成本的、切實可用的變更方案?本文我們主要考慮前後兩個計劃的延續性,來探討如何在自動計劃系統設計時,加入相應的建模方案,來實現計劃變化的高延續性。一個變更後、且具有較高延續性的計劃,我們叫做非易失性計劃,“非易失性”一詞來源於OptaPlanner用戶手冊-nonvolatile。

  在生產計劃、車輛調度、任務分配等場規劃景中,均需要定時輸出連續的計劃;或對於已發佈但未執行完成的計劃,因環境條件發生變化,需要進行適度變更,也需輸出一個修訂計劃。前後兩次計劃、或原始計劃與修訂計劃之間必須存在一定的相關性,從而讓實際的執行工作實現最大程度的延續性,此類規劃稱非易失性規劃,即是指前後兩次規劃的差異具有可控性,通俗講就是計劃的變化需要在可控可接受範圍內。其實現原理是在連續的規劃過程中,在獲取相對最優方案時,不能僅僅爲了追求當前最優方案,還需要考慮計劃的延續性;也可以理解爲,計劃的延續性也作爲考察方案優劣的因素之一。

  瞭解通過運籌規劃來搜尋相對最優方案從而獲得生產計劃的朋友都知道,方案的優劣在規劃模型中,反映爲方案的目標函數值與理想極值的差異,差異越小方案越優。引擎(求解器)在規劃運算過程中會對比各個方案的約束分數(目標函數值)差異,來逐步尋找更接近極值的方案。在可接受時間範圍內得到的最優方案即爲我們能獲取的最終方案。若我們並未將前後兩個計劃的延續性作爲目標函數的因子之一,則得到的相對最優方案,在延續性方面極可能會出現無法接受的結果,稱爲易失性計劃。

  例如:我們通過規劃引擎自動生成生產計劃,或物流車輛調度方案時(VRP方案),首次生成的方案,當環境條件未產生變化時對實現的運輸作業具有極高的指導價值,路徑、時間最短,成本最低,新能源車輛充電時機最佳。但隨着環境變化(例如路況變化、疫情導致地區封鎖等情況發生),舊的計劃需要不斷更新、適應新的環境變更,才能確保方案持續有效。再例如生產計劃場景中,當一個具有一定週期的計劃發佈(或下達)後,完成在下一週期計劃發佈前的時間段內,計劃發生意外情況,需要緊急修改計劃中各個任務的優先級,或執行時間需要變更(緊急插單、生產設備計劃外停機等情況)。均需要因應這些變更,重新定製一個新的可行的生產計劃,而新的計劃除了滿足一些硬性約束和一些軟性優化需求外,還需要考慮與原有工作的銜接。因爲有可能存在一些任務需要提前備料、設備參數預設等需要一定時間且需提前完成的準備操作。若在新計劃中被重新分配生產設備或原料,會導致浪費甚至新的計劃不可行,例如:一個任務已完成備料,且已備好的原料不能回收,則只能在已備料的設備上生產(設備停機除外)。因此,在設計規劃模型時,需要智能地防止此類“顛覆性”變化。

  針對這種需要略顯智能的場景要求,需要我們在設計約束分數時,進行稍微“人性化”的設計。OptaPlanner的用戶手冊關於持續計劃一節中,有相關的指導說明。大家可以參與一下其用戶手冊中以下章節。

https://www.optaplanner.org/docs/optaplanner/latest/repeated-planning/repeated-planning.html#nonvolatileReplanning

  通過上述用戶手冊章節可以理解到,所謂的人性化考慮,其設計過程也相當簡單,只不過將“限制過度變化”也作爲一種軟件約束考慮,從而在一定程度上對引擎的“無序尋優”作出限制。可以參考官方示例中的Machine Reassignment, 該示例中每個Process(Planning Entity)有一個originalMachine對象,表示該Process當前分配到的設備,若新分配的Machine與該originalMachine對象不一致,即表示當前規劃發生了設備切換,則使用相應的約束對該行爲進行懲罰扣分。從而從一定程度上限制Process的隨意切換問題。

  詳如下圖,左邊爲原始方案,中間爲變更後的易失性方案(產生的變更較大),右則爲非易失性方案(產生的變更相對小)。儘管從Cloud Balance示例的軟約束分數評價(成本最低)來看,中間方案的成本更低200 + 350 = 550, 而右則的方案成本爲200 + 400 = 600,但很明顯右則方案在產生變更時,任務的移動更少,相對中間方案易失性更小。因此,在設計時添加了一個限制任務移動的約束,每移動一個任務的設備即扣罰100分,右則的方案評分(僅移動兩個任務)更佳,加總後是扣分: 200 + 400 + 200 = 800,中間任務兩種約束分數加總後扣分是950.即將移動任務也納入評分後,右則的非易失性方案更佳。

  當然是否所有變更都是不好的呢?事實上具體情況需要視自己的業務場景而定。例如原始方案中所分配的資源已不可使用(機臺發生意外停機,需要使用其它機臺替代),這種情況並不在限制變更的範圍內(應該如何設計,大家可以自行思考一下)。另外一種情況相對更復雜一點,就是上述示例中的情況,需要對比變更的成本與收益,當收益高於成本時,即可掙脫變更限制。如果用戶手冊中的一句話即可概括:the gain of changing a plan must be higher than the disruption it causes。

 

本系列文章在公衆號不定時連載,請關注公衆號(搜“讓APS成爲可能”或掃以下QR Code)及時接收,二維碼:

 

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

 

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