番茄路徑優化系統介紹-專注於算法與路徑優化VRP


前言

大家好,最近消失了一陣子。因為這兩周一直在折騰一款產品。事情是這樣的,此前搞算法一直是和命令行打交道基本上,搞得心煩,然后前陣子上頭條偶然看到一些前端框架做的系統,感覺還挺好看的,也蠻有趣的。於是就躍躍欲試想嘗試下新的東西,加上此前不是做了很多算法嘛,有了一定的基礎積累,於是想着把算法和UI結合起來,搞款能用的算法產品試試。

問題背景

整個項目還是基於VRP的一個背景,處理的問題在涵蓋經典VRPTW的基礎上,還包括了處理以下約束的能力:

  • 多時間窗(一般由於客戶營業休息時間等安排,會允許出現多個配送時間窗)
  • 多車型(涵蓋冷鏈車型和常規車型,大型車輛和小型車輛等,能夠進行混合配送)
  • 交通管制約束(有些地方不允許大型的車輛進入,只能安排小型車進行配送)
  • 時間窗為硬時間窗(早到等待,不允許晚到)
  • 客戶需求多樣化(常規的貨物,冷鏈配送要求的貨物)
  • 等等

算法性能

系統的核心算法引擎基於啟發式算法開發,具有比較優秀的性能。不過口說無憑,將我們的算法和cplex進行對比,首先是小規模算例上的對比(規定了CPLEX求解時間上限為1小時):

可以看到,相比較cplex而言,我們的算法有以下特點:

  • 質量更高:算例(1-7)我們的算法均取得了與CPLEX同樣的最優解,在算例(8-11)上我們的算法取得了比CPLEX在1小時內求得的可行解更優的解(表中值越低越好)
  • 時間更快:除了算例1時間略高於CPLEX外,其余算例時間均比CPLEX低。且CPLEX的求解時間隨着問題規模增加呈指數增長。當規模變大時,問題的求解時間急劇增加,在現實中很難應用。而我們的算法求解時間隨問題規模增長呈線性增長,能夠在較快的時間內求解較大規模的問題(分鍾級)。

在大規模算例下(客戶節點60-200時),我們的算法求解結果與CPLEX在1小時內求得的可行解進行對比:

  • 相比商業求解器CPLEX在1小時內求得的可行解,我們的算法得出的解成本更低。
  • 如圖所示(時間越少越好),可以看出,在客戶規模為60-200的算例下,我們算法的求解時間遠低於CPLEX的求解時間。

同時為了彌補啟發式算法在求解質量上的不足,我在算法中應用了一種全新的“鄰域搜索多樣化”技術,通過對搜索過程中的目標值增加懲罰從而避免陷入局部最優,以擴大搜索過程的多樣性達到尋找更優解的目的。

從圖上可以看出,加了“鄰域搜索多樣化”技術后的算法效果明顯比未加之前的要好,求解得到的解成本均有降低。

系統介紹

好了上面介紹了一下核心算法,這里來介紹下系統的UI界面。整個系統的UI采用的技術棧是springboot+vue前后端分離開發的模式,數據庫采用的是mysql。由於我對前后端這些完全沒有學過,這兩周開發的過程中都是邊學邊做的。其中踩過的坑和無數吐血的經歷等以后有時間再介紹了。唉~

系統的主界面如下:

初次使用需要到任務管理中添加一個任務,填寫任務名和任務相關描述,上傳算例文件保存任務后,便可以開始對任務進行相應的操作:

系統后端會對算例文件進行一個校驗的操作,如果是瞎上傳的不符合格式的文件,會被撤掉。

添加完任務后,可以在參數設置模塊對算法的參數進行相關的設置,右邊是具體參數的詳細說明:

然后就可以回到主頁面對剛剛添加的任務進行一個求解了。當在任務操作中選擇一個任務,左下角的地圖便會將算例中的客戶節點在地圖上標注出來:

隨后便可以點擊啟動算法,進行求解,該過程是動態演示的過程,會隨着后端算法的求解不斷更新頁面上的信息,包括當前進度,當前最優解的詳情,算法收斂曲線等,該過程也可以隨時點擊停止按鈕終止算法:

求解完成后,左下角的地圖會將求得的路徑在地圖上給逐一展示出來,同時也能看到整個過程的算法收斂曲線,包括當前解(可能不可行)和最優解曲線(必須為可行解,不然不會畫出來),還有最優解的路徑具體詳情:

同時,求解的結果也可以進一步保存到后台的數據庫中,相關詳情可以在結果查看中進行管理:

點擊某個任務的詳情后,便可以將該任務的求解記錄詳情給展示出來:


演示視頻

最后附上演示視頻:
番茄路徑優化系統展示

感興趣的小伙伴可以加我的微信進行細聊哦:

同時更多關於算法等精彩內容,請關注公眾號【程序猿聲】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM