Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 最小距离哈密顿路径_Javascript_Algorithm_Traveling Salesman - Fatal编程技术网

Javascript 最小距离哈密顿路径

Javascript 最小距离哈密顿路径,javascript,algorithm,traveling-salesman,Javascript,Algorithm,Traveling Salesman,我知道这是一个相当常见的问题(一般来说是tsp),但我已经被它难住了一段时间。我在寻找给定一组x,y坐标的最小距离哈密顿路径。起点和终点是完全任意的,但它不能循环,因此标准tsp是不存在的(虽然假定在距离所有其他节点0的位置添加一个虚拟点,然后在以后删除它,但我不知道该如何做) 这里有很多数学论文的链接,比如讨论解决类似问题的算法,但是我更愿意使用代码而不是复杂的方程,我真的不愿意重新发明轮子 当然,在一个主要的语言java、C++、Ruby、JavaScript、PHP等中,有一个相当简单的实

我知道这是一个相当常见的问题(一般来说是tsp),但我已经被它难住了一段时间。我在寻找给定一组x,y坐标的最小距离哈密顿路径。起点和终点是完全任意的,但它不能循环,因此标准tsp是不存在的(虽然假定在距离所有其他节点0的位置添加一个虚拟点,然后在以后删除它,但我不知道该如何做)

这里有很多数学论文的链接,比如讨论解决类似问题的算法,但是我更愿意使用代码而不是复杂的方程,我真的不愿意重新发明轮子

当然,在一个主要的语言java、C++、Ruby、JavaScript、PHP等中,有一个相当简单的实现,它可以解决我的问题的20个节点版本。 编辑:我也在寻找尽可能精确的,显然它不可能完全精确到20!这是一个大量的排列,但等于或优于人类在几分钟内所能做到的完美

Edit2:同样要澄清的是,我正在使用未加权图上的标准二维坐标。距离A->B==B->A

Edit3:为了消除混淆,这里有一个直观的示例,其中只有几点可以说明tsp是如何次优的(这种情况很容易解决,但节点越多,可能会更极端)

TSP减去最长路段(红线)

期望输出


您可以解决双音欧几里德旅行推销员问题。在
O(n^2)

中,tsp的一个简化版本是否可以通过动态规划来求解:/,看起来它创建了一个闭合回路。在某些配置中,仅删除闭合回路中的最长分段并不能很好地解决我的问题。如果您解决tsp,然后删除最长分段,则它们之间必须有更好的路径。如果这是错误的,那么我们可以找到另一个通过点的电路,添加你移除的线段,你得到tsp的最短解。看一看图像,除非我遗漏了什么,我很确定tsp方法不会起作用。如果你认为它在看到图像后仍然有效,我会试着弄明白你的意思。好吧,也许你是对的…但是添加一个虚拟节点可以确保双音巡更和tspI的效果。我认为虚拟点与其他所有东西的距离为零的想法是TSP答案将使用两个长度为零的链接,一个到该虚拟点,一个从该虚拟点。因此,在修改后的问题中,TSP的成本正是哈密顿路径的成本,最小化它会产生最小哈密顿路径的成本,您可以通过删除虚拟节点及其链接来恢复最小哈密顿路径。我修改了一个免费库来做到这一点:www.chihoang.de/index.php?id=1373。它使用蚁群优化算法。我用一个双最小生成树来检查它。我不太确定我的方法是否很科学,但欢迎你来看看?