您将获得一个加权连通图(20个节点),所有边都具有正权重。我们有一个从A点开始的机器人,例如必须在B,D和E点通过。我们的想法是找到连接所有这4个点的最短路径。机器人也有一个有限的电池,但它可以在某些点充电。
在互联网上进行研究后,我有两种算法: Dijkstra 和 TSP 。 Dijkstra 将找到节点与其他每个节点之间的最短路径, TSP 将找到连接所有点的最短路径。是否只有 TSP 的变体才能找到一组节点之间的最短路径?毕竟,在 TSP 中,所有节点都标记为“必须通过”。我还没有考虑电池限制。
提前致谢!
答案 0 :(得分:3)
您可以将图形缩减为TSP,然后在其上调用TSP算法:
u,v
和u
的距离v
。u
和v
之间的权重,作为Floyd-Warshall找到的距离。以上是最优的,因为假设路径较短。
D0=u->...D1->...->D2->...->Dk->...->t=D{k+1}
Di->...->D{i+1}
至少具有FloydWarshall(Di,D{i+1})
的权重(Floyd-Warshall的正确性),因此边缘(D0,D1),(D1,D2),...,(Dk,D{k+1)
存在于修改后的图表中,其权重小于/等于权重给定的路径。
因此,根据您的TSP-Solver的正确性,通过使用D0->D1->...->Dk->D{k+1}
,您获得的路径至少与候选最佳路径一样好。
答案 1 :(得分:1)
您可能还想查看广义旅行商问题(GTSP):节点被划分为子集,问题是找到每个子集中只访问一个节点的最小长度路由。允许模型从每个子集中选择它想要的任何节点。如果有必须访问的节点,您可以将它们全部放入子集中。