Вы обнаружили ошибку в networkx
обработке MultiDiGraph
в алгоритмах кратчайшего пути. Смотрите следующий пример:
import networkx as nx
graph = nx.Graph()
graph.add_weighted_edges_from([(1,2,1), (2,3,2), (1,3,1)])
print(nx.betweenness_centrality(graph))
# {1: 0.0, 2: 0.0, 3: 0.0}
print(nx.betweenness_centrality(graph, weight="weight"))
# {1: 0.5, 2: 0.0, 3: 0.0}
multi_di_graph = nx.MultiDiGraph()
multi_di_graph.add_weighted_edges_from([(1,2,1), (2,3,2), (1,3,1)])
print(nx.betweenness_centrality(multi_di_graph))
# {1: 0.0, 2: 0.0, 3: 0.0}
print(nx.betweenness_centrality(multi_di_graph, weight="weight"))
# {1: 0.0, 2: 0.0, 3: 0.0}
Ошибка в
_single_source_dijkstra_path_basic
особенно следующие строки кода
for w, edgedata in G[v].items():
vw_dist = dist + edgedata.get(weight, 1)
Я не уверен, должны ли алгоритмы кратчайшего пути в networkx
работать для мультиграфа, но так как я не нашел примечания, я думаю, что это ошибка.
Я бы посоветовал вам открыть проблему на networkx GitHub .
Если это возможно для рассматриваемой части, вы можете подумать и о обычном DiGraph
.