8

我正在寻找一种算法,以在给定无向加权完整图中的最大成本的情况下找到具有最小成本和最大长度的两个节点之间的路径。权重是非负的。

就我现在的立场而言,我正在使用 DFS,而且速度非常慢(节点数量多且长度也最大)。我已经在 DFS 的每次迭代中丢弃了所有不可能的节点。

有人可以指出一个已知的算法来更好地处理这个问题吗?

澄清一下:理想情况下,算法应该搜索最小成本的路径,但如果这意味着访问更多节点,则允许增加成本。当它得出结论:在不超过成本限制的情况下不可能到达超过 n 个节点并且不可能以更少的成本到达 n 个节点时,它应该结束。

更新

图表示例。我们必须从 A 到 B。成本限制设置为 5:

图形 这条路径(红色)没问题,但算法应该继续寻找更好的解决方案

在此处输入图像描述

这更好,因为虽然成本增加到 4,但它包含了 1 个节点

在此处输入图像描述

这里的路径包含 3 个节点,所以它比以前好很多,成本是可以接受的 5

在此处输入图像描述

最后,这个解决方案甚至更好,因为路径也包含 3 个节点,但成本为 4,比以前少。

在此处输入图像描述

希望图片比文字解释得更好

4

2 回答 2

3

想法1:

在我看来,您的问题是帕累托最优最短路径搜索问题的变体。因为您参考了 2 个不同的最优性指标:

  1. 按边数计算的最长路径
  2. 边缘权重的最短路径

当然,一些侧面约束只会使问题更容易计算。

您必须实施多标准 dijkstra 以获得帕累托最优结果。对于这个问题,我发现了两篇很有前途的英文论文:

  • 一种多准则帕累托最优路径算法
  • 关于多准则最短路径问题

不幸的是,我无法找到这些论文的 pdf 文件以及我之前读过的德语论文 :( 不过,这应该是您的切入点,并将引导您找到一种算法来顺利顺利地解决您的问题。

想法2:

解决这个问题的另一种方法可能在于计算汉密尔顿路径,因为完整图中最长的路径确实是汉密尔顿路径。在计算完所有此类路径后,您仍然必须找到总边权成本最小的路径。如果路径的长度在每种情况下都比成本更相关,则此方案很有用。

想法3:

如果边的成本是更重要的事实,您应该计算给定最大长度的这两个节点之间的所有路径,并搜索使用最多边的路径。

结论:

我认为使用想法 1 将获得最佳结果。但我不太了解您的情况,因此其他想法可能是选项二。

于 2013-09-20T11:16:43.713 回答
1

这个问题可以表述为具有优先级的多目标约束满足问题:

  • 首先,解决方案必须满足最大成本的约束。
  • 接下来,解决方案必须具有最大节点数(第一个目标)。
  • 最后,解决方案必须具有最低成本(第二个目标)。

这个问题是 NP 难的。因此,对于这个问题没有精确的多项式时间算法。但是一个简单的本地搜索算法可以帮助你:

  • 首先,使用 Dijkstra 算法找到最小成本路径,称为 P。如果成本大于最大成本,则没有解决方案满足约束。
  • 接下来,尝试使用 2 个移动运算符将更多节点添加到 P:
    • 插入:选择 P 外的一个节点,插入 P 中的最佳位置。
    • 替换:选择P外的一个节点,替换P内的一个节点(当不能使用插入操作符时)。
  • 最后,尝试使用替换运算符来降低成本。
于 2020-05-31T09:47:40.197 回答