Algorithm 具有有序航路点对集的航路规划

Algorithm 具有有序航路点对集的航路规划,algorithm,sorting,optimization,shortest-path,Algorithm,Sorting,Optimization,Shortest Path,我有一组节点。从一个节点到连接节点的旅行成本始终为1,但并非所有节点都直接连接。也就是说,从节点A到C的旅行可能需要经过节点B,其总旅行成本为2 然后我有一组有序的成对航路点。每个航路点对包含一个起点节点和目的地节点,必须按顺序访问 不必以任何特定顺序访问有序对本身,也不必紧跟在源节点之后访问目标节点 一个节点可以访问两次,如果这是为了优化整个路由的话。它应该永远不需要访问三次 我如何订购节点以实现最低旅行成本,并确保访问包含在航路点中的所有节点,并遵守上述订购对规则 我的头撞到墙上了。不幸的是

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

然后我有一组有序的成对航路点。每个航路点对包含一个起点节点和目的地节点,必须按顺序访问

不必以任何特定顺序访问有序对本身,也不必紧跟在源节点之后访问目标节点

一个节点可以访问两次,如果这是为了优化整个路由的话。它应该永远不需要访问三次

我如何订购节点以实现最低旅行成本,并确保访问包含在航路点中的所有节点,并遵守上述订购对规则


我的头撞到墙上了。

不幸的是,这是一个NP难问题,因为它从(公制)旅行推销员问题简化而来

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

  • 接受超级多项式运行时间
  • 放宽要求,使其不再是NP完全的
  • 使用近似算法
  • 将图约束到可以有效求解的集合(例如有界branchwidth图)

或者你可以使用多种方法的组合。例如,使用能够快速解决常见情况的精确算法,在病理情况下使用近似算法。

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

  • 计算图形的最短距离矩阵
  • 找到最短路线最长的一对航路点
  • 将该路由附加到最终结果
  • 从尚未处理的航路点集中删除该航路中出现的任何一对航路点
  • 对剩余的航路点重复从2开始的操作,直到没有剩余的航路点为止
  • 如果您遇到一对航路点以相反的顺序出现在路线中,则需要想出一种“有效”的方法来反向穿越路线

    另一个想法是:


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

    这个问题没有要求多项式时间。。。此外,虽然它肯定会提醒TSP,但您确定它可以简化为TSP吗?我对手头问题的一般解决方案感兴趣。如果它是次优的,或者在指数时间内运行,这是可以的。这些图表不是非常大。你是说,我必须走每一条可能的路线,边走边检查是否遵守规则,然后比较所有符合条件的路线以获得最短长度吗?“这是NP难的……因为它减少到TSP”-我想你的意思是从TSP减少?归结为TSP只表明问题是NP,这并不是说太多。@BlueRaja,我的意思是任何能解决这个问题的东西也能解决TSP。我不记得确切的术语了。如果你的航路点是(a,b)和(c,d),而(a,b)之间的唯一路线是(a,d,c,b)怎么办?您将被迫从d转到c,这是根据要求不允许的(来源和目的地不符合顺序)。然后必须重新访问d以满足第二对航路点的要求。