K-кратчайшие пути с использованием пакета networkx в python
Я создал мультидграф автострады Нидерландов, используя пакет osmnx.
График является мультидиграфом, возвращенным из osmnx. Поскольку мне интересно вычислить k-кратчайшие пути между источником и местом назначения, я попробовал библиотеку networkx. Тем не менее, networkx, похоже, не работает с мультидиграфом. Все, что я могу вычислить по кратчайшему пути.
Я хотел бы спросить, есть ли другой способ выполнить вычисление k-кратчайшего пути в python по мультидиграфу.
2 ответа
Попробуйте использовать команду networkx shortest_simple_paths
( документация).
Он возвращает генератор, который возвращает один путь за раз от кратчайшего до самого длинного.
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.
Теперь у osmnx естьk_shortest_paths
метод, реализованный для мультидиграфа, вы можете использовать его следующим образом.
ox.routing.k_shortest_paths(G, s, t, k)