如何根据所选边线选择最短路径?

我正在使用NetowrkX和OsmnX Python软件包来分析道路网络。 获得简化图后,我想通过最短路径计算来评估网络的性能。为了获得特定的索引,我需要包含选择的边缘的最短路径的长度,这是通过高速公路边缘的最短路径。

首先,我列出了我感兴趣的高速公路边缘(G5是我的网络的对应图):

MW_edges=[(u,v,k,d) for u,d in G5.edges(keys=True,data=True) if  d['highway']=='motorway']

我使用以下函数来评估网络中所有节点对的最短路径:

paths=dict(nx.all_pairs_dijkstra_path(G5,cutoff=None,weight='length'))

如何获取/提取所需的最短路径(包括高速公路边缘)?

smalltiger67 回答:如何根据所选边线选择最短路径?

我无权访问您的图表或类似的玩具示例,而且我也无法完全获得您想要的。主要是:

  • 图形是否加权?您使用dijkstra的事实使我认为是事实,但是随后您正在使用道路网络的事实使我认为事实并非如此。

  • 您的目标是什么?给定两个节点(假设sourcetarget),您是否想要获得组成它们之间最短路径的节点?还是想要所有节点对的所有最短路径?有多种功能针对这些功能进行了优化。

我举了一个玩具示例,其中给定两个节点,该算法返回组成它们之间最短路径的节点。然后找到边缘很简单(只需从返回的列表中连续成对选取节点)即可:

import networkx as nx
import matplotlib.pyplot as plt

nodes = [i for i in range(10)]
edges = [(i,i+1) for i in range(len(nodes)-1)] + [(nodes[0],nodes[-1])] + [(nodes[4],nodes[8])]
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)

source,target = 4,9
print("Shortest path between nodes {} and {} = {}"
      .format(source,target,nx.bidirectional_shortest_path(G,source,destination)))

nx.draw_networkx(G)

我离开了画线,以帮助更好地可视化事物。我还建议您查看文档here,以更好地了解哪种算法更适合您的用例。
如果我误会了事情,请纠正我!

本文链接:https://www.f2er.com/3103551.html

大家都在问