tsp的理論和實踐系列(6)更簡潔的多起點分配

tsp目錄算法

  1. 最簡單的實踐 juejin.im/post/5d1b14…
  2. 最簡單的理論 juejin.im/post/5d1b15…
  3. 當前tsp的現狀 juejin.im/post/5d1b19…
  4. 單起點任務分配 juejin.im/post/5d1c6d…
  5. 多起點任務分配 juejin.im/post/5d1dbe…
  6. 更簡潔的多起點分配 juejin.im/post/5d1dc2…
  7. 起點時間窗 juejin.im/post/5d1f1f…
  8. 終點時間窗和hk juejin.im/post/5d1f44…
  9. LK簡介 juejin.im/post/5d25b8…
  10. tsp系列暫停一下 juejin.im/post/5d302e…

tsp領域的問題, 並不都是tsp問題, 可是, tsp相關的算法通常都能解決, 只要你能爲某一個充滿個性的問題兒子找到他親生的解決方案爸爸.數據結構

上一篇, 咱們咱們有一個克魯斯卡爾的多起點的解決方案, 可是, 咱們對他還有諸多不滿, 所以在本期咱們繼續尋找更美的方案.post

從數據結構的角度思考
  • 每一個訂單都是一個隊列(後續用q代替), 一個從起點到終點的隊列, 某些訂單甚至是一個3個點的隊列.
  • 所以, 咱們每一個訂單都用一個q來表示. q裏面的點每次只暴露一個出來, 也就是提及點沒有被訪問過的狀況下, 終點是不可見的.
  • 那麼咱們是否能定義q和q之間的距離呢? 答案是能夠的.

  • 這裏A1A2B1B2表明從A1到A2再到B1再到B2,
  • 這裏A1被指定爲起點, 若是不指定起點, 那麼要找最短的生成樹, 以上圖舉例, 最小生成樹爲: B1B2A1A2
有了數據結構, 算法就變得很簡單

用普利姆就能夠解決問題, 每一個司機自身也是一個Q, 他至少有一個出發地址. 並且, 這個出發地址是強制的起始點, 不論去哪裏, 都要從當前的出發地址出發的.3d

多個司機構成一個森林, 按照q之間的距離, 逐步插入最短距離的q, 直到全部q都被插滿, 或者司機都被耗盡, 某個司機的工做量被耗盡以後, 就把他從能夠插的樹裏面剔除掉.cdn

這樣最終咱們再次用普利姆生成樹解決了這個配送分配問題, 不過別高興得太早, 明天還有更嚴峻的考驗在等着咱們, 這一次生成樹未必有用了, 預知後事如何, 請聽下回分解.blog

注意, 這裏並非傳統的人找單算法, 他和人找單的區別在於, 避免了人的順序對分配的影響, 保證了最終生成的是最小生成樹隊列

相關文章
相關標籤/搜索