如何使用 Concorde 解决 TSP?

How to solve a TSP using Concorde?

我有 12 个节点和每对节点之间的距离(以米为单位)。节点指的是城市中的不同街道。我需要获得 TSP 的精确解(不是启发式的)所以我想用 Concorde 程序解决 TSP 问题,但我无法引入数据。 Concorde 界面只是让我引入随机节点并解决那个问题,但我想给它我的数据。

我尝试创建具有以下结构的 .txt:

\#nodes \#edges
node1 node2 dist12
node1 node3 dist13
(etc)

并将扩展名更改为 .qs(正如我看到协和式飞机接受的那样),但我没有获得任何结果。我还设置了扩展名 .tsp 什么都没有。

此外,我在 google 地图中搜索了我的节点坐标,并创建了文本文件:

12
45.609400, 8.874233
45.612743, 8.893011
45.610751, 8.898242
45.610617, 8.902134
45.609246, 8.905195
45.612339, 8.907780
45.617118, 8.903145
45.606889, 8.900597
45.601403, 8.878341
45.602539, 8.883501
45.604054, 8.879854
45.613369, 8.894035

但是,Concorde 还是不接受我的文件。我究竟做错了什么?我应该如何在 Concorde 中引入我的数据?

此外,我尝试在协和式飞机的 NEOS 服务器中引入最后一个坐标的文件,但结果不是预期的,如图所示:

我目前正在研究 qs 格式。在网上找不到任何信息,但通过检查,它似乎如下所示。没有逗号,当然要保持计数正确。另存为*.qs并打开。

node_count edge_information_count
n1x n1y
n2x n2y
...
n(count)x n(count)y
n1 n2 edge_info
....
n1 n2 edge_info
...
n(count)1 n(count)2 edge_info

所以,我让这个(windows 协和 ui 版本,Win 8.1,惠普笔记本电脑)与您的数据一起工作,删除逗号,修复 header 行。这不是您想要的,但通过在边缘信息区域提供距离(并更新 header)它可能会起作用。

我的问题是,它是否使用边缘信息来得出解决方案?我不能说它确实如此。我将不得不检查解决方案以查看(并且我希望您同时处理它)。但我确实知道,如果你用边缘信息加载一个 qs,解决它,保存它,它会用解决方案替换边缘信息。

这里是你的欧几里德解法,不是你想要的:

12 0
45.609400 8.874233
45.612743 8.893011
45.610751 8.898242
45.610617 8.902134
45.609246 8.905195
45.612339 8.907780
45.617118 8.903145
45.606889 8.900597
45.601403 8.878341
45.602539 8.883501
45.604054 8.879854
45.613369 8.894035