<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          番茄路徑優(yōu)化系統(tǒng)介紹

          共 1955字,需瀏覽 4分鐘

           ·

          2020-06-03 23:21

          df307e32b5f4fe798d28d76072bdfee6.webp


          程序猿聲

          代碼黑科技的分享區(qū)

          80742bcfab2b85613b8d2aa7eee1b28e.webp?


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


          ef5c700590c96f21dbce085609a09619.webp


          1

          問題背景



          整個(gè)項(xiàng)目還是基于VRP的一個(gè)背景,處理的問題在涵蓋經(jīng)典VRPTW的基礎(chǔ)上,還包括了處理以下約束的能力:
          1. 多時(shí)間窗(一般由于客戶營業(yè)休息時(shí)間等安排,會允許出現(xiàn)多個(gè)配送時(shí)間窗)2. 多車型(涵蓋冷鏈車型和常規(guī)車型,大型車輛和小型車輛等,能夠進(jìn)行混合配送)3. 交通管制約束(有些地方不允許大型的車輛進(jìn)入,只能安排小型車進(jìn)行配送)4. 時(shí)間窗為硬時(shí)間窗(早到等待,不允許晚到)5. 客戶需求多樣化(常規(guī)的貨物,冷鏈配送要求的貨物)6. 等等5b81023517d0ca69bffa1d7c59bb4e4c.webp


          b7b6992e52571906b45915f2c46bbcae.webp


          2

          算法性能



          系統(tǒng)的核心算法引擎基于啟發(fā)式算法開發(fā),具有比較優(yōu)秀的性能。不過口說無憑,將我們的算法和cplex進(jìn)行對比,首先是小規(guī)模算例上的對比(規(guī)定了CPLEX求解時(shí)間上限為1小時(shí)):


          4060996a5532ebf6951b1a94b1382f37.webp


          可以看到,相比較cplex而言,我們的算法有以下特點(diǎn):
          小規(guī)模算例對比
          1. 質(zhì)量更高:算例(1-7)我們的算法均取得了與CPLEX同樣的最優(yōu)解,在算例(8-11)上我們的算法取得了比CPLEX在1小時(shí)內(nèi)求得的可行解更優(yōu)的解(表中值越低越好)
          2. 時(shí)間更快:除了算例1時(shí)間略高于CPLEX外,其余算例時(shí)間均比CPLEX低。且CPLEX的求解時(shí)間隨著問題規(guī)模增加呈指數(shù)增長。當(dāng)規(guī)模變大時(shí),問題的求解時(shí)間急劇增加,在現(xiàn)實(shí)中很難應(yīng)用。而我們的算法求解時(shí)間隨問題規(guī)模增長呈線性增長,能夠在較快的時(shí)間內(nèi)求解較大規(guī)模的問題(分鐘級)。
          在大規(guī)模算例下(客戶節(jié)點(diǎn)60-200時(shí)),我們的算法求解結(jié)果與CPLEX在1小時(shí)內(nèi)求得的可行解進(jìn)行對比:

          a023441c15f02ddc798287366fa425ce.webp

          8d8a9afda5b57a36ede93f1823e6f79e.webp
          大規(guī)模算例下對比
          1. 相比商業(yè)求解器CPLEX在1小時(shí)內(nèi)求得的可行解,我們的算法得出的解成本更低。
          2. 如圖所示(時(shí)間越少越好),可以看出,在客戶規(guī)模為60-200的算例下,我們算法的求解時(shí)間遠(yuǎn)低于CPLEX的求解時(shí)間。
          同時(shí)為了彌補(bǔ)啟發(fā)式算法在求解質(zhì)量上的不足,我們在算法中應(yīng)用了一種比較的“鄰域搜索多樣化”技術(shù)


          0062f628aa606e9b501b03acb45a53e4.webp

          通過對搜索過程中的目標(biāo)值增加懲罰從而避免陷入局部最優(yōu),以擴(kuò)大搜索過程的多樣性達(dá)到尋找更優(yōu)解的目的。

          594a3396f32d7add86337d4c66e22d87.webp


          2f29d0a7bafa682c4bd236e42043fbd1.webp


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



          3

          系統(tǒng)介紹



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


          系統(tǒng)的主界面如下:


          a37c859001674f7c65ac3119122dd2bb.webp


          初次使用需要到任務(wù)管理中添加一個(gè)任務(wù),填寫任務(wù)名和任務(wù)相關(guān)描述,上傳算例文件保存任務(wù)后,便可以開始對任務(wù)進(jìn)行相應(yīng)的操作:


          2d8183e815dc29c66ad9602d7d5f0f13.webp


          系統(tǒng)后端會對算例文件進(jìn)行一個(gè)校驗(yàn)的操作,如果是瞎上傳的不符合格式的文件,會被撤掉。


          添加完任務(wù)后,可以在參數(shù)設(shè)置模塊對算法的參數(shù)進(jìn)行相關(guān)的設(shè)置,右邊是具體參數(shù)的詳細(xì)說明:


          944c0726bbf949bc6402b6a6bffb3682.webp


          然后就可以回到主頁面對剛剛添加的任務(wù)進(jìn)行一個(gè)求解了。當(dāng)在任務(wù)操作中選擇一個(gè)任務(wù),左下角的地圖便會將算例中的客戶節(jié)點(diǎn)在地圖上標(biāo)注出來:


          ea46e876b43719e2ade21ae05ec5cc27.webp


          隨后便可以點(diǎn)擊啟動算法,進(jìn)行求解,該過程是動態(tài)演示的過程,會隨著后端算法的求解不斷更新頁面上的信息,包括當(dāng)前進(jìn)度,當(dāng)前最優(yōu)解的詳情,算法收斂曲線等,該過程也可以隨時(shí)點(diǎn)擊停止按鈕終止算法:


          e10d397a659ab17b8cba1cfa14f16736.webp


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


          25a99a13e2f916f2afb2d8d2150e51f7.webp


          同時(shí),求解的結(jié)果也可以進(jìn)一步保存到后臺的數(shù)據(jù)庫中,相關(guān)詳情可以在結(jié)果查看中進(jìn)行管理:


          55105b88823e45e907f01c12d192dcfc.webp


          點(diǎn)擊某個(gè)任務(wù)的詳情后,便可以將該任務(wù)的求解記錄詳情給展示出來:


          4d24c7d13a3b21c927bf1465ad9c59e1.webp

          1999adfaeebe26ec7df161292ef2c707.webp


          當(dāng)然,小編還為此制作了演示視頻(人家說天不怕地不怕就怕咱廣東人說普通話……):



          關(guān)于該系統(tǒng),有感興趣的小伙伴可以聯(lián)系我進(jìn)一步細(xì)聊。不過源碼暫時(shí)不會公開的。


          推薦閱讀:

          干貨 | 想學(xué)習(xí)優(yōu)化算法,不知從何學(xué)起?

          干貨 | 運(yùn)籌學(xué)從何學(xué)起?如何快速入門運(yùn)籌學(xué)算法?

          干貨 | 學(xué)習(xí)算法,你需要掌握這些編程基礎(chǔ)(包含JAVA和C++)

          干貨 | 算法學(xué)習(xí)必備訣竅:算法可視化解密

          干貨 | 模擬退火、禁忌搜索、迭代局部搜索求解TSP問題Python代碼分享
          記得點(diǎn)個(gè)在看支持下哦~44971dd84fa9c218711175959f4584b2.webp



          瀏覽 55
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本午夜影院 | 成人天天爽 | 美女做爱视频网站 | 久久久香蕉视频 | 免费看操逼的网站 |