【问题标题】:Using Traveling Salesman Solver to Decide Hamiltonian Path [closed]使用旅行推销员求解器确定哈密顿路径
【发布时间】:2010-10-31 09:13:35
【问题描述】:

这是一个项目,我被要求为旅行商优化问题以及哈密顿路径或循环决策问题实施启发式算法。我不需要有关实施本身的帮助,但对我的前进方向有疑问。

我已经有了一个基于遗传算法的 TSP 启发式算法:它假设一个完整的图,从一组随机解作为总体,并努力改进几代人的总体。我也可以用它来解决哈密顿路径或循环问题吗?我不想优化以获得最短路径,我只想检查是否有路径。

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

这是处理它的正确方法吗?或者我应该对哈密顿路径使用不同的启发式方法?我主要关心的是它是否是一种可行的方法,因为我可以肯定 TSP 优化是有效的(因为你从解决方案开始并改进它们),但如果哈密顿路径决策器会在固定代数中找到任何路径,则不是。

我认为最好的方法是自己测试它,但我受到时间的限制,并认为在沿着这条路线走之前我会问...(我可以为哈密顿路径找到不同的启发式)

【问题讨论】:

  • 不是答案,但下面的漫画可能会让你精神振奋:xkcd.com/399
  • 我将在项目演示中使用它。 :D

标签: algorithm language-agnostic genetic-algorithm traveling-salesman


【解决方案1】:

不知道你是否曾经得到过这个问题的答案。简单的技巧是添加一个与所有其他点的距离为零的虚拟点。解决 TSP 并摆脱虚拟点 - 剩下的是哈密顿路径。简单!

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。即使它起作用了,我能保证它会起作用吗?或者它只是一种“大部分时间”有效的启发式方法?我也尝试在 Ruby 中快速实现随机算法,但描述不是很清楚。特别是,我不确定旋转意味着什么(简单地删除然后添加边缘会产生错误的结果)。
    • 保证在 np 问题上找到最佳解决方案的唯一方法是尝试所有可能的组合。这里和那里都有一些小的捷径,但在大多数情况下,你必须尝试一切。您的解决方案只是一个近似值,取决于您在运行期间的决策有多好。您可能会得到理想的解决方案,但也可能会陷入局部最优,这不是最佳解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2012-10-26
    • 2015-06-22
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多