Jaotada liikumised väljapääsupunktide vahel nii, et ühtegi sihtpunkti ei eelistata a priori — sarnaselt jõgikonna vee liikumisele. See on gravitatsioonimudeli (gravity model) põhiolemus.
Rahvastiku ja liikumiste jaotus väljapääsupunktide vahel põhineb gravitatsioonimudelil:
{prefix}_node_population.csv) — WorldPop-i rahvastik igal kohaliku tee sõlmel (population-analüüs §5){prefix}_gravity_exit_population.csv) — iga sõlme rahvastik liidetakse selle sõlme parima väljapääsupunkti alla
gravity_population, gravity_trips (= 2 × pop)nearest_population, nearest_trips (lähim-jaotus)See on peamine rahvastiku hinnang veebiatlasesse (popup "Elanikke (gravitatsioon)").
Klassikalises gravitatsioonimudelis on kahe piirkonna vaheline liikumine võrdeline nende "masside" (rahvastiku) korrutisega ja pöördvõrdeline kauguse/kulu astmega:
T_ij ∝ (P_i · P_j) / f(c_ij)
Selles rakenduses on igal teede sõlmel:
unified = nx.Graph()
weight = length * impedance_factor
Iga tee klass on kaalutud impedantsi kordajaga (kõrgem = aeglasem/vähem eelistatud):
| Tee klass | Impedants |
|---|---|
| motorway, trunk | 1.0 |
| primary | 1.1 |
| secondary | 1.3 |
| tertiary | 1.8 |
| residential, unclassified, service | 4.0 |
| track | 5.0 |
GRAVITY_ALPHA = 1000 # meetrit log-rahvastiku ühiku kohta
adjusted_cost = path_impedance - alpha * log(population + 1)
Suurem teenindusala rahvastik vähendab efektiivset kulu (tõmbab trippe juurde):
alpha * ln(1001) ≈ 6.9 km kompensatsioonalpha * ln(101) ≈ 4.6 km kompensatsioonIga sõlme jaoks leitakse Dijkstra'ga kulu igast väljapääsupunktist, kohandatakse gravitatsiooniga, ja parim = argmin(adjusted_cost):
best_exit = argmin(adjusted_cost) # gravitatsiooniga kohandatud
nearest_exit = argmin(impedance) # lihtsalt lähim (võrdluseks)
switched = best_exit != nearest_exit
switched näitab, kus gravitatsioon muudab valikut (sõlm kuulub "loogiliselt" kaugemasse, aga suuremasse keskusesse).
{prefix}_gravity_node_exits.csv — iga sõlm: best_exit, impedance_to_exit, gravity_value, switched{prefix}_gravity_segment_exits.csv — iga lõik: best_exit, impedance_to_exit, assignment_typefor node, e in best_exit.items():
grav_exit_pop[e] += node_population[node]
{prefix}_gravity_exit_population.csv — iga väljapääsupunkti rahvastik + päevased sõidud (2× pop).
Veebiatlases: väljapääsupunkti pop/trips = gravitatsioonipõhine (peamine). Lähim-jaotus on võrdluseks popupis ("Lähim-jaotus") ja nearest_pop_catch veeruna.
Skript: pipeline/gravity_exit_analysis.py
Loeb: {prefix}_pop_catchment.csv (väljapääsu rahvastik), {prefix}_node_population.csv (sõlmede rahvastik)
Kirjutab: {prefix}_gravity_node_exits.csv, {prefix}_gravity_segment_exits.csv, {prefix}_gravity_exit_population.csv