如何轻松拆分旅行商推销路径? (近似)

时间:2014-05-01 00:54:17

标签: algorithm graph traversal

假设我们遇到一个问题,其中有几个城市的路径成本可变(按时间),我们有两个销售人员必须至少访问一个城市,两者之间。

现在,假设我们有一个给出推销员和一组城市的算法,可以为该推销员设计最佳路径。我们想要做的是以这样的方式拆分城市,即将一组分配给第一个销售员,另一组分配给另一个销售员,这为我们提供了一个解决方案,使得总时间尽可能低。有什么好办法呢?我们想要一个好的解决方案,但不一定是最优的。

我的想法是,我们可以使用某种启发式来确定给定的分裂是好还是坏,但是有很多城市,所以挑选分裂很难。我不完全确定如何解决这个问题。

澄清:每个城市必须由至少一名推销员访问,而不是两者。

编辑:它更像哈密尔顿路径,我们不需要返回原点城市。

1 个答案:

答案 0 :(得分:0)

我首先运行Kruskal's algorithm来查找最小生成树。然后轮流切割每个边缘。由于Kruskal算法找到了最小生成树,因此切割边缘应始终产生两组城市。检查两组城市的总跨越距离。如果总跨越距离大致相等,那么分割是值得考虑的,并且您可以在两组上运行旅行推销员(TS)算法。如果TS算法导致两次大致相等,那么这是一个很好的解决方案。否则,继续在最小生成树上切割边缘。