如何解决旅行推销员问题的起点和终点?

时间:2013-01-25 18:09:35

标签: algorithm traveling-salesman

我有一个求解器可以解决正常的对称TSP问题。解决方案意味着通过所有节点的最短路径,没有限制哪个节点是路径中的第一个节点和最后一个节点。

有没有办法转换问题,以便确保特定节点作为起始节点,另一个节点作为终端节点?

一种方法是将I - 一个非常大的距离 - 添加到这些开始/结束节点和所有其他节点之间的所有距离(在起始节点和结束节点之间的距离上加两倍),因此解算器很想只访问它们一次(从而使它们成为路径的起点和终点)。

这种方法有什么大的缺点,还是有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:15)

您可以添加一个虚节点,它连接到起始节点和结束节点,边缘的权重为0.由于TSP必须包含虚节点,因此最终结果必须包含序列start - dummy node - end(没有其他节点)到达虚节点的方法)。因此,您可以使用指定的起始和结束节点获得最短的Hamilton路径。即使图中的边缘为负,此解决方案也应该有效。

答案 1 :(得分:0)

下面是“虚拟节点”概念的可视化。左侧是具有相同起始节点和结束节点A以及最佳解决方案[A,B,E,D,C,A]的常规TSP。右侧是相同的TSP,但起始节点为A,结束节点为E。其最佳解决方案[A,B,C,D,E]显然与正常情况下的无关。我们找到该解决方案的方法是通过“破解” TSP图的距离矩阵。在距离矩阵的底部插入虚拟节点,并将其到节点A和E的距离设置为0,并将其到所有其他节点的距离设置为inf。然后当求解器尝试搜索距离矩阵以找到节点A,DUMMY,E的最佳序列时,例如[A,B,C,D,E,DUMMY,A],然后可以将其清除为[A,B,C,D,E]。

enter image description here

PS。请注意,这种类型的hack可能会对精确求解器的性能产生严重影响。精确的TSP求解器设置有各种几何启发式方法,并且将零距离和inf距离显然与之混淆。我为协和式飞机尝试了此方法,对此并不满意,有时需要更多时间来找到最佳解决方案。找不到用于处理此特定情况的任何文档,但也许有针对其进行了优化的精确求解器。如果您改用非精确方法(例如模拟退火),则不会有问题。

相关问题