我有一个奇怪的问题。任何人都可以告诉我在哪里可以找到相关信息,或者给我一些关于使用爬山方法的最短路径算法的介绍吗?我理解两者的基本知识,但我不能将两者结合在一起。维基百科有一个有趣的部分,关于通过爬山解决旅行销售人员,但没有提供更准确的解释。
例如,爬山可以 适用于旅行推销员 问题。很容易找到解决方案 访问所有城市,但将会 与最优的相比非常差 解。算法从 这样的解决方案并且很小 对它的改进,例如切换 两个城市的顺序 参观。最终,好多了 获得路线。
据我了解,你应该选择任何路径然后迭代它并在此过程中进行优化。例如,返回并从起始节点中选择一个不同的链接,并检查是否提供了更短的路径。
对不起 - 我没有说清楚。我理解如何将这个想法应用于旅行销售员。我想在最短距离算法上使用它。
答案 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)
数据聚类中的例子是遗传算法或期望最大化。通过单步的迭代,尝试在每个步骤中找到更好的解决方案。问题是它只找到一个局部最大值/最小值,它永远不会保证它找到全局最大值/最小值。
旅行商问题的解决方案,作为我们需要的遗传算法:
然后算法:
有可能每次执行算法时结果都不同,因此应该执行一次以上。
答案 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,你很可能达到局部最大值。但是可以获得不错的结果。