Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Algorithm TSP变量,可能的算法?_Algorithm_Graph_Traveling Salesman_Approximation_Np Hard - Fatal编程技术网

Algorithm TSP变量,可能的算法?

Algorithm TSP变量,可能的算法?,algorithm,graph,traveling-salesman,approximation,np-hard,Algorithm,Graph,Traveling Salesman,Approximation,Np Hard,经典的旅行商问题(TSP)定义之一是: 给出一个加权完全无向图,其中三角形不等式保持返回一条总权重最小的哈密顿路径 在我的例子中,我不想要哈密顿路径,我需要两个已知顶点之间的路径。因此,公式如下: 给定一个加权完全无向图,其中三角形不等式成立,两个称为源和目标的特殊顶点返回一条最小加权路径,该路径访问所有节点一次,从源开始,到目标结束 我记得,哈密顿路径是无向图中的一条路径,它恰好访问每个顶点一次 对于原始问题,Christodes算法是一个很好的近似值(最好解的3/2较差),是否可以针对我的情

经典的旅行商问题(TSP)定义之一是:

给出一个加权完全无向图,其中三角形不等式保持返回一条总权重最小的哈密顿路径

在我的例子中,我不想要哈密顿路径,我需要两个已知顶点之间的路径。因此,公式如下:

给定一个加权完全无向图,其中三角形不等式成立,两个称为源和目标的特殊顶点返回一条最小加权路径,该路径访问所有节点一次,从源开始,到目标结束

我记得,哈密顿路径是无向图中的一条路径,它恰好访问每个顶点一次

对于原始问题,Christodes算法是一个很好的近似值(最好解的3/2较差),是否可以针对我的情况进行修改?或者你知道另一种方法

从目标节点到源节点添加一条边(=道路),成本为0,就得到了一个TSP(三角形不等式并不适用)


《追击旅行推销员》一书简要地提到了这项技术。

为什么不使用dijkstra算法,在每个节点上额外保留路径信息。i、 例如,以最短路径从源传递到该特定顶点的顶点列表

到达终点顶点时停止。那么你的道路将是

当前边的起始顶点的路径+当前边


其中,当前边是指向目标的最后一条边。

是否有每个顶点必须精确访问一次的限制?。。。。。。。。。。。。。。。。。。。。。。。。固定的。谢谢。值得一提的是,指定起点/终点的哈密顿路径问题的变体有时被称为“受限哈密顿路径”。在这种情况下,添加一个具有0权重边(s',s)的顶点s'和一个具有0权重边(t,t')的顶点t'。新图仍然满足三角形不等式。在新图中,每个哈密顿路径必须从s'开始,在t'结束(反之亦然),从中可以提取旧图中的s-t路径。因此,现在您可以使用标准方法来解决这个问题。因此,我得到了一个新的图,添加了节点s'和t',以及权重为0的边(s',s)和(t,t')。当哈密顿路径访问所有节点时,它将通过s'和t',但如何提取s-t路径?我不能简单地删除s'和t'之间的部分,因为它可能包含其他节点。例如,a->s'->s->b->t->t'->a。我需要只访问所有节点一次。图形已完成,源和目标之间已经存在一条边。我不确定改变重量是否有意义。是吗?我想我有个主意了。将仅具有两条零权重边的顶点添加到源和目标。最后计算新图上的哈密顿路径。0权重确保源和目标是连续的。只需删除额外的节点和相对边,就可以得到解决方案。