k-shortest(替代)路径算法,java实现

时间:2012-10-07 22:49:41

标签: java algorithm graph mathematical-optimization shortest-path

你能推荐任何实现k-shortest算法的java库 - >寻找替代方法,而不是有向多图中唯一最短的方法?

我发现只有JGraphT,但实际上有bug(我提交了)但是我需要花很多时间修复它,是否还有其他可用的实现?除了JGraphT,我发现只有小型单人项目:/

或者很难修改Disjktra最短路径算法以显示替代路径?

由于

3 个答案:

答案 0 :(得分:5)

2个可能的选择:

选项1.来自the MascOpt Packageclass KshortestPath是k-shortest路径的Java实现的一个很好的选择。

选项2.您也可以从code.google.com尝试此操作 这似乎是一个人的努力,但好的是该算法是共享的:Yen的排名 - 详情在这里。(http://www.ohloh.net/p/k-shortest-paths

注意:查找给定图表中所有节点对之间的最短路径是另一个问题。请参阅Dijkstra vs. Floyd-Warshall上的这个问题。

另请注意,丰富图形的k-shortest paths往往是(Dijkstra)最短路径的微小变化 - 最短路径上的顶点之间的替代路径,成本略高。

我知道OP要求Java实现,但是如果人们有选择而R是一个选项,那么来自CRAN的kBestShortestPaths package也是一个非常好的选择。

希望有所帮助。

答案 1 :(得分:2)

找到k最短路径是相关的,但不是与替代路径完全相同的问题。好的替代路径更复杂。 Have a read其中列出了其他类似的方法:

  • k-Shortest Paths
  • 帕累托最优性
  • 高原法<​​/ li>
  • 惩罚方法

高原方法有点说明here

如果您可以阅读德语,请this lecture is nice

  • e.g。关于时间或距离的优化=&gt;问题:缺少有趣的替代方案
  • dijunct paths =&gt;同样的问题
  • k-shortest paths =&gt;问题:真正的替代方案可能不在前1000条路径下

第5页

所以直觉告诉我们:替代方案应该具有几乎相同的距离或时间。但应该是显着不同的。所以第一个想法:找到一个缩小长度和相似性的路径。问题:可能会有当地的弯路。

第6页

我们引入了第三个标准:本地优化:每个短子路径都需要是最短路径。

答案 2 :(得分:0)

之前有类似的请求,但在StackOverflow上查找所有路径。 Find all paths in a graph with DFS

希望这会有所帮助,但是答案却得到了回答,但没有得到确切的解决方案,而是更多的指南