Algorithm TSP变量的近似算法,固定起点和终点,但起点除外#x2B;允许在每个顶点进行多次访问

Algorithm TSP变量的近似算法,固定起点和终点,但起点除外#x2B;允许在每个顶点进行多次访问,algorithm,graph-theory,graph-algorithm,traveling-salesman,approximation,Algorithm,Graph Theory,Graph Algorithm,Traveling Salesman,Approximation,注意:由于旅行的结束地点与开始地点不同,而且只要我仍然访问所有点,每个点都可以访问多次,因此这实际上不是TSP变体,但我之所以这样说是因为对问题没有更好的定义 所以 假设我要去徒步旅行,有n个兴趣点。这些地点都由徒步小径连接起来。我有一张地图,上面显示了所有的路线及其距离,给了我一张有向图 我的问题是如何近似一个从a点开始并访问所有n个感兴趣的点的旅行,同时在除了我开始的点之外的任何地方结束旅行,我希望旅行尽可能短 由于徒步旅行的性质,我很遗憾地认为这不是一个对称问题(或者我可以将我的非对称图转

注意:由于旅行的结束地点与开始地点不同,而且只要我仍然访问所有点,每个点都可以访问多次,因此这实际上不是TSP变体,但我之所以这样说是因为对问题没有更好的定义

所以

假设我要去徒步旅行,有n个兴趣点。这些地点都由徒步小径连接起来。我有一张地图,上面显示了所有的路线及其距离,给了我一张有向图

我的问题是如何近似一个从a点开始并访问所有n个感兴趣的点的旅行,同时在除了我开始的点之外的任何地方结束旅行,我希望旅行尽可能短

由于徒步旅行的性质,我很遗憾地认为这不是一个对称问题(或者我可以将我的非对称图转换为对称图吗?),因为从高空到低空显然比从另一个方向更容易

我还认为它必须是一种适用于非度量图的算法,在非度量图中,三角形不等式是不满足的,因为从a到b到c可能比从a到c直接走很长很奇怪的路要快。我确实考虑过三角不等式是否成立,因为只要我访问所有的点,就没有多少限制,只要我访问所有的点,意味着我总是选择从A到C两条截然不同的路径中最短的一条,因此永远不会选择漫长而怪异的道路。 我相信我的问题比TSP更简单,所以这些算法不适合这个问题。我曾考虑过使用最小生成树,但我很难让自己相信它们可以应用于非度量非对称有向图


我真正想要的是一些指针,告诉我如何找到一个近似算法,在所有n个点上找到一个接近最优的旅行

你可以将这个问题简化为一个具有n+1个顶点的普通TSP问题。为此,取节点“A”和所有感兴趣的点,计算每对点之间的最短路径。可以在原始图形上使用所有对最短路径算法。或者,如果n明显小于原始图形大小,则对这些n+1顶点使用单源最短路径算法。此外,您还可以将所有路径的长度(以“A”结尾)设置为某个常数,该常数大于任何其他路径,从而允许在任何地方结束行程(这可能仅适用于TSP算法,即查找往返路径)


结果,您得到了一个完整的图,它是度量的,但仍然是不对称的。您现在所需要的就是在这个图上解决一个普通的TSP问题。如果要将此非对称图转换为对称图,请说明如何进行转换。

要将问题简化为非对称TSP,请引入一个新节点u,并从u到a以及从除a到u以外的所有节点生成长度为L的弧,其中L非常大(足够大,以至于没有最佳解决方案再次访问u)。从巡更中删除u,以通过所有其他节点获得从a到其他节点的路径。不幸的是,这种减少只额外保留了目标,这使得近似保证因常数因子而变得更差

Evgeny指出的缩减目标是非度量对称TSP,因此缩减对您没有用处,因为已知的近似都需要度量实例。假设轨迹集合形成平面图(或接近平面图),由于存在常数因子近似,这可能很难实现,并且在实践中可能无法给出合理的结果。对一般图给出一个简单的对数因子近似


如果有合理数量的路径,分支和绑定可能会为您提供最佳解决方案。G&S和branch and bound都需要求解ATSP的Hold-Karp线性规划,这本身可能有助于评估其他方法。对于实践中出现的许多对称TSP实例,它给出了最佳解决方案成本的下限,在真实值的10%以内。

您应该将此问题发布到,因为您不介意多次访问同一节点,您可以转换权重,使三角形不等式保持不变。如果a->c在最优解中比a->b->c更远,你永远不会直接使用a->c。因此,如果你用a->b->c的值替换a->c更好,这样你的度量满足三角不等式(在这里你可以得到更好的结果)。我正在投票将其移至cs.stackexchange.com-希望它能在那里得到一些答案。:)谢谢你指出我答案中的一个缺陷。现在将其修正为公制。首先感谢您花时间回答我的问题。我玩了一下branch and bound,但没能产生一个我喜欢的结果。这只是由于我的无能(:)而不是你的回答。不过,我确实对另一篇文章很满意,所以我冒昧地把这篇文章作为答案,不过还是要谢谢你!这似乎是要走的路线,保持简单,同时给出合理的结果。我同意这一条,因此将你的帖子作为答案。非常感谢你的时间,这似乎试图找到一条(哈密顿)路径,所以这个答案在我看来是正确的,在这个意义上,解一个就会解另一个。对我来说,你的问题似乎并不容易。这可能是因为您也可以使用重复(TSP-R),而不是因为重复的复杂性不同