爬山和单对最短路径算法

时间:2009-05-17 15:31:25

标签: data-structures artificial-intelligence graph hill-climbing

我有一个奇怪的问题。任何人都可以告诉我在哪里可以找到相关信息,或者给我一些关于使用爬山方法的最短路径算法的介绍吗?我理解两者的基本知识,但我不能将两者结合在一起。维基百科有一个有趣的部分,关于通过爬山解决旅行销售人员,但没有提供更准确的解释。

  

例如,爬山可以   适用于旅行推销员   问题。很容易找到解决方案   访问所有城市,但将会   与最优的相比非常差   解。算法从   这样的解决方案并且很小   对它的改进,例如切换   两个城市的顺序   参观。最终,好多了   获得路线。

据我了解,你应该选择任何路径然后迭代它并在此过程中进行优化。例如,返回并从起始节点中选择一个不同的链接,并检查是否提供了更短的路径。

对不起 - 我没有说清楚。我理解如何将这个想法应用于旅行销售员。我想在最短距离算法上使用它。

4 个答案:

答案 0 :(得分:4)

你可以随便交换两个城市。

您的第一条路径是:A B C D E F A长度为200

现在你通过交换C和D来改变它:A B D C E F A长度为350 - 更糟糕!

下一步:A B C D F E A:长度150 - 您改进了解决方案。 ; - )

爬山算法很容易实现,但局部最大值有几个问题! [基于相同想法的更好的approch是simulated annealing。]

爬山是一种非常简单的进化优化,更复杂的算法类是genetic algorithms

解决TSP的另一个好的元启发式是ant colony optimization

答案 1 :(得分:2)

数据聚类中的例子是遗传算法期望最大化。通过单步的迭代,尝试在每个步骤中找到更好的解决方案。问题是它只找到一个局部最大值/最小值,它永远不会保证它找到全局最大值/最小值。

旅行商问题的解决方案,作为我们需要的遗传算法

  • 解决方案的表示作为访问过的城市的顺序,例如[纽约,芝加哥,丹佛,盐湖城,旧金山]
  • 健身功能作为行走距离
  • 最佳结果的选择是通过随机选择项目的适应性来完成的,适应度越高,选择生存的概率就越高
  • 突变将切换到列表中的城市,如[A,B,C,D]变为[A,C,B,D]
  • 两种可能的解决方案[B,A,C,D]和[A,B,D,C]的交叉导致[B,A,D,C],即切割两个列表在中间并使用一个父的开头和另一个父的结尾来形成孩子

然后算法:

  • 初始解决方案的初始化
  • 计算每种解决方案的适用性
  • 直到所需的最大适应度或直到不再发生变化为止
    • 选择最佳解决方案
    • 穿越和变异
    • 每种解决方案的适合度计算

有可能每次执行算法时结果都不同,因此应该执行一次以上。

答案 2 :(得分:1)

我不确定你为什么要使用爬山算法,因为Djikstra的算法是使用Fibonacci队列的多项式复杂度O(| E | + | V | log | V |): http://en.wikipedia.org/wiki/Dijkstra“s_algorithm

如果您正在寻找单路径问题的启发式方法,那么您可以使用A *: http://en.wikipedia.org/wiki/A * _ search_algorithm

但效率的提高取决于对目标的距离的可接受的启发式估计。 http://en.wikipedia.org/wiki/A * _ search_algorithm

答案 3 :(得分:0)

要爬上TSP,你应该有一条起跑路线。当然,挑选一条“聪明”的路线不会受到伤害。

从该起始路线进行一次更改并比较结果。如果它更高,你保留新的,如果它更低保持旧的。重复此操作,直到你到达无法爬升的地方为止,这将成为你最好的结果。

显然,使用TSP,你很可能达到局部最大值。但是可以获得不错的结果。