如何根据选定的边选择最短路径?

2024-06-16 12:44:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用NetowrkX和osmnxpython包来分析道路网。 一旦我得到了简化图,我想通过最短路径计算来评估网络的性能。为了获得一个特定的索引,我需要最短路径的长度,其中包括选定的边,这些边是通过高速公路边的最短路径。你知道吗

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

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

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

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

如何获得/提取所需的最短路径,包括高速公路边缘?你知道吗


Tags: in路径网络trueforkeys性能高速公路
1条回答
网友
1楼 · 发布于 2024-06-16 12:44:27

我没有访问您的图形或玩具的例子,类似它,而且我也没有得到它是你想要的确切。主要是:

  • 图是否加权?事实上,你使用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,以便更好地了解哪个算法更适合您的用例。
如果我误解了,请纠正我!你知道吗

相关问题 更多 >