K-shortest paths using networkx package in python
我使用osmnx软件包创建了荷兰高速公路的多维图。
图是从osmnx返回的多重图。由于我有兴趣计算起点和终点之间的k最短路径,因此我尝试使用networkx库。但是,networkx似乎不适用于多重图。我所能计算出的最短路径。
我想问问是否还有其他方法可以在python上通过多重图执行k最短路径计算。
尝试使用networkx命令shortest_simple_paths(文档)。
它返回一个生成器,该生成器一次从最短到最长返回一条路径。
1 2 3 4 5 6 7 8 9 10 11 12
| G = nx.karate_club_graph()
X = nx.shortest_simple_paths(G, 0, 5)
k = 5
for counter, path in enumerate(X):
print(path)
if counter == k-1:
break
> [0, 5]
> [0, 6, 5]
> [0, 10, 5]
> [0, 6, 16, 5]
> [0, 4, 6, 5] |
这将与DiGraph一起使用,但是我不确定MultiDiGraph。但是,我不清楚道路网络是否会是MultiDiGraph。
- nx.info(graph)的输出显示该图是多重图。但是,当我尝试运行nx.shortest_simple_paths(graph,origin,destination)时,它输出:networkx.exception.NetworkX NotImplemented:未针对多图类型实现
-
是否有理由需要一个多重图而不是一个DiGraph?如果要用它创建DiGraph,是否会丢失任何信息?
-
现实世界中的街道网络通常是MultiDiGraphs。但是,值得检查您的具体情况以查看是否重要。例如,如果图形不包含平行边,则可以将其转换为无损失信息的networkx DiGraph。此外,如果它包含的并行边很少,则可以将其转换为具有最少(且可能是可接受的)信息丢失的networkx DiGraph。这使您的模型可以使用只能在DiGraph对象上运行的networkx算法。
-
如果将其转换为Digraph,则无法绘制路线。 osmnx绘图功能仅适用于多重图。
-
您可以创建一个DiGraph版本的副本并运行networkx算法。在您的情况下,我看不到任何平行的边缘,因此这很可能不会丢失任何内容。然后,您可以使用DiGraph和原始MultiDiGraph中的路径。否则,也许您可??以修改networkx代码,但是我不确定这样做会有多困难。