Simulace přestupu stanice metra Můstek

From Simulace.info
Revision as of 23:14, 28 May 2024 by Bled09 (talk | contribs) (Prostředí - Metro)
Jump to: navigation, search

Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky [TODO: citace]. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražáky může díky své komplexitě působit jako labyrint. Proto mnohdy, když spěcháte na Můstku v nejrušnější hodiny na navazující spoj, je klíčové zvolit si správnou trasu přestupu.

Definice problému

Cílem této simulace je zjistit, která trasa je při přestupu z linky A na linku B a naopak nejlepší v období nejrušnějších hodin. Zprvu může tento problém působit jako problém nalezení nejkratší cesty, v takovém případě bychom ale neuvažovali vytíženost metra, tedy počet lidí, kteří se metrem pohybují.

Metoda

Simulace byla provedena v prostředí NetLogo. Byl vytvořen model stanice metra a cestujících, kteří přestupují z linky A na linku B. Simulace pro zjednodušení nezohledňuje pohyb lidí, kteří do metra vstupují nebo z něj vystupují. Nezohledňuje také nelogické cesty, tedy takové cesty, které nevedou k přestupu z jedné linky na druhou případně jsou neoptimální.

Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.

Model

Data

Nejvytíženější hodiny

Pro získání statistiky o zátěži metra bylo využito statistiky [TODO: citace] z roku 2015. Ze statistiky vyplývá, že nejrušnější hodiny v pracovním dny jsou 7-8 a 17-18. Je potřeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časy jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla pak převzata z jízdních řádů PID [TODO: citace].

Počet cestujících

Dalším údajem, který bylo potřeba získat, je počet lidí, kteří přijíždějí a přestupují z linky A na linku B a naopak. K tomu jsem opět využil statistiky, tentokrát o přestupech [TODO: citace] z roku 2015.

Pro každou linku a čas příjezdu je potřeba získat údaj o počtu cestujících, kteří ze soupravy metra vystoupí. Nabízí se jednoduché řešení: generovat počet cestujících pomocí normálního rozdělení. Tato metoda je vhodná, protože mnoho přírodních a lidských jevů, včetně pohybu cestujících, se přibližně řídí normálním rozdělením. Navíc, díky Centrální limitní větě, i když jednotlivé příjezdy nejsou normálně rozdělené, jejich součet za určité období se normálnímu rozdělení přibližuje.

Ze statistik si tedy zjistíme, že:

  • Linka A mezi 7-8 má: XXXX přestupů průměrně (data: )
  • Linka B mezi 7-8 má: XXXX přestupů průměrně (data: )
  • Linka A mezi 17-18 má: XXXX přestupů průměrně (data: )
  • Linka B mezi 17-18 má: XXXX přestupů průměrně (data: )

Z jízdních řádů plyne:

  • Linka A mezi 7-8 má: YYYY příjezdů metra (data: )
  • Linka B mezi 7-8 má: YYYY příjezdů metra (data: )
  • Linka A mezi 17-18 má: YYYY příjezdů metra (data: )
  • Linka B mezi 17-18 má: YYYY příjezdů metra (data: )

Označme si T jako hodnotu přestupů průměrně pro linku a čas a A jako počet příjezdu metra pro linku a čas.

Průměrně tedy přijede A/T cestujících jednou soupravou. Na základě historických dat, si dopočítáme směrodatnou odchylku počtu přestupů pro každou linku a čas. Označme si tuto hodnotu jako R. S pomocí těchto (A/T a R) jsme schopni vypočítat a náhodnou hodnotu vzniklého normálního rozdělení.

Agenti - Cestující

V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.

'Příjezd' cestujících

Vlaky s cestujícími přijíždějí dle jízdního řádu. Jejich počet je určen normálním rozdělením pomocí příkazu v NetLogo random normal A/T R (viz. předchozí část), a jsou náhodně rozmístěni po soupravě. Při jejich příjezdu je jim náhodně nastavena jejich rychlost pohybu, barva, velikost, ttl a jiné pomocné proměnné.

Parametry cestujících

  • pace - rychlost pohybu určená random normal 1 0.2 (Převzato z ukázkového příkladu na braného v rámci předmětu.)
  • current-step - aktuální fáze pohybu ve které se cestující nachází
  • arriving-in-train - index koleje ze, které cestující startuje
  • transfer-exit - náhodně vybraný výstup v přestupní chodbě
  • transfer-exit-steps - náhodně vybraná cesta k přestupu
  • current-transfer-exit-step - aktuální krok v cestě z předchozího bodu
  • ttl - počet ticku po kterém se neaktivní cestující vymažou
  • path - pro uložení cesty kterou cestující urazil
  • path-distance - pro uložení vzdálenosti, kterou cestující urazil
  • Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.

Pohyb

Simulace pohybu cestujících zahrnuje několik klíčových fází, které umožňují realistické modelování chování cestujících. Každá fáze má své specifické úkoly a postupy, které zajišťují, že se cestující pohybují plynule a přirozeně:

  1. exit-train - Cestující ve vlaku najde nejbližší souřadnice platformy nástupiště a dojde tam. Po dokončení fáze se fáze pohybu změní na go-to-nearest-platform-exit.
  2. go-to-nearest-platform-exit - Na základě aktuální pozice na nástupišti cestující vyhledá nejbližší přestupní chodbu a vydá se k ní. Po dokončení fáze se fáze pohybu změní na enter-transfer-tunels.
  3. enter-transfer-tunels - Po tom co cestující dorazí k přestupní chodbě bude přenesen do chodby a bude mu náhodně vybrán jeden z možných východu a cesta k němu, které se nastaví do transfer-exit a transfer-exit-steps. Cesta je určená pomocí listu souřadnic a aby pohyb cestujících působil méně staticky jsou tyto souřadnice určeny náhodně z intervalu. Po dokončení fáze se fáze pohybu změní na exit-transfer-tunels.
  4. exit-transfer-tunels - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty pokusí se nejkratší cestou dojit k transfer-exit. Pokud dojde k transfer-exit porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdálenosti od soupravy k východu a nastaví ji jako nejlepší pokud je kratší. Následně se vymaže se.

Na následujících obrázcích můžete vidět všechny trasy definované v přestupových chodbách, ze kterých se náhodně vybírá. Vybíral jsem pouze logické cesty.

TODO: obrazky

V jednotlivých bodech abstraktně zmiňuji "dojde tam" a "vydá se k ní", ve skutečnosti mi z celé práce nejvíce dalo zabrat správné nastavení pohybu. Prostor metra, jak je vidět v sekci prostředí, není úplně triviální. Ve zkratce, pohyb funguje tak, že se nejdříve otočí směrem k vybranému cíli, následně se pohyb provede, pokud je to možné. Aby se pohyb provedl, musí se zabránit srážce s ostatními cestujícími a nárazu do překážek.

Pro zabránění srážkám cestujících se vzájemně, cestující se před každým krokem podívá před sebe. Pokud zjistí, že je na daném místě jiný cestující, otočí se náhodně o 0 až 180 stupňů.

Dalším problémem jsou překážky, kterým by se cestující měli vyhnout. Pokud cestující narazí na zeď, zkontroluje své sousedy(okolní patche) a vybere souseda, který není zdí a je nejblíže k cíli. Abychom předešli zasekávání, náhodně otočíme cestujícího o 0 až 45 stupňů ve 20 % případů. Tento systém vyhýbání se však nemusí vždy dokonale dařit. Proto má každý cestující parametr ttl nastavený na 50, ze kterého odečítáme, pokud se cestující nepohne, a nastavujeme ttl na 50, pokud k pohybu došlo. Pokud ttl klesne na 0, označíme cestujícího za ztraceného a odstraníme ho ze simulace.

Prostředí - Metro

Tvorba mapy metra

Vzhledem ke složitosti metra jsem se rozhodl vytvořit jeho mapu pomocí pixel artu a následně ji do NetLoga importovat pomocí import-pcolors. Pixel art mapu s názvem "metro.png" naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako "metro-layout.png" sloužící k popisu mapy pomocí import-drawing. Veškeré kreslení jsem vytvářel pomocí nástroje Piskel a mohu ho vřele doporučit.

Při tvorbě mapy jsem si naivně myslel, že narazím na plánek metra s popisem přestupů, ale i při usilovném hledání jsem na nic takového nenarazil. Našel jsem ale pár dobových fotografií, které můžete dále vidět níže a podle kterých jsem mapu vytvářel. Po jejím vytvoření jsem se rozhodl stanici metra navštívit, abych zjistil, jak přesně metro vypadá a zda mnou vytvořená mapa odpovídá realitě.

TODO: obrázek

Na následujícím obrázku je výsledná mapa metra.

TODO: obrázek

Speciální prvky

Mapa obsahuje i "Speciální prvky", které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5, ty zpomalují rychlost agenta o polovinu, a eskalátory označené barvou pcolor 1.6, ty dávají agentovi konstantní rychlost 1. Ukázky fungování prvků můžete vidět níže.

TODO: gify s fungovanim

Zobrazení nejlepší cesty

Jak již zaznělo v zadání, cílem je zjistit nejkratší cestu od vlaku až k přestupu. Pro tento účel jsem se rozhodl zobrazovat nejlepší cestu přímo do mapy. Jednoduše se zvolí, jakou kolej chcete zkoumat, zadáte "zobrazit nejlepší přestup" a zobrazí se nejlepší nalezený přestup vyznačený červenou barvou, viz ukázka níže. Jak jsem již uváděl, nejlepší přestup se získá v poslední fázi porovnáním dosavad získaného nejlepšího přestupu s přestupem, který cestující provedl.

Nastavení metra

V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18. Dalším ovládacím prvkem je zrychlení příjezdu, které umožní změnit velikost intervalu mezi příjezdy vlaků. Defaultně je tato hodnota nastavena na 50. Ukázky ovládacích prvků můžete vidět níže.

Výsledky

Závěr

Reference

Kód