User:Sanv05

From Simulace.info
Revision as of 23:05, 12 June 2025 by Sanv05 (talk | contribs)
Jump to: navigation, search

Kontrola jízdenek v MHD

Definice problému

MHD je nedílnou součástí života v Praze. Aktuálním problémem v této sféře je cestování bez platného jízdného dokladu. Jelikož je dopravní podnik mimo jiné financován právě z příjmů z jízdného, daný problém představuje zdroj finančních ztrát. Představená simulace se zabývá optimalizací kontrol platnosti jízdních dokladů v systému pražské MHD. Její cílem je otestovat, jak počet a rozmístění revizorů v síti metra ovlivňují objem udělených pokut a míru zachycení černých pasažérů. Pomocí simulace lze najít vhodné inspekční strategie, které určí, kam a kolik revizorů umístit pro zefektivnění jejich práce. Výsledky simulace mohou pak sloužit jako doporučení pro dopravní podnik k tomu, jakou inspekční strategii zvolit pro optimalizaci kontrol jízdenek.

Metoda

Pro vypracování multiagentní simulace byl použit nástroj NetLogo. Výhodou daného nástroje je velmi intuitivní prostředí, ve kterém uživatel může modelovat chování agentů, vytvářet vizualizace sítě stanic, průběhu a časového vývoje sledovaných parametrů simulace. NetLogo umožňuje rychlé nastavení vstupních parametrů, jako jsou umístění a počty revizorů, a okamžité sledování dopadu změn.

Jako alternativy byly hned na začátku odmítnuty obecné programovací jazyky a knihovny (složité nastavení a podrobné kódování) a deterministické modely (nezachycují náhodu při kontrolách platnosti jízdenky). Nástroje na systémovou dynamiku, např. Vensim, by pak nedokázaly reprezentovat přesné umístění revizorů a jednotlivé agenty s platnou či neplatnou jízdenkou, proto bylo zvoleno NetLogo.

Pro agregaci dat z většího počtu běhů a analýzu výsledků z různých scénářů byl použit Microsoft Excel. Je to známé, rychlé a obecně standardní řešení pro podobné úlohy.

Model

Stanice

Základem modelu je prostředí, ve kterém bude probíhat simulace. Je to reprezentace centrální části pražského metra, která zahrnuje 3 linky (A, B, C). Vzhledem k výkonnostním a vizuálním omezením bylo rozhodnuto zobrazit pouze 5 stanic každé linky, tedy dohromady 15 stanic:

  • Linka A — Staroměstská, Můstek, Muzeum, Náměstí míru, Jiřího z Poděbrad
  • Linka B — Karlovo náměstí, Národní třída, Můstek, Náměstí republiky, Florenc
  • Linka C — I. P. Pavlova, Muzeum, Hlavní nádraží, Florenc, Vltavská

V rámci modelu v kódu NetLogo jsou pojmenovány symbolicky (A1-A5, B1-B5, C1-C5) pro jednodušší správu rozmístění. Každá stanice je agent station, který má jako jeden z atributů název konkrétní linky, jejíž součástí je. Stanice jedné linky jsou mezi sebou pak vizuálně spojeny, obarveny a zařazeny do jednoho z globálních seznamů station-list-X, kde X je název linky. Tím způsobem je vytvořena linka jako posloupnost stanic, tři takové linky tvoří výsledné prostředí.

MHD mapa.png

Revizoři

Další agenti jsou revizoři, reprezentované v modelu modrými kruhy vedle stanic. Jsou přiřazeny ke stanici, kde pak zůstávají a kontrolují pasažéry (pokud jsou na dané stanici) podle hodnoty inspection-rate. Pokud je v oblasti stanice více pasažérů, revizor zkontroluje tolik, kolik může podle této proměnné.

Pasažéři

Nakonec v modelu jsou pasažéři, které jsou před začátkem simulace čekají na náhodných stanicích. Po začátku simulace začínají pohybovat se po lince, ke které jsou přiřazeni, dokud nedorazí do cílové linky nebo nebudou zachyceni revizorem. Jejich atributy jsou:

  • valid-ticket? — boolean hodnota, zda má platnou jízdenku nebo ne, podle ní je také nastavena barva pasažéra: bíla - má, fialová - ne
  • state — stav, v jakém je: waiting (čeká na stanici) nebo traveling (v pohybu)
  • line — linka, po které se pohybuje
  • current-index — aktuální nebo poslední navštívená stanice
  • destination-index — cílová stanice

Globální proměnné

  • station-list-A/B/C — seznamy stanic
  • inspection-rate — míra kontrol za tick
  • fare-evasion-rate — míra jízd bez jízdenky
  • max-ticks — počet ticků pro zastavení simulace
  • passenger-spawn-rate — kolik vznikne pasažérů na stanici při generování pasažerů
  • num-inspectors — počet revizorů, musí odpovídat počtu elementů v inspector-assignments
  • total-fines — počet udělených pokut za běh
  • total-evaders — počet černých pasažérů za běh
  • inspector-assignments — seznam s se stanicemi, kde jsou revizoři, musí odpovídat num-inspectors
  • total-spawned — počet pasažérů za běh

Propojení na data

Aby model mohl odpovídat realitě (s určitými omezeními), byla získána data pro daný kontext. Například míra cestujících bez platné jízdenky byla odhadnuta dle zdrojů na 8% pro Prahu, pak porovnána s jinými státy pro jistotu a byla ponechána na 8%. Výše pokuty je 1500 Kč dle DPP. Další skutečností je plat revizorů, který činí 63000 Kč (je to včetně bonusů za pokuty, ale bylo počítáno s maximem) — sice v simulaci použit nebyl, ale hodil se pro závěreční analýzu.

Zvolený počet cestujících, kteří denně využívají metro, je odvozen z dat o cestujících v MHD. 338 mil. — počet pasažérů ročně, tedy 926 tis. denně. Nejprve dané číslo bylo samozřejmě zkráceno kvůli omezením počítače a délky simulací, tedy vyděleno 10. Jelikož modelujeme jenom část metra (15/61 stanic, zhruba čtvrtina), můžeme počítat s menším počtem pasažérů, např. také s čtvrtinou. Čtvrtina od 92600 je zhruba 23000. Tak vznikl orientační počet denních cestujících v simulacích, kterého bylo pak dosaženo přes přesnější nastavení parametru passenger-spawn-rate. Jak ukážou výsledky, počty denních cestujících se pohybovaly zpravidla v rozmezí 22000-25000, což odpovídá odhadu. Podobnou logiku má i počet revizorů. Podle nalezených dat obvykle v pracovní dny "v terénu" je kolem 100 revizorů, ale realističtější a vhodnější bylo operovat s menším počtem revizorů, takže je ten počet v simulacích kolem 10, s odchylkou pro konkrétní případy.

Časová osa simulace a dopravní špičky

Co se týká času simulace, jeden běh reprezentující jeden den trvá 2280 ticků, a to bylo odvozeno následovně. Bylo zjištěno, že metro je v provozu zhruba od 5 do 24, tedy 19 hodin, neboli 1140 minut. Bylo také rozhodnuto, že za tick je vhodné mít nejmenší časovou jednotku, kterou chceme reprezentovat, v daném případě je to odhad délky jedné kontroly, cca 30 sekund. Některé kontroly mohou být skoro okamžité, občas to může trvat déle, odhad je tedy ze zkušeností autora.

V rámci simulace jsou také zohledněny dopravní špičky. Intervaly 300-700 ticků považujeme za ranní špičku a 1500-1900 za odpolední/večerní špičku. Je to realizováno přes spuštění generování pasažérů ještě jednou, což dočasně na dobu špičky zvýší počet cestujících v metru. Po skončení špičky na několik ticků zastavíme obnovení pasažérů, aby se počet cestujících vrátil na základní úroveň. Než se to ale stane, musíme také zajistit vyšší počet kontrol, a je to uděláno pomocí proměnné inspection-rate. Vyšší hodnota této proměnné znamená to, že revizor za jeden tick zkontroluje více cestujících, které se nachází kolem něj na dané stanici. To lze pozorovat na grafech: první je počet cestujících, druhý je počet udělených pokut v odpovídající časy.

MHD grafy.png

Průběh simulace

Následující 4 body proběhnou při kliknutí na tlačítko setup:

1. setup-network — nastavení sítě metra, určení souřadnic, sestavení seznamů stanic.

2. setup-parameters — nastavení globálních proměnných.

3. setup-inspectors — nastavení revizorů, vytvoří num-inspectors agentů a rozmístí je podle inspector-assignments.

4. generate-passengers — generování pasažérů: vygeneruje passenger-spawn-rate * počet stanic (120), nastaví defaultní hodnoty atributů, náhodně nastaví boolean valid-ticket? dle fare-evasion-rate a pokud je to černý pasažér, zvýší total-evaders.

Důležité procedury použité dále:

handle-passenger-death — procedura zajišťuje vznik nových pasažérů. Agenti-pasažéři se odstraní, když buď dorazí do cílové stanice nebo budou zachyceni revizorem, jsou pak ze simulace odstraněny. Na jejich místo je pak přidán nový pasažér, aby počet cestujících byl zachován. Daná procedura se nevolá během několika ticků po špičkách, aby se model vyrovnal po nárůstu cestujících během špiček.

do-walk-step — procedura pro pohyb cestujících mezi stanicemi. Každý cestující ve stavu traveling dělá krok směrem ke své cílové destinaci. Když dorazí do stanice, změní svůj current-index. Pokud je ten index stejný jako cílová stanice, volá se handle-passenger-death. Bylo rozhodnuto pro daný přístup, jelikož v původním návrhu vlaky (další agenti) neměly velký význam pro výsledky, vizuálně vypadaly mnohem hůř a zbytečně komplikovali model.

Dále při spuštění simulace se bude postupovat dle procedury go:

1. Kontrola konce simulace (zda již uběhlo 2280 ticků).

2. Pohyb pomocí do-walk-step.

3. Revizor provádí kontroly dle inspection-rate na stanici ze seznamu všech pasažérů, kdo tam je.

4. Pokud byl nalezen černý pasažér, zvyšuje total-fines a volá handle-passenger-death.

5. Pokud se nacházíme ve špičkovém intervalu, zavolá se znovu generate-passengers.

6. Tick.

Omezení

  • Statické umístění revizorů: v modelu není zohledněna situace, když revizor se pohybuje mezi stanicemi a provádí kontroly ve vozech, což je celkem běžné. To by však znamenalo vytvoření vlaků a omezení s tím spojené, jak je uvedeno výše v popisu procedur.
  • Odhady dat: přestože nalezená data pokrývají zkoumanou oblast dostatečně široko, nestačí pro hlubší analýzu. Simulace je prováděna na mnohem menších časových intervalech a se zaměřením na jevy, které nejsou dobře popsány.
  • Chování při kontrolách: sice jsou kontroly funkční a jsou schopni zachytit podstatu, existuje i prostor na detailnější doladění, které by bylo náročnější a delší na implementaci.
  • Fixní celkový počet: simulace nemá perfektně realistickou křivku zátěže metra, pouze znázornění dopravních špiček.

Výsledky

V rámci provedení simulací bylo otestováno 6 různých scénářů, každý s odlišným počtem a/nebo umístěním revizorů. Každý scénář měl 30 opakování pro získání dostatku dat pro měsíc fungování metra, což pak bylo možné dát do souvislosti s náklady podniku na měsíční platy revizorů.

1. 1 revizor na každé stanici (15)

2. 4 revizoři na každé přestupní stanici (12)

3. 2 revizoři na každé přestupní stanici (6)

4. 1 revizor na středu každé linky (3)

5. 1 revizor na každé konečné stanici (6)

6. 2 revizoři na každé lince s odstupem (6)

Závěr

Kód

Reference