Jagada kohalik võrgustik teenindusaladeks (service areas) ümber iga väljapääsupunkti: igale teede sõlmele leitakse lähim väljapääsupunkt (võrgustiku kauguse järgi).
lengths, paths = nx.multi_source_dijkstra(ug_main, list(main_exits), weight="length")
Käivitatakse Dijkstra üheaegselt kõikidest väljapääsupunktidest (multi-source). Iga sõlm saab kauguse lähima väljapääsupunktini ja tee (path) sinnani.
origin_exit = path[0] # tee esimene sõlm = väljapääsupunkt
exit_of[node] = origin_exit
Iga sõlm kuulub selle väljapääsupunkti teenindusalasse, milleni tee kõige lühem on.
Iga väljapääsupunkti jaoks arvutatakse:
nodes_served — teenindatavate sõlmede arvavg_distance_m — keskmine kaugus sõlmedest väljapääsupunktinitotal_distance_m — kauguste summa
service_df = pd.DataFrame(service_data).sort_values("nodes_served", ascending=False)
Eraldi protseduur: eemaldatakse üks väljapääsupunkt korraga (top 30 suurima teenindusalaga) ja arvutatakse uuesti kaugused ülejäänud väljapääsupunktidest:
new_lengths, _ = nx.multi_source_dijkstra(ug_main, remaining_exits, weight="length")
detours = [] # suhe ja absoluutne suurenemine
ratio = new_dist / old_dist
increase = new_dist - old_dist
Tulemus: iga väljapääsupunkti "kriitilisus" — kui suur ümbersõit tekib selle sulgumisel.
exit_node, nodes_servedmean_detour_ratio, max_detour_ratiomean_detour_m, max_detour_m — keskmine/maksimaalne ümbersõidu pikkus meetritespct_severe_detour — % sõlmedest, kus ümbersõit > 2×bc = nx.betweenness_centrality(full_ug, k=100, weight="length", seed=42)
edge_bc = nx.edge_betweenness_centrality(full_ug, k=100, weight="length", seed=42)
Betweenness mõõdab, kui palju lühemaid teid läbib antud sõlme/serva — kaudne liikluskoormuse näitaja.
service_df — teenindusalade statistika (sort nodes_served järgi)vuln_df — haavatavuse tabel (sort mean_detour_m järgi)