在给定最大成本的情况下以最小成本和最大长度查找路径

时间:2013-09-18 00:02:30

标签: algorithm graph

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

正如我现在所说的那样,我正在使用DFS,而且速度非常慢(节点数量和最大长度也是如此)。我已经在DFS的每次迭代中丢弃了所有不可能的节点。

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

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

更新

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

graph 此路径(红色)没问题,但算法应继续搜索更好的解决方案

enter image description here

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

enter image description here

此处路径包含3个节点,因此它比以前好很多,而且成本是可接受的5

enter image description here

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

enter image description here

希望图像比文字更好地解释

2 个答案:

答案 0 :(得分:2)

创意1:

在我看来,您的问题是pareto optimal最短路径搜索问题的变体。因为您引用了两种不同的最优度指标:

  1. 按边数计算的最长路径
  2. 边缘权重最短路径
  3. 当然,一些侧面约束只会使问题更容易计算。

    您必须为帕累托最优结果实施多标准dijkstra。我找到了两篇有用的英文论文:

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

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

    创意2:

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

    创意3:

    如果边缘成本更重要,则应计算给定最大长度的两个节点之间的所有路径,并搜索具有最多边缘的节点。

    <强>结论:

    我认为通过使用创意1可以获得最好的结果。但我不了解您的情况,因此其他想法可能是选项二。

答案 1 :(得分:1)

此问题可以优先考虑为多目标约束满足问题:

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

此问题很难解决。因此,没有确切的多项式时间算法可以解决此问题。但是简单的本地搜索算法可能会帮助您:

  • 首先,使用Dijkstra算法找到称为P的最小成本路径。如果成本大于最大成本,则无法满足约束条件。
  • 接下来,尝试使用2个move运算符将更多节点添加到P中:
    • 插入:在P之外选择一个节点,然后将其插入P的最佳位置。
    • 替换:选择P外部的节点并替换P内部的节点(当不能使用插入运算符时)。
  • 最后,尝试使用替换运算符降低成本。