我有一个有向无环图,需要找到资源有限的最短路径。我的约束是所选路径必须具有消耗的最小设置资源数。
目前我使用Yen's K Shortest Path algorithm来计算K个最短路径,然后只接受那些满足我约束的路径。这里的问题在于猜测K,就好像它被错误地选择一样,可能找不到可行的路径。
我发现了很多关于这个主题的文献,this提供了一个很好的概述。但是,我正在努力理解它并找到一个能够实现的简洁算法(我使用的是Python,但是任何明确的算法思想都会很棒)。
我知道这个问题是NP-Complete,因此我对任何好的近似算法以及精确的方法感兴趣。
任何人都有任何好的建议吗?
答案 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。
您可以谷歌搜索论文的标题,您应该可以免费下载。我应该提一下,你的问题有一个不寻常的约束结构:即,你需要“花费”至少一定数量的资源,而不是确保你不花费“太多”的资源...