尽可能短的路线,从任何地方开始和结束

时间:2019-02-27 17:32:49

标签: python algorithm graph-algorithm traveling-salesman

我正在寻找一种算法,该算法将连接大量地理坐标(100-1000),在它们之间创建尽可能短的路线,从任何地方开始并在其他任何地方结束。我正在使用Python。

我已经研究了可用的算法,但我的问题与“旅行推销员”相似,但是这需要我定义一个起点,并且最终会回到这一点。 我将把Uber带到任何起点,并从任何其他终点返回家中。我想要的是尽可能少地行走时覆盖所有点。我不在乎它的开始或结束。

Prim和Kruskal的算法似乎找到了很好的起点和终点,但是它们创建的是树,而不是像TSP那样的优化步行路线。

Prim的算法:

Prim's algorithm

Kruskal算法:

enter image description here

基于Prim / Kruskal的预期结果,但使用TSP逻辑(手工绘制的示例,未优化):

Desired outcome

2 个答案:

答案 0 :(得分:2)

Prim和Kruskal是查找生成树的算法。您正在尝试解决TS的一个著名变体(旅行推销员问题),在这种变体中您不会回到起点。

根据您的定义,您住所的位置并不重要。您定义的问题是要访问旅行距离最短的每个位置,返回起点。这在“文学”中有很好的介绍。

“快速打击”解决方案是采用任何标准的TS解决方案并删除最长的网段。尽管不能保证最佳解决方案,但这是一种很好的启发式方法。

答案 1 :(得分:2)

如果您不需要生产解决方案,请编写Python以TSPLIB格式转储距离矩阵,其中包含一个额外的城市(代表您将与Uber往来的地方),每个城市之间的距离为零。然后将其输入到ConcordeLKH