A*搜索Java-TSP

A*搜索Java-TSP,java,search,traveling-salesman,Java,Search,Traveling Salesman,可能重复: 对于一个任务,我必须实现一些搜索算法来解决旅行商问题,我理解这个问题,我理解算法是如何工作的,我只是不知道如何实现它(我的Java不是很好)但这应该是很简单的部分,但不幸的是,我对Java的知识还不足以应用我所知道的算法 因此,我想知道是否有人可以提供一些关于如何开始使用这个的提示或提示,或者甚至是一些好的链接来阅读,我还必须实现一些其他的算法,如果有一个更容易开始的算法,我很乐意使用它!我已经看过这里了,但似乎找不到任何相关内容:/ 非常感谢您的帮助!谢谢你我不是专家,但我认为A

可能重复:

对于一个任务,我必须实现一些搜索算法来解决旅行商问题,我理解这个问题,我理解算法是如何工作的,我只是不知道如何实现它(我的Java不是很好)但这应该是很简单的部分,但不幸的是,我对Java的知识还不足以应用我所知道的算法

因此,我想知道是否有人可以提供一些关于如何开始使用这个的提示或提示,或者甚至是一些好的链接来阅读,我还必须实现一些其他的算法,如果有一个更容易开始的算法,我很乐意使用它!我已经看过这里了,但似乎找不到任何相关内容:/


非常感谢您的帮助!谢谢你

我不是专家,但我认为A*不能用来解决旅行推销员的问题。我相信你知道TSP是NP难的,所以精确解是相当复杂的,并不存在于所有情况下。我所知道的(并使用过的)近似解的最简单方法是所谓的“模拟退火”,这是一种随机方法(即随机!)

这个想法很简单。将点组织到一个列表中,该列表表示所有节点之间的路径(称为“巡更”)。计算行程的长度并保存长度。然后选择一个随机子列表并简单地将其反转。计算新的长度。如果新列表较短,则保留它,否则放弃它。只需将这些步骤重复100/1000/10000000次(取决于点数),就可以得到合理的近似值

例如,假设有5个点(伪代码)

List-tour=[e,b,a,d,c]
int len=行程长度(行程)
列表newTour=[e,b]+[d,a]+[c]//a和d已颠倒
int-newLen=行程长度(newTour)
if(newLen

对于10分,100次迭代应该会产生很好的结果。

基本java教程并不难,也不是特别长,并且与诸如JUNG或类似的库相结合,可以帮助您处理图形对象方面的问题(节点、边等),您应该能够相当快地启动并运行。寻找关于数据结构和算法的教程,你应该会看到大量的例子来帮助你。我认为我需要使用各种节点来比较所有算法,我已经得到了一些文本文件来测试。哦,我在这里看到了关于A*的其他内容,但它们似乎都与TSP无关,或者如果是,那么我不知道如何在TSP上实现它。这里有一个精确的解决方案,可以通过DP来解决少量节点的问题。这一点很好。编辑了我的答案。我能问一下为什么a和d是颠倒的吗?它们只是随机选择的。在每次迭代中,您随机选取列表的一部分并将其反转。
List tour = [e, b, a, d, c]
int len = tourLength(tour)
List newTour = [e, b] + [d, a] + [c] // a and d have been reversed
int newLen = tourLength(newTour)
if(newLen < len) {
    tour = newTour
}