論文閱讀筆記,個人理解,如有錯誤請指正,感激不盡!該文分類到Machine learning alongside optimization algorithms。
01 container pre-marshalling problem (CPMP)
對集裝箱進行預翻箱整理,使得集裝箱的堆放順序符合取箱順序,以盡量減少取箱裝船過程中的翻箱次數。如下圖所示,出箱順序為1234……6,灰色的集裝箱2、4、5擋住了先要出來的集裝箱1、3,因此需要不斷移動灰色的集裝箱到別處去,直到不擋住別的箱子。這樣1可以順利先出,而后是2,接着是3……目標是最小化移動集裝箱的次數。
02 tree search中的DNN
樹搜索大家不會陌生,深度優先、廣度優先、分支定界等都屬於樹搜索策略。將Deep learning集成進tree search中,用於求解CPMP。利用深度神經網絡(classification DNN)在分支選擇上進行預測,給出分支的“好壞”,隨后按照分支的“好壞”(好的分支得到最優解的可能性更大)繼續搜索。同時,利用深度神經網絡(regression DNN)對分支節點的lower bound進行預測,剪掉不必要的分支。
下圖解釋了搜索過程中的分支選擇決策,以c節點為例,通過將c節點表示的問題和解信息輸入到DNN中,經過隱藏層,在輸出層通過一個softmax函數給出三個child節點e、f、g的概率(搜索該分支最終得到最優解的概率)。
通過DNN預測該節點的lower bound也是類似的,只不過該網絡的輸出只有一個數值,即當前節點的得到完整solution的cost(有可能overestimate或者underestimate)。
下圖展示了預測分支(classification DNN)的具體網絡形態。該神經網絡依賴於算例的size,假如訓練的算例size為n,那么只能預測size為n以及小於n的算例(通過設置虛擬點)。每一個集裝箱位都是一個節點,從而構成了DNN的輸入層。在輸入層之后通過weight sharing,給每一個tier分配一個權重,\(w_i\)。這樣就給每一個container分配了權重,比如第3層的container,對應的權重就是\(w_3\)。最終輸出層輸出每一個movement的概率,比如\(y_{2,1}\)表示的將stack 2上的container移動到stack 3上。
關於模型訓練,樣本通過精確算法求解獲得,無法精確獲得的,則是通過啟發式算法獲得近似解。
03 搜索策略
將上面的DNN應用到tree search中,搜索策略有好幾種,作者實現了三種結合DNN的樹搜索策略: Depth first search、Limited discrepancy search和Weighted beam search。前兩個的框架如下:
DNN在這些搜索框架中起到的作用主要有:
- 預測各個分支得到最優解的概率,令框架優先搜索概率高的支路。
- 預測節點的lower bound,從而進行必要的剪枝。不過預測lower bound是搜索樹深度為k的倍數才會執行一次,因為全部執行需要消耗大量的時間。
04 實驗結果
通過和目前最好的啟發式算法(BRKGA)進行對比,通過數據集G1訓練的模型為DLTS-G1,通過數據集G123訓練的模型為DLTS-G123。Gap(%)表示和最優解的對比。從下表可以看出,雖然BRKGA有着更快的求解速度,時間大概是DLTS的一半,但是得到的Gap卻是DLTS的3到23倍不等。
05 參考文獻
[1] Hottung A , Tanaka S , Tierney K . Deep Learning Assisted Heuristic Tree Search for the Container Pre-marshalling Problem[J]. Computers & Operations Research, 2019.