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

注意, 这里并非传统的人找单算法, 他和人找单的区别在于, 避免了人的顺序对分配的影响, 保证了最终生成的是最小生成树队列

相关文章
相关标签/搜索