使用旅行推销员求解器确定哈密顿路径

5

我被要求为旅行商优化问题和哈密顿路径或循环决策问题实现启发式算法。我不需要在实现本身方面寻求帮助,但我对自己的方向有一些问题。

我已经有了一个基于遗传算法的TSP启发式算法:它假设一个完整的图,从一组随机解作为种群开始,并致力于改进种群一定数量的代数。我能否也用它来解决哈密顿路径或循环问题?我只想检查是否存在路径,而不是优化以获得最短路径。

现在任何完整的图中都会有一个哈密顿路径,因此TSP启发式方法必须扩展到任何图。这可以通过将边设置为无限值来完成,如果两个城市之间没有路径,则返回第一个有效的哈密顿路径。

这是正确的方法吗?还是应该使用不同的启发式方法来解决哈密顿路径问题?我的主要关注点是它是否是可行的方法,因为我可以相当确定TSP优化可行(因为您从解决方案开始并改进它们),但是不能确定哈密顿路径决策者是否能在固定的代数中找到任何路径。

我认为最好的方法是自己测试它,但是我时间有限,所以在走这条路之前想问一下...... (我可以寻找不同的哈密顿路径启发式方法)


1
不是答案,但以下漫画可能会让你振奋一些: http://xkcd.com/399/ - samoz
1
我会在项目演示中使用它。 :D - Firas Assaad
2个回答

8

不知道你是否已经得到了答案。简单的方法是向所有其他点添加一个距离为零的虚拟点。解决TSP问题并去掉虚拟点 - 剩下的就是哈密顿路径。简单!


4

这两个问题都是NP完全问题,因此按照定义,您可以转换输入并使用相同的算法;-)

但基本思想应该是可行的。当然,您可能需要更改生成新路径和成功标准的方法。

编辑: 顺便说一句: 有一个随机化算法的建议: http://en.wikipedia.org/wiki/Hamiltonian_path_problem


谢谢。即使它起作用了,我能保证它会吗?还是说这只是一个“大多数情况下”有效的启发式算法?另外,我试图在Ruby中快速实现随机化算法,但描述不是很清楚。特别是,我不确定它所说的枢轴是什么意思(简单地删除然后添加一条边会导致错误的结果)。 - Firas Assaad
唯一保证在 NP 问题中找到最佳解决方案的方法是尝试所有可能的组合。虽然有一些小的捷径,但在大多数情况下,您必须尝试所有可能性。您的解决方案只是一个取决于运行过程中您的决策有多好的近似值。您可能会得到理想的解决方案,但也可能会陷入局部最优解,这不是最佳解决方案。 - Patrick Cornelissen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接