有序航路点对的路线规划

时间:2013-02-25 16:58:29

标签: algorithm sorting optimization shortest-path

我有一组节点。从一个节点到连接节点的旅行成本始终为1,但并非所有节点都直接连接。也就是说,从节点A到C的旅行可能需要通过节点B,总的旅行费用为2。

然后我有一组有序的对航点。每个航路点对包含一个原始节点和目标节点,必须按顺序访问它们。

有序对本身不必以任何特定顺序访问,也不必在原始节点之后立即访问目标节点。

如果要优化整个路线,可以访问节点两次。它永远不需要访问三次。

如何命令我的节点实现最低的旅行成本并确保访问航点中包含的所有节点,并遵守上面的有序对规则?

我正用这个把头撞到墙上。

2 个答案:

答案 0 :(得分:0)

不幸的是,这是一个NP-Hard问题,因为它从(公制)旅行商问题中减少了。

这意味着在一般情况下,它不能在多项式时间内完成。你可以采取几种方法

  • 接受超多项式运行时间
  • 放宽要求,因此不再是NP Complete
  • 使用近似算法
  • 将图表限制为可以有效求解的集合(例如有界分支宽度图)

或者您可以使用多种方法。例如,使用精确算法快速解决常见病例,并在病理情况下回归近似算法。

答案 1 :(得分:0)

不是一个完整的答案,只是大声思考,一种贪婪的方法:

  1. 计算图表的最短距离矩阵
  2. 找到最短路线最长的航路点。
  3. 将该路线附加到最终结果。
  4. 从尚未处理的航路点集中删除该路线中出现的任何一对航路点。
  5. 从剩余的航路点开始重复2,直到没有航路为止。
  6. 如果您遇到一对以相反顺序出现在路线中的航路点,则需要提出一种“有效”的方式来反向遍历该路线。

    另一个想法:

    找到图的最小生成树,并从左到右遍历它。