【问题标题】:TSP solver without triangle inequality没有三角不等式的 TSP 求解器
【发布时间】:2012-02-28 08:58:01
【问题描述】:

我有兴趣解决(小)网格图的 TSP。任何类型的库都对我有用,但这似乎比预期的要难。我尝试了几个在那里找到的求解器(包括协和式),但是当三角不等式不成立时,它们似乎都有问题。

例如,我希望求解器为下面的图(具有单位边权重)输出游览 (0, 1, 2, 1, 4, 3):

0-1-2
| |
3-4

在这种特殊情况下,我告诉协和边 (2, 4) 的权重为 1000,协和迅速生成成本为 1004 的游览 (0, 1, 2, 4, 3)。这显然不是我正在寻找。

理想情况下,Java 中会有一些简单的(可能是蛮力的)实现,但任何可行的方法都可以。谁能指点我一些代码,或者我真的必须自己去实现吗?

编辑:另外,重要的是我得到一个精确的解决方案,而不是一些近似值。

Edit2:确实,这似乎不是 TSP。我试图找到的是访问所有顶点的最短封闭步行。

【问题讨论】:

  • 您确定您正确应用协和式飞机吗?它应该是对称 TSP 问题的 exact 求解器...
  • @Li-aungYip:协和实际上提供了最佳的 TSP 解决方案。问题是 OP 期望的解决方案不是有效的 TSP 巡回演出。详情见我的回答。
  • 我明白了。事实上,鉴于该图,我认为没有任何个访问所有节点的其他封闭循环。 (关键词:关闭。2-1-0-3-4权重为4,访问所有节点,但没有关闭。)

标签: java algorithm graph grid traveling-salesman


【解决方案1】:

你的困难不是三角不等式。困难在于您期望的解决方案不是有效的TSP 游览。

TSP 寻找Hamiltonian cycle;也就是说,一个循环访问每个顶点恰好一次。您的解决方案 (0, 1, 2, 1, 4, 3) 会访问顶点 1 两次。

如果这就是您要寻求的解决方案,那么您要解决的问题就不是旅行商问题。

【讨论】:

  • 感谢您指出这一点!所以我想我应该首先计算图中所有顶点之间的距离矩阵,然后求解 TSP。这应该给我在我的网格中最佳游览的长度。对吗?
  • @Duh:坦率地说,我不明白这将如何帮助您将问题转化为 TSP。无论如何,我认为有用的第一步是弄清楚你正在寻找的究竟是什么(访问每个顶点至少一次的最短周期?)
  • 是的,这正是我想要的。在这种情况下,将问题移动到具有精确距离的完整图上解决了问题: - 很容易证明最优解的长度是相等的在完整的图表中
猜你喜欢
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多