【发布时间】: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