具有资源约束的最短路径

时间:2011-12-30 16:30:38

标签: algorithm shortest-path np-complete

我有一个有向无环图,需要找到资源有限的最短路径。我的约束是所选路径必须具有消耗的最小设置资源数。

目前我使用Yen's K Shortest Path algorithm来计算K个最短路径,然后只接受那些满足我约束的路径。这里的问题在于猜测K,就好像它被错误地选择一样,可能找不到可行的路径。

我发现了很多关于这个主题的文献,this提供了一个很好的概述。但是,我正在努力理解它并找到一个能够实现的简洁算法(我使用的是Python,但是任何明确的算法思想都会很棒)。

我知道这个问题是NP-Complete,因此我对任何好的近似算法以及精确的方法感兴趣。

任何人都有任何好的建议吗?

2 个答案:

答案 0 :(得分:2)

您可以做的是将图表(V,E)转换为(V',E')其中

  • P(v)是原始节点v
  • 的价格
  • R是最大的资源使用量。
  • V' = {(v,k) | v in V and k in [0..R]}
  • E'((v,k),(w,l)) = E(v,w) and k+P(w)=l

然后你从(v0,P(v0))进行dijkstra搜索。如果可以找到v1的路径,则给定限制,到达它的最短距离将是(v1,k)顶点中最短的。

您显然不会创建实际的展开图。你修改过的dijkstra会发生什么,除了到目前为止的距离,你还可以保持资源的使用。如果它没有超过限制,你只会遵循一条路径。而不是保留dist[v],您将保留dist[v,k]代表到目前为止的最短路径,使用完全k资源。

如果您的资源限制非常大,这可能会增长很大。因此NP完整性。但是,如果您的资源限制很小,或者您不介意舍入到最接近的10,100或1000,它将以快速多项式时间运行。 特别是如果您在达到可用(v1,k)后实施停止优化。

答案 1 :(得分:1)

将此问题解决为k最短路径会因您不知道如何选择k而受到影响。

将其作为已接受的答案提出来解决,您需要为从源到节点v到达的所有不同路径中的k的潜在所有k值保持dist[v,k]这一事实(这会导致算法效率非常低) 。

存在用于解决该问题的伪多项式时间算法,正如您所期望的那样,称为“具有资源约束的最短路径问题”(SPPRC)。问题常常出现在车辆路径问题(VRP)和船员配对问题中(两者都是运输问题,主要在运营研究中处理)。作为起点,请参阅以下(评论)论文:S。Irnich& G. Desaulniers,“资源限制的最短路径问题”,G。Desaulniers,J。Desrosiers,M。Solomon(编辑):Column Generation,Springer,2005。

您可以谷歌搜索论文的标题,您应该可以免费下载。我应该提一下,你的问题有一个不寻常的约束结构:即,你需要“花费”至少一定数量的资源,而不是确保你不花费“太多”的资源...