Initial: Mesh-Skills, Configs, Scripts

This commit is contained in:
root
2026-09-02 23:49:07 +02:00
commit 26c7980750
783 changed files with 145393 additions and 0 deletions
@@ -0,0 +1,39 @@
# GTFS-Neuberechnung — harte Lehren aus urlaub.perfekt-ohne-en.de (2026-08-19)
Ergänzung zum main SKILL.md. Diese Notes stammen aus dem echten Großumbau der
Fahrzeiten auf der Zugverbindungs-Webseite und sind die Dinge, die NICHT sofort
ersichtlich sind. (Haupt-SKILL.md-Patch war durch eine Schreib-Sperre blockiert;
diese Erkenntnisse gehören trotzdem zu diesem Umbrella.)
## Die 3 Teambefunde, die den Dijkstra erst korrekt machten
1. **Geo-Stop-Merging** — Ein Bahnhof hat MEHRERE aktive stop_ids in der st-Tabelle
(Saarbrücken Hbf: 6 IDs = Plattform-/Gleis-Stops). `stops.txt` stop_id ist nicht
eindeutig. Fix: Stops < ~350m Luftlinie zu einer Gruppe zusammenfassen; der Router
expandiert von/zu allen Gruppen-IDs.
2. **Umstiegsbuffer** — Ohne min ~4min Transfer-Puffer erlaubt Dijkstra physisch
unmögliche Anschlüsse (Ankunft 10:05 → Abfahrt 10:04) → zu optimistische Zeiten.
Buffer NUR beim Umstieg, nicht beim Start: `dep_s < t + (BUFFER if t>dep0 else 0)`.
3. **Profil-Query (Min)** — Feste Abfahrtszeit (09:00) liefert systematisch zu
langsame Werte, wenn die früheste Verbindung zufällig viele Umstiege hat.
Abfahrten über den Tag scannen (z.B. stündlich 06-22) und MIN(Fahrzeit) nehmen.
## Performance: EIN Dijkstra je Start statt je Verbindung
- Naiv: 12.201 Verbindungen × ~17 Abfahrtsstichproben = ~207k Dijkstra-Läufe → ~18h.
- Korrekt: EIN Dijkstra je eindeutigen Start (191 Starts), der ALLE Ziele gleichzeitig
erreicht (`spread(start_ids)` → dict stop→ankunft). Danach Werte ablesen → ~10 Min.
- Commit NUR am Ende, und nur markierte Ziele (0.0h / mehrdeutig) neu verteilen.
## Start ohne Bahnhof (z.B. Radevormwald)
Städte ohne eigene Bahnhofs-ID matchen in stops nicht. Löse über den nächstgelegenen
Bahnhof (Radevormwald → Remscheid-Lennep Bf) und addiere die Bus-Anreise (~20min):
`Gesamtzeit = BUS_MIN + Dijkstra(Bahnhof → Ziel)`.
## Ziel-Eindeutigkeit: Berlin-Falle
Mehrdeutige Zielnamen (z.B. "Berlin") matchen falsche/lokalnahe Stops → ungenaue
oder sogar 0.0h-Zeiten. Abbilden auf eindeutiges "… Hbf":
`UPDATE verkehr SET nach='Berlin Hbf' WHERE nach='Berlin';`
0.0h-Zeilen sind als Fehler zu behandeln und neu zu berechnen, nicht zu akzeptieren.