Difference between revisions of "Simulace přestupu stanice metra Můstek"
m |
|||
Line 50: | Line 50: | ||
===Pohyb=== | ===Pohyb=== | ||
+ | Pohyb cestujícího jsem rozdělil do několika fází podle cílů cestujícího: | ||
+ | *Vyjdi ze soupravy - TODO vic infa | ||
+ | *Najdi nejbližší východ z linky- TODO vic infa | ||
+ | *Nastav cestu k přestupu - TODO vic infa | ||
+ | *Dojdi k přestupu - TODO vic infa | ||
+ | |||
+ | 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 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ňů v 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== | ==Prostředí - Metro== | ||
===Tvorba mapy metra=== | ===Tvorba mapy metra=== |
Revision as of 13:48, 28 May 2024
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 jasně vyplývá, že nejrušnější hodiny v pracovním dni 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 časování 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 metra [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 hodnotu 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.
'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 a TTL (čas do vypršení) a jiné pomocné proměnné.
Náhodné proměnné
- Rychlost pohybu - random normal 1 0.2
- Cesta k výstupu - podle toho ze kterého vchodu cestující dorazí se mu náhodně přiřadí cesta k přestupu.
- Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y v soupravě
- Počet cestujících kteří přijíždějí v soupravě - random normal A/T R (viz. předchozí část)
Pohyb
Pohyb cestujícího jsem rozdělil do několika fází podle cílů cestujícího:
- Vyjdi ze soupravy - TODO vic infa
- Najdi nejbližší východ z linky- TODO vic infa
- Nastav cestu k přestupu - TODO vic infa
- Dojdi k přestupu - TODO vic infa
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 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ňů v 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.