例如,我们有一个由顶点(城市)和边(道路)组成的图表,每条边(道路)都有特定的成本,找到访问所有城市的最低成本 ATLEAST ONCE 。成本是遍历的边的边际成本的总和。
“ATLEAST ONCE”部分抓住了我。在TSP中,我们只能根据Wiki访问节点一次。考虑图表,
A-B 11
A-C 5
B-C 2
B-E 4
C-E 3
C-D 20
D-E 100
在TSP中,循环路径将是ABEDCA cost-140(或)ACDEBA cost-140。从我的问题描述中我们可以访问每个顶点ATLEAST ONCE,因此我们可以有一个循环路径ACDCEBA cost-63<< ;一个TSP。这是我遇到问题的地方。这里有具体算法吗?我很确定TSP在这里不会很好用。
指针或伪代码将非常有用。
答案 0 :(得分:0)
对于每对节点,您可以应用shortest path algorithm并计算最短距离。这将是每对的新成本矩阵。
现在它缩减为Travelling Salesman Problem。
然后你可以应用TSP求解技术。
答案 1 :(得分:0)
鉴于您允许多次访问顶点,这有效地将您的不完整图形转换为完整图形(所有顶点连接),这是TSP所需要的。在一般情况下解决您的问题与解决度量TSP完全相同。好消息是,这是一个研究很多的话题。坏消息是您无法回避TSP - 因为您的问题与TSP的形式相同。
正如其他人所指出的那样,您可以通过计算每对顶点之间的最短成本并添加缺失的边来完成图形。您还需要替换已找到较低间接路径成本的任何现有直接边缘,以便拥有Metric TSP。您可以使用新的合成边缘存储它们的实际路径(通过中间顶点),以便您可以为最终答案恢复这些路径,或者您可以在收到TSP的结果时根据需要重新计算这些路径。
现在您可以将其解决为TSP问题。但是,在一般情况下,最佳地求解TSP太昂贵,因此您可能希望使用近似求解算法。可以使用各种这些(例如Christofides算法,Lin-Kernighan启发式算法),它们在保证的最优性水平和算法性能之间进行不同的权衡。
如果你实际上不关心完成循环,并且只想要一个访问所有顶点的最小路径,从任何顶点开始和结束,这是一个稍微不同的问题。为此,请在此处阅读我的答案:https://stackoverflow.com/a/33601043/5237297