Brandýs-Boleslav
Začni psát pro vyhledávání...

Deník vývoje dopravního modelu — srpen 2026

Deník vývoje dopravního modelu — srpen 2026

Záznam práce, rozhodnutí a jejich zdůvodnění při přestavbě modelu na nástroj obhajitelný na zastupitelstvu. Navazuje na PLAN.md (orchestrační plán) a docs/kalibrace.md (metodika kalibrace). Práci prováděly orchestrované AI agenty (implementace Sonnet, analýza/verifikace Opus, orchestrace Fable); každá fáze končila adversariální verifikací a lidský dohled schvaloval směr mezi fázemi.

Výchozí stav a strategická rozhodnutí

  • Původně existovaly dva paralelní nástroje: mikrosimulace SUMO (sumo-brandys, mimo tento repozitář) a webový makroskopický model /doprava (MSA + BPR v prohlížeči, MapLibre). Rozhodnutí: hlavní nástroj je webový model — výpočet ~1 s přímo v prohlížeči zvládá libovolné kombinace uzavírek bez serveru a sedne do statického Jekyll webu. SUMO zůstává jako volitelný nezávislý validátor finálních scénářů (fáze 5 plánu, zatím neprovedena).
  • Účel: argumentace na zastupitelstvu a informování veřejnosti o dopadech rozkopání ulic. Z toho plyne hlavní kritérium všech rozhodnutí: obhajitelnost — každé číslo musí mít dohledatelný zdroj, každá známá slabina musí být přiznaná v dokumentaci.

Fáze 0 — stabilní ID úseků (commit 15ef816)

Problém: uzavírky, sdílené odkazy a scénáře se odkazovaly na pořadové číslo úseku v sit.geojson; každá regenerace sítě z OSM všechna čísla přeházela a potichu rozbila odkazy.

Řešení a vývoj úvahy: první návrh klíče <way id>#<pořadí segmentu> verifikace zamítla s reprodukovaným důkazem — vložení uzlu do way při běžné editaci OSM posune indexy a klíč pak ukazuje na jinou ulici, bez varování. Finální klíč je <way id>#<node id prvního uzlu segmentu> (u smyčkových way s příponou @n), který je stabilní vůči vkládání uzlů i délkovému filtru; při rozdělení way v OSM si klíč udrží jen část s původním way id (vědomé omezení, zdokumentováno v js/graf.js). Vedlejší nález verifikace: sdílený odkaz počítal základní stav včetně uzavírek, takže dopad vycházel +0 hodin — opraveno (základna se počítá vždy bez uzavírek).

Fáze 1 — kalibrace na sčítání ŘSD (commity 09061b9, 53d4de5)

Data: 23 sčítacích profilů kolem dvojměstí — předběžné výsledky celostátního sčítání 2025 (V2_CSD_2025.xlsx, rsd.cz) křížené s finálním CSD 2020 (scitani.rsd.cz). Uloženo v data/podklady_rsd.json, cíle v data/kalibrace.json, srovnání počítá tools/test_model.mjs (GEH statistika).

Průběh: výchozí shoda 3/23 profilů. Většinu zlepšení nepřineslo ladění vah, ale opravy mapování profilů na síť (špatně určená poloha MÚK, D10 jako dva jednosměrné pásy, topologická rekonstrukce průběhu tahů II/610 a II/101 městem ověřená bilancemi intenzit v křižovatkách). Po vyladění GEH < 5 na 19/23.

Klíčový obrat — strukturální validace proti ČSÚ (fáze 1b): nezávislá kontrola proti dojížďce ze Sčítání 2021 odhalila, že model sedící na profilech má obrácenou strukturu: ranní špička tekla do města (1 942 voz/h od Prahy, 104 ven), zatímco vyjížďka Brandýs→Praha je

  1. nejsilnější proud v ČR. Příčinou byla skutečná chyba v kódu — atrakce bran se počítala v jiných jednotkách (voz/h) než atrakce zón (obyvatelé), brány byly jako cíle ~13× podhodnocené a kalibrace to kompenzovala nafouknutím příjezdů. Poučení: shoda na sčítacích profilech nestačí, protože profily měří součty obou směrů. Opraveno oddělenou atrakční vahou wA, realistickým tripRate odvozeným z ČSÚ (2,8 cesty/os/den × podíl špičky × podíl řidičů) a doplněním průjezdných vazeb (mj. Neratovice↔Mladoboleslavsko přes brandýský most — doprava, která na mostě chyběla). Výsledek: GEH < 5 na 20/23, bilance města z fyzicky nemožných +2 203 na +395 voz/h, podíl Prahy 33 % produkce města. Známé napětí (dělba Praha D10:610 84:16 vs. ČSÚ 63:37) je přiznáno v zony.json.znameNapeti.

Fáze 2 — kurátorované scénáře (commit 01756dd)

Scénáře přestěhovány z kódu do data/scenare.json (formát viz docs/formaty.md), sdílení #s=<id>, tlačítko „Zkopírovat scénář” pro kurátory bez znalosti kódu.

Zásadní nález verifikace: scénář uzavírky centra obklíčil konektor zóny centrum — 1 344 voz/h „zmizelo” a nástroj tvrdil, že uzavírka dopravě ulevila (méně aut = méně vozokilometrů). Pro politický nástroj kredibilitní past první kategorie. Řešení v modelu, ne v datech: fallback konektoru — obklíčená zóna se přichytí na okraj uzavřené oblasti (obyvatelé vyjíždějí bočními ulicemi). Po opravě scénář centra korektně +129 vozohodin; verifikováno hashy, že bez uzavírek je výpočet bitově identický. K tomu trvalá UI pojistka: při významné neobsloužené poptávce se nikdy nezobrazí srovnávací metriky, jen výstraha.

Fáze 3 — panel „Typické cesty” (v tomto commitu)

Referenční body (data/mista.json) a doby jízdy konkrétních cest před × po uzavírce — překlad modelu do jazyka občana („Boleslav → náměstí: 3,1 min → 10,9 min při uzavřeném mostě”).

Blokující nález verifikace: model bez zdržení na křižovatkách jezdil přes náměstí průměrem 48–50 km/h; absolutní časy ~2× podhodnocené proti realitě i OSRM. Řešení (fáze 3b): křižovatkové penalizace — paušální zdržení za průjezd křižovatkou (uzel stupně ≥ 3) odstupňované podle třídy komunikace, parametry v KALIBRACE_KRIZOVATKY (js/graf.js). Jdou do volného času hrany, takže se konzistentně propisují do gravitačního modelu, přidělení i panelu cest. Následovala kompletní rekalibrace s trojím kritériem (profily + struktura + časy): GEH < 5 na 23/23 profilech, vše v ±15 %, městské průměry 25–33 km/h.

Věcné opravy dat z verifikace: bod „exit 14” byl ve skutečnosti exit 10 (Brandýs, × II/101) — skutečný exit 14 (Stará Boleslav, × II/610) je o 4 km jinde; sjednoceno v mista.json i popisech podkladů ŘSD. Bod „U nádraží” ležel 630 m od nádraží — přejmenován na „Brandýs – západ”.

Epistemická lekce (fáze 3c): ladicí smyčka matematicky dokázala, že původní pásma „reálných časů” nejdou splnit zároveň s profily ŘSD — načež reverifikace správně otočila otázku: pásma byla odhadnutá, nikým neměřená („4–7 min na 1,7 km” = průměr 14,5 km/h, který by sám neobstál). Poučení: nejméně podložený vstup v řetězci nese největší váhu argumentace, a proto musí mít každé kritérium provenienci. Když kritérium provenienci nemá, nesmí být důvodem k ohýbání modelu, který naopak doložené vstupy má.

Co z toho zůstalo otevřené (stav ke commitu): pásma v tools/test_model.mjs jsou pořád ta původní, odhadnutá z terénu, a tři z pěti dvojic do nich nespadají. Test je proto vypisuje jen jako INFO a do exit kódu nevstupují (naostro PRISNE_CASY=1). Nahradit je měřenou referencí je nedodělek — a je na dosah: Worker doprava/worker/ sbírá dojezdové časy z TomTom Routing API na sedmi trasách, takže pásma půjdou odvodit z opakovaného měření reálného provozu místo z odhadu.

Dořešeno téhož dne (commit b0b31b3): kritéria GEH a struktury poptávky se do té chvíle jen tiskla, takže úprava vah je mohla potichu rozbít. Nově je test vynucuje — GEH < 5 na ≥ 20/23 profilech, podíl pražských bran 30–45 %, vnitroměstské cesty 35–50 %, bilance města pod 500 voz/h. Meze jsou volnější než dosažený stav záměrně, aby model přežil aktualizaci dat ŘSD nebo regeneraci sítě; zhoršení uvnitř tolerance proto test nezachytí.

Stav k 1. 8. 2026

Hotovo: fáze 0–3 plánu (stabilní klíče, kalibrace ŘSD + ČSÚ, scénáře jako obsah, panel typických cest s křižovatkovými penalizacemi). Testy: node tools/test_model.mjs (plus přísný režim PRISNE_CASY=1).

Zbývá z plánu: fáze 4 — stránka metodiky pro veřejnost, prolinkování z webu, kontrola na mobilu (publikace = vědomý krok se schválením); fáze 5 (volitelná) — nezávislé ověření klíčových scénářů mikrosimulací SUMO. Backlog (PLAN.md): okrajové případy fallbacku bran, závod posuvníku intenzity, semafory z OSM dat, částečné uzavírky (kyvadlový provoz), MHD vrstva.

Souběžně (mimo tuto práci) vzniká v repu doprava/worker/ a js/zive.js — sběr živých dat; není součástí těchto commitů.