我对解决(小)网格图的TSP感兴趣。任何类型的库都可以为我做,但这似乎比预期更难。我尝试了一些我在那里发现的求解器(包括协调器),但是当三角不等式不成立时,它们似乎都有问题。
例如,我希望求解器为图形输出游览(0,1,2,1,4,3)(具有单位边缘权重):
0-1-2
| |
3-4
在这个特殊情况下,我告诉concorde边缘(2,4)的重量为1000,并且concorde迅速产生了成本1004的巡回赛(0,1,2,4,3)。这显然不是我的意思寻找。
理想情况下,Java中会有一些简单的(可能是暴力)实现,但实际上可行的任何东西都可以。任何人都可以向我指出一些代码,或者我真的必须自己去实现这个吗?
编辑:同样,重要的是我得到一个精确的解决方案,而不是一些近似。
Edit2:确实,这似乎不是TSP。我想要找到的是一个访问所有顶点的最短的封闭行走。
答案 0 :(得分:5)
你的困难不是三角不等式。困难与您期望的解决方案不是有效TSP之旅的事实有关。
TSP寻求Hamiltonian cycle;也就是说,一个周期访问每个顶点一次。您的解决方案(0, 1, 2, 1, 4, 3)
会两次访问顶点1。
如果这是您正在寻求的解决方案,那么您尝试解决的问题不是旅行商问题。