“Learn to Improve”(L2I):RL運用至VRP的方法介紹
這次,我們將介紹這篇論文《A learning-based iterative method for solving vehicle routing problems》來說說運用強化學習具體怎樣解決VRP問題。
簡介
該文章提出了一個“Learn to Improve” (L2I)
方法,更加高效,並且與OR方法進行了比較更優。該文章重點關注解決組合優化問題,尤其是帶容量限制的車輛路徑規劃問題(CVRP)。其核心思想
就是在元啟發式迭代搜尋的過程中,加入了RL來幫助更有效的選擇運算元。
文章的基本思路是:
1、構造初始可行解;
2、強化學習(RL)來選擇improvement operator(改進運算元)來迭代地優化解決方案;
3、perturbation operator(擾動運算元)來避免搜尋到區域性最優解。
CVRP
CVRP最終的解決方案是一組路線,保證每個客戶都僅拜訪一次,並且每個路線的總需求少於車輛的容量。該文章是基於原本的啟發是方法,首先生成初始解決方案,然後迭代地改進或擾動該解決方案。
運算元(Operator)
:是從一種解決方案到另一種解決方案的對映。
模型框架
下圖是模型的框架,在保證解決方案可行性的基礎下,該演算法將用改進運算元或擾動運算元對可行空間進行探索,在T(預先設定)步驟之後,我們選擇旅行費用最小的方法作為最終解決方案。探索的方向可以基於規則,可以通過機器學習或混合學習,該方法可以進行不同的整合機器學習和OR方法的實驗,其中某些方法可能會導致更好的解決方案質量或計算效率方面的優越方法。
對於改進運算元還是擾動運算元的選擇將通過閾值來確定:
- 改進運算元(improvement operator)
如果確定仍可以改進當前解決方案,則將使用基於RL的控制器來選擇改進運算元之一,並嘗試使用所選運算元來改進解決方案。該文擁有豐富的改進運算元集,其中路徑內的嘗試通過將客戶轉移到各個路線的不同位置來降低當前解決方案的成本,而路徑間的則嘗試通過在不同路線之間轉移客戶來降低成本。鑑於改進運算元具有鮮明的特徵,因此要事先知道哪個對於所研究的問題最有效是不容易的。
也很難知道最適合該問題的運算子的預定義順序。 因此, 基於RL的控制器 是學習對問題更有效的改進運算元集的理想選擇。 - 擾動運算元(perturbation operator)
另一方面,在達到區域性最小值時,擾動控制器隨機選擇破壞(全部或部分)並重建多條路線的擾動運算元,以生成新的起始解。 具體地說,如果沒有對L個改進步驟進行成本降低,則我們擾動該解並重新開始改進迭代。 由於擾動會極大地改變解決方案(通過產生一個通常比當前解決方案更差的完全不同的解決方案),我們發現從一個相對好的起點重新開始改進迭代是有用的(例如,通過過濾掉比當前解決方案或當前最佳解決方案差得多的重新開始的解決方案)。
很明顯,我們有意將改進運算元與擾動運算元分開,另一種設計方案是將它們混合在一起,由一個控制器來決定下一步應用哪個運算元。 然而,改進運算元與擾動運算元的性質不同,其影響也不同,因為擾動運算元通過影響整個改進迭代而具有長期效應。 我們的經驗還表明,只將RL集中在改進運算子上會使學習變得更容易。 最後值得一提的是,雖然基於規則的擾動控制器被證明是有效的,但我們不排除它也可以是基於學習的。
改進控制器和改進運算元
該文章的核心思想就是通過強化學習設計改進控制器,來對改進運算元進行選擇。
- 動作空間: 一組改進運算元(improvement Operators)
- 狀態空間: 問題例項,解決方案和執行歷史記錄的特徵
- 策略網路(Policy Network): 通過給定的狀態,輸出一系列動作發生的概率
- 策略網路引數更新方法: REINFORCE演算法(Williams,1992)
整個策略網路的結構如下圖所示:
輸入:
- 問題資訊和當前解決方案的輸入特徵被轉換為D維(D = 64)的Embedding
- 該Embedding被饋送到注意力網路(Attention Network)(Vaswani等,2017)(我們使用具有8個頭部和64個輸出單元的注意力模型)。
- 然後注意力網路的輸出與歷史動作及其影響相連線。
兩層全連線的神經網路(MLP):
- 第一層使用64個單元和Relu啟用函式
- 第二層使用Softmax,產生| A |個動作概率,其中A是一組動作
輸出:
運算元選擇的概率
獎勵函式:
- 第一個獎勵函式(由RF1表示)專注於改進運算元的中間影響。如果改進當前解決方案,則獎勵為+1,否則為-1;
- 第二獎勵函式(由RF2表示)基於優勢。在第一個改進迭代中,針對問題例項所達到的總距離被視為基線。對於每個後續迭代,在此迭代期間應用的所有運算元都將獲得等於迭代期間達到的距離與基線之間的差的獎勵。由於改進會越來越難,因此不能給早期運算元更大的獎勵,運算元應該得到同等的獎勵,並且不會出現衰減(衰減因子γ為1)
結果
該文章的baseline是Google的OR Tools、2017 LKH3啟發式演算法、還有一些近幾年效果較好的強化學習+attention演算法,從下表中可以看出,文章提出的L2I演算法較其他演算法有比較明顯的優勢。
參考文獻
[1] Chen, X. and Tian, Y. (2019). Learning to perform local rewriting for combinatorial optimization.In NeurIPS.
[2] Lu, H., Zhang, X., and Yang, S. (2020). A learning-based iterative method for solving vehicle routing problems. In ICLR.
相關文章
- scikit-learn介紹
- Python介紹和基礎運用Python
- Scikit-learn 機器學習庫介紹!【Python入門】機器學習Python
- 雲端計算日常運用場景介紹!
- 修改不同IP的方法介紹!
- vrp基礎VR
- 四,Java運算子詳細分類及使用方法介紹Java
- Jumpserver基礎運維-01介紹Server運維
- domutils 工具庫的使用方法介紹
- 簡單介紹PostgreSQL解析URL的方法SQL
- 簡單介紹NMS的實現方法
- Angular forRoot 方法的使用場合介紹Angular
- 簡單介紹oracle重置序列的方法Oracle
- 簡單介紹java中的equals()方法Java
- golang toolkits包的使用方法介紹Golang
- 輪換代理介紹及適用場景介紹
- call、apply、bind應用的介紹APP
- 用於找工作的自我介紹
- php遞增和遞減運算子的介紹PHP
- FastDFS簡介,運用AST
- Web應用安全測試前期情報收集方法與工具的介紹Web
- iOS開發- reloadData方法介紹iOS
- 全面介紹JavaScript陣列方法JavaScript陣列
- Lombok介紹及使用方法Lombok
- Sqlite 介紹及應用SQLite
- 反向代理用例介紹
- Hunspell介紹及試用
- 自動化運維工具Ansible介紹運維
- 動態IPvps的介紹及其連線方法
- 常用的模型整合方法介紹:bagging、boosting 、stacking模型
- Hanlp在ubuntu中的使用方法介紹HanLPUbuntu
- Python安裝PyMongo的方法詳細介紹PythonGo
- js--陣列的reduce()方法的使用介紹JS陣列
- guava的wiki和Strings的所有方法介紹Guava
- Disruptor的簡單介紹與應用
- [譯] 介紹適用於 iOS 的 AloeStackViewiOSView
- 自動化運維的發展趨勢介紹!運維
- 節點的運用和方法