【问题标题】:Shortest Paths with Resource Constraints具有资源约束的最短路径
【发布时间】:2011-12-30 16:30:38
【问题描述】:

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

目前我正在使用Yen's K Shortest Path algorithm 来计算 K 条最短路径,然后只接受那些满足我的约束的路径。这里的问题在于猜K,如果选错了,有可能找不到可行的路径。

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

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

大家有什么好的推荐吗?

【问题讨论】:

  • 您能解释一下资源限制是什么意思吗?如果这些约束具有某些格式,那么这个问题似乎不会是 NP 难题。
  • 我不仅试图找到最短路径,而且还试图找到一条满足约束的路径(目前只有一条,而我正在让它工作,但将来可能会更多)。这是一个最小约束。图中的每个节点 N 将 x 贡献给总资源计数 N_x。要使路径有效,对路径中的所有 N 求和 (N_x) >= Min。
  • 您的概览链接对我不起作用,但您尝试过 Eppstein 的 k-shortest-paths 算法吗?它不需要预先限制k,而是一条一条地生成最短路径,您可以简单地不断生成它们,直到找到满足您的约束的路径。
  • 谢谢@han,如果你有兴趣查看它,我想我已经修复了概述的链接。我没有尝试过 Eppstein 的 k-最短路径算法,但现在阅读他的论文,它看起来是 Yen 的一个很好的替代方案。您知道免费提供的实现吗?我最终会详细介绍,但如果可能的话,在我的问题上与 Yen 快速比较会很酷......
  • 您可能还对 Jiménez 的 k-shortest-paths 算法(“递归枚举算法”)感兴趣,它比 Eppstein 的算法简单得多,而且在实践中速度更快(但渐进速度较慢)。

标签: algorithm shortest-path np-complete


【解决方案1】:

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

  • 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],代表迄今为止到v的最短路径,完全使用k资源。

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

【讨论】:

    【解决方案2】:

    将这个问题解决为 k 最短路径的问题在于您不知道如何选择 k

    按照公认的答案建议解决它,因为您需要为从源到达节点 v 的所有不同路径的可能所有 k 值维护 dist[v,k](这导致算法效率非常低)。

    有一些伪多项式时间算法可以解决这个问题,如您所料,它被称为“具有资源约束的最短路径问题”(SPPRC)。该问题经常出现在车辆路线问题 (VRP) 和机组配对问题中(两者都是运输问题,主要在运筹学中处理)。有关起点,请参见以下(评论)论文:S. Irnich & G. Desaulniers,“Shortest Path Problems with Resource Constraints”,G. Desaulniers、J. Desrosiers、M. Solomon(编辑):Column Generation,Springer, 2005 年。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 2021-12-08
      • 2020-09-26
      • 2016-05-28
      相关资源
      最近更新 更多