|
|
@@ -0,0 +1,78 @@
|
|
|
+# Gravitatsioonimudel (trip distribution)
|
|
|
+
|
|
|
+## Eesmärk
|
|
|
+
|
|
|
+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.
|
|
|
+
|
|
|
+## Kontseptsioon
|
|
|
+
|
|
|
+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:
|
|
|
+- **kulupotentsiaal** lähima väljapääsupunktini (impedance)
|
|
|
+- **gravitatsiooniline atraktiivsus** — mida suurem väljapääsupunkti teenindatav rahvastik, seda rohkem see trippe "tõmbab"
|
|
|
+
|
|
|
+## Meetod
|
|
|
+
|
|
|
+### 1. Ühtne impedance-kaalutud graaf
|
|
|
+
|
|
|
+```python
|
|
|
+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 |
|
|
|
+
|
|
|
+### 2. Gravitatsiooniline kulufunktsioon
|
|
|
+
|
|
|
+```python
|
|
|
+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):
|
|
|
+- linn 1000 inimesega: `alpha * ln(1001) ≈ 6.9 km` kompensatsioon
|
|
|
+- küla 100 inimesega: `alpha * ln(101) ≈ 4.6 km` kompensatsioon
|
|
|
+
|
|
|
+### 3. Parima väljapääsupunkti valik
|
|
|
+
|
|
|
+Iga sõlme jaoks leitakse Dijkstra'ga kulu igast väljapääsupunktist, kohandatakse gravitatsiooniga, ja parim = argmin(adjusted_cost):
|
|
|
+
|
|
|
+```python
|
|
|
+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).
|
|
|
+
|
|
|
+### 4. Sõlmede ja lõikude jaotus
|
|
|
+
|
|
|
+- `{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_type`
|
|
|
+
|
|
|
+## Gravitatsioon vs lähim väljapääs
|
|
|
+
|
|
|
+- **Lähim (nearest):** aluseks [[Liiklussageduse kaudne hindamine/02_Metoodika/03 Väljapääsupunktid ja teenindusalad]] — iga sõlm lähima väljapääsupunkti teenindusalasse
|
|
|
+- **Gravitatsioon:** suuremad keskused tõmbavad kauemalt liikumisi — realistlikum "voolupilt"
|
|
|
+
|
|
|
+Mõlemad on võrdlusena: gravitatsioon annab realistlikuma liikluskoormuse, lähim-alus on lihtsam ja läbipaistvam.
|
|
|
+
|
|
|
+## Rakendus
|
|
|
+
|
|
|
+Skript: `pipeline/gravity_exit_analysis.py`
|
|
|
+Loeb: `{prefix}_pop_catchment.csv` (rahvastik väljapääsupunkti kohta)
|
|
|
+Kirjutab: `{prefix}_gravity_node_exits.csv`, `{prefix}_gravity_segment_exits.csv`
|