Difference between revisions of "Simulace přestupu stanice metra Můstek"

From Simulace.info
Jump to: navigation, search
(Počet cestujících)
m (Agenti - Cestující)
Line 38: Line 38:
  
 
== Agenti - Cestující ==
 
== Agenti - Cestující ==
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.
+
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===
 
==='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é.
+
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é.
  
===Náhodné proměnné===
+
===Parametry cestujících===
*Rychlost pohybu - ''random normal 1 0.2''
+
TODO:
*Cesta k výstupu - podle toho ze kterého vchodu cestující dorazí se mu náhodně přiřadí cesta k přestupu.
+
*Rychlost pohybu - ''random normal 1 0.2'' (Převzato z ukázkového příkladu na braného v rámci předmětu.)
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y v soupravě
+
*Cesta k výstupu - podle toho pomocí kterého vstupu cestující do přestupného tunelu vstupuje se mu náhodně přiřadí cesta k přestupu. Více v sekci pohyb.
*Počet cestujících kteří přijíždějí v soupravě - ''random normal A/T R'' (viz. předchozí část)
+
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.
  
 
===Pohyb===
 
===Pohyb===
Line 53: Line 53:
 
#'''Vyjdi ze soupravy''' - Cestující najde nejbližší souřadnice platformy nástupiště a dojde tam.
 
#'''Vyjdi ze soupravy''' - Cestující najde nejbližší souřadnice platformy nástupiště a dojde tam.
 
#'''Najdi nejbližší přestupní chodbu''' -  Na základě aktuální pozice na nástupišti cestující vyhledá nejbližší přestupní chodbu a vydá se k ní.
 
#'''Najdi nejbližší přestupní chodbu''' -  Na základě aktuální pozice na nástupišti cestující vyhledá nejbližší přestupní chodbu a vydá se k ní.
#'''Nastav cestu k přestupu''' - Po tom co cestující dorazí k přestupní chodbě bude přenesen do chodby a vybere si jeden z možných východu a cestu k němu. 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.
+
#'''Nastav cestu k přestupu''' - 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 cestu k němu. 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.
#'''Dojdi k přestupu''' - Cestující postupně jde zadanou cestou. Pokud cestující prošel všemi body cesty pokusí se nejkratší cestou dojit k východu. Pokud dojde k východu porovná vzdálenost, kterou urazil s nejlepší nalezenou vzdálenosti od soupravy k východu a vymaže se.
+
#'''Dojdi k přestupu''' - Cestující postupně jde zadanou cestou z předchozího bodu. Pokud cestující prošel všemi body cesty pokusí se nejkratší cestou dojit k východu. Pokud dojde k východu porovná vzdálenost, kterou urazil 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ňů.
 
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ů.
+
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ňů 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.
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.
 
 
 
TODO: obrazky
 
  
 
==Prostředí - Metro==
 
==Prostředí - Metro==

Revision as of 18:56, 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 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

TODO:

  • Rychlost pohybu - random normal 1 0.2 (Převzato z ukázkového příkladu na braného v rámci předmětu.)
  • Cesta k výstupu - podle toho pomocí kterého vstupu cestující do přestupného tunelu vstupuje se mu náhodně přiřadí cesta k přestupu. Více v sekci pohyb.
  • 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. Vyjdi ze soupravy - Cestující najde nejbližší souřadnice platformy nástupiště a dojde tam.
  2. Najdi nejbližší přestupní chodbu - Na základě aktuální pozice na nástupišti cestující vyhledá nejbližší přestupní chodbu a vydá se k ní.
  3. Nastav cestu k přestupu - 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 cestu k němu. 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.
  4. Dojdi k přestupu - Cestující postupně jde zadanou cestou z předchozího bodu. Pokud cestující prošel všemi body cesty pokusí se nejkratší cestou dojit k východu. Pokud dojde k východu porovná vzdálenost, kterou urazil 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 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

Speciální prvky

Zobrazení nejlepší cesty

Nastavení metra

Výsledky

Závěr

Reference

Kód