<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.simulace.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bled09</id>
	<title>Simulace.info - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.simulace.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bled09"/>
	<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php/Special:Contributions/Bled09"/>
	<updated>2026-07-28T11:44:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25358</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25358"/>
		<updated>2024-05-29T16:26:08Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Název simulace:''' Simulace přestupu stanice metra Můstek&lt;br /&gt;
&lt;br /&gt;
'''Autor:''' Dmitry Belov, beld09&lt;br /&gt;
&lt;br /&gt;
'''Modelovací nástroj:''' [https://ccl.northwestern.edu/netlogo/ NetLogo]&lt;br /&gt;
&lt;br /&gt;
Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt;. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID &amp;lt;ref name=&amp;quot;Jízdní řády metra&amp;quot;&amp;gt;Pražská integrovaná doprava. (platnost od 19.2. 2024). Jízdní řády metra. Dostupné z: https://pid.cz/jizdni-rady-podle-linek/metro/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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 &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z &amp;lt;ref name=&amp;quot;obrázky metra můstek&amp;quot;&amp;gt;&lt;br /&gt;
TV STAV. (bez datace). Důležitá stanice metra Můstek bude konečně bezbariérová. Dostupné z: https://tvstav.cz/clanek/2606-dulezita-stanice-metra-mustek-bude-konecne-bezbarierova&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;dobové obrázky metra cernobile&amp;quot;&amp;gt;&lt;br /&gt;
ARCHIWEB. (bez datace). Perspektiva metra Můstek. Dostupné z: https://www.archiweb.cz/en/n/home/perspektiva-metra-mustek&amp;lt;/ref&amp;gt;. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
&lt;br /&gt;
[[Media:sim-metra-mustek.zip]]&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=LS_2023/2024&amp;diff=25357</id>
		<title>LS 2023/2024</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=LS_2023/2024&amp;diff=25357"/>
		<updated>2024-05-29T16:22:57Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:LS 2023/2024}}&lt;br /&gt;
&lt;br /&gt;
Semestrální práce (simulace) z letního semestru 2023/202. Sem přidejte odkaz na stránku s Vaší prací.&lt;br /&gt;
Nejprve je třeba nechat schválit [[Assignment SS 2023/2024/cs|zadání práce]].&lt;br /&gt;
&lt;br /&gt;
=Vypracovaná témata LS 2023/2024=&lt;br /&gt;
&lt;br /&gt;
* [https://www.simulace.info/index.php/SnakeEvolution Simulácia evolúcie neurónovej siete, ktorej cieľom je naučiť sa hrať klasickú hru Snake (Python) ] - Michal Štefaňák&lt;br /&gt;
&lt;br /&gt;
* [https://www.simulace.info/index.php/Simulace_přestupu_stanice_metra_Můstek Simulace přestupu stanice metra Můstek (netlogo)] - Dmitry Belov&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Sim-metra-mustek.zip&amp;diff=25356</id>
		<title>File:Sim-metra-mustek.zip</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Sim-metra-mustek.zip&amp;diff=25356"/>
		<updated>2024-05-29T16:21:18Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25355</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25355"/>
		<updated>2024-05-29T16:11:33Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt;. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID &amp;lt;ref name=&amp;quot;Jízdní řády metra&amp;quot;&amp;gt;Pražská integrovaná doprava. (platnost od 19.2. 2024). Jízdní řády metra. Dostupné z: https://pid.cz/jizdni-rady-podle-linek/metro/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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 &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z &amp;lt;ref name=&amp;quot;obrázky metra můstek&amp;quot;&amp;gt;&lt;br /&gt;
TV STAV. (bez datace). Důležitá stanice metra Můstek bude konečně bezbariérová. Dostupné z: https://tvstav.cz/clanek/2606-dulezita-stanice-metra-mustek-bude-konecne-bezbarierova&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;dobové obrázky metra cernobile&amp;quot;&amp;gt;&lt;br /&gt;
ARCHIWEB. (bez datace). Perspektiva metra Můstek. Dostupné z: https://www.archiweb.cz/en/n/home/perspektiva-metra-mustek&amp;lt;/ref&amp;gt;. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
&lt;br /&gt;
[[Media:sim-metra-mustek.zip]]&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25354</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25354"/>
		<updated>2024-05-29T16:07:47Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt;. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID &amp;lt;ref name=&amp;quot;Jízdní řády metra&amp;quot;&amp;gt;Pražská integrovaná doprava. (platnost od 19.2. 2024). Jízdní řády metra. Dostupné z: https://pid.cz/jizdni-rady-podle-linek/metro/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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 &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z &amp;lt;ref name=&amp;quot;obrázky metra můstek&amp;quot;&amp;gt;&lt;br /&gt;
TV STAV. (bez datace). Důležitá stanice metra Můstek bude konečně bezbariérová. Dostupné z: https://tvstav.cz/clanek/2606-dulezita-stanice-metra-mustek-bude-konecne-bezbarierova&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;dobové obrázky metra cernobile&amp;quot;&amp;gt;&lt;br /&gt;
ARCHIWEB. (bez datace). Perspektiva metra Můstek. Dostupné z: https://www.archiweb.cz/en/n/home/perspektiva-metra-mustek&amp;lt;/ref&amp;gt;. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25353</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25353"/>
		<updated>2024-05-29T16:04:39Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt;. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID &amp;lt;ref name=&amp;quot;Jízdní řády metra&amp;quot;&amp;gt;Pražská integrovaná doprava. (platnost od 19.2. 2024). Jízdní řády metra. Dostupné z: https://pid.cz/jizdni-rady-podle-linek/metro/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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 &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z &amp;lt;ref name=&amp;quot;obrázky metra můstek&amp;quot;&amp;gt;&lt;br /&gt;
TV STAV. (bez datace). Důležitá stanice metra Můstek bude konečně bezbariérová. Dostupné z: https://tvstav.cz/clanek/2606-dulezita-stanice-metra-mustek-bude-konecne-bezbarierova&amp;lt;/ref&amp;gt; &amp;lt;ref name=&amp;quot;dobové obrázky metra cernobile&amp;quot;&amp;gt;&lt;br /&gt;
ARCHIWEB. (bez datace). Perspektiva metra Můstek. Dostupné z: https://www.archiweb.cz/en/n/home/perspektiva-metra-mustek&amp;lt;/ref&amp;gt;. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25352</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25352"/>
		<updated>2024-05-29T15:55:01Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt;. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID &amp;lt;ref name=&amp;quot;Jízdní řády metra&amp;quot;&amp;gt;Pražská integrovaná doprava. (platnost od 19.2. 2024). Jízdní řády metra. Dostupné z: https://pid.cz/jizdni-rady-podle-linek/metro/&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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 &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf&amp;lt;/ref&amp;gt; z roku 2015.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z [TODO: citace]. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25351</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25351"/>
		<updated>2024-05-29T15:52:06Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mezi nejrušnější stanice pražského metra patří stanice Můstek, dle statistiky &amp;lt;ref name=&amp;quot;2015_METRO_sbornik&amp;quot;&amp;gt;[Pražská integrovaná doprava. (2015). Průzkum využití pražského metra [PDF]. Dostupné z: https://data.pid.cz/pruzkumy/2015_METRO_sbornik.pdf]&amp;lt;/ref&amp;gt;. Tato stanice je navíc přestupní z linky A na linku B a i pro mnohé Pražany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky [TODO: citace] z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID [TODO: citace].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z [TODO: citace]. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25350</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25350"/>
		<updated>2024-05-29T15:18:59Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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žany může díky své komplexitě působit jako labyrint. Proto, když spěcháte na Můstku v nejrušnějších hodinách na navazující spoj, je klíčové zvolit si správnou trasu přestupu.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
Pro získání statistiky o zátěži metra byly využity statistiky [TODO: citace] z roku 2015. Ze statistik vyplývá, že nejrušnější hodiny v pracovních dnech jsou 7–8 a 17–18. Je třeba podotknout, že časy v okolí těchto hodin jsou z pohledu vytíženosti dosti podobné. Tyto dva časové úseky jsem zvolil, protože se v nich nachází špička vytížení. Data o časech příjezdu metra byla převzata z jízdních řádů PID [TODO: citace].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k datům, která mám k dispozici, nebudu bohužel moci jednoduše dopočítat průměr a směrodatnou odchylku pro všechny případy, jelikož chybí některé údaje o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů B-A v časovém úseku 7–8: μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupů A-B v časovém úseku 17–18: μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, chybí mi průměr a směrodatná odchylka pro:&lt;br /&gt;
* počet přestupů B-A v časovém úseku 17-18 &lt;br /&gt;
* počet přestupů A-B v časovém úseku 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi přestupy A-B a B-A v časech 7–8 a 17–18. Ve statistice si můžeme povšimnout následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* přestupů B-A v časovém úseku 17-18 je přibližně 4149&lt;br /&gt;
* přestupů A-B v časovém úseku 17-18 je přibližně 3609  &lt;br /&gt;
* přestupů B-A v časovém úseku 7-8 je přibližně 3395 &lt;br /&gt;
* přestupů A-B v časovém úseku 7-8 je přibližně 4633&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické, protože se lidé, kteří přestupovali ráno, vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17–18 použít pro normální rozdělení B-A v čase 7–8 a údaje pro A-B v čase 7–8 použít pro normální rozdělení B-A v čase 17–18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu, kde se 100 ticků v simulaci bere jako jedna minuta v reáném světě (lze nastavit pomocí frekvence-prijezdu). Jejich počet je určen normálním rozdělením (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 další pomocné proměnné.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu, ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje, ze které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticků, po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty, kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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-tunnels.&lt;br /&gt;
#'''enter-transfer-tunnels''' - 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ýchodů 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-tunnels.&lt;br /&gt;
#'''exit-transfer-tunnels''' - Cestující postupně jde zadanou cestou z transfer-exit-steps. Pokud cestující prošel všemi body cesty, pokusí se nejkratší cestou dojít k transfer-exit. Pokud dojde k transfer-exit, porovná vzdálenost, kterou urazil v parametru path-distance s nejlepší nalezenou vzdáleností od soupravy k východu a nastaví ji jako nejlepší, pokud je kratší. Následně se vymaže.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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ž 180 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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem, a je potřeba k jeho fungování, stejně tak jako &amp;quot;metro-layout.png&amp;quot;, který slouží k popisu mapy pomocí import-drawing. Veškeré kreslení jsem prováděl pomocí nástroje Piskel a mohu ho vřele doporučit.&lt;br /&gt;
&lt;br /&gt;
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, fotografie jsem čerpal z [TODO: citace]. Po jejím vytvoření jsem se rozhodl navštívit stanici metra, abych zjistil, jak přesně metro vypadá, a zda mnou vytvořená mapa odpovídá realitě. Mapa by tak měla odpovídat realitě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, které mají vliv na agenty. Jedná se o schody, které jsem označil barvou pcolor 2.5. Ty zpomalují rychlost agenta o polovinu. Dále jsou zde eskalátory označené barvou pcolor 1.6, které dávají agentovi konstantní rychlost 1.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup pro&amp;quot;, a zobrazí se nejlepší nalezený přestup vyznačený oranžovou 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
V simulaci se dá nastavit, jestli se má použít jízdní řád 7-8 nebo 17-18 pomocí cas-simulace. Dalším ovládacím prvkem je frekvence-prijezdu, která umožní změnit interval mezi příjezdy vlaků (mění se počet ticků, které se berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumání zátěže metra.&lt;br /&gt;
#Krom toho vidím problém i v použitém datovém setu, který není úplný.&lt;br /&gt;
#Pohyb cestujících taky není optimální, a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty do vlaku k přestupu z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticků) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním voze soupravy, jít přestupem, který je nejblíže, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vozech, následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel, a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný, jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot;, a také data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25349</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25349"/>
		<updated>2024-05-29T13:49:26Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Ukázka fungujícího modelu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25348</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25348"/>
		<updated>2024-05-29T13:49:17Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Zobrazení nejlepší cesty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|700px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25347</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25347"/>
		<updated>2024-05-29T13:48:18Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Tvorba mapy metra */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:mustek-cernobile.jpg|none|500px]] [[File:mustek-nakres.jpeg|none|500px]] [[File:mustek-3d.jpeg|none|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Mustek-nakres.jpeg&amp;diff=25346</id>
		<title>File:Mustek-nakres.jpeg</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Mustek-nakres.jpeg&amp;diff=25346"/>
		<updated>2024-05-29T13:47:25Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Mustek-3d.jpeg&amp;diff=25345</id>
		<title>File:Mustek-3d.jpeg</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Mustek-3d.jpeg&amp;diff=25345"/>
		<updated>2024-05-29T13:47:06Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Mustek-cernobile.jpg&amp;diff=25344</id>
		<title>File:Mustek-cernobile.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Mustek-cernobile.jpg&amp;diff=25344"/>
		<updated>2024-05-29T13:46:34Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25343</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25343"/>
		<updated>2024-05-29T13:46:11Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Pohyb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|300px]] [[File:metro-tr-1.png|none|300px]] [[File:metro-tr-2.png|none|300px]] [[File:metro-tr-3.png|none|300px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Metro-tr-3.png&amp;diff=25342</id>
		<title>File:Metro-tr-3.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Metro-tr-3.png&amp;diff=25342"/>
		<updated>2024-05-29T13:45:32Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Metro-tr-2.png&amp;diff=25341</id>
		<title>File:Metro-tr-2.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Metro-tr-2.png&amp;diff=25341"/>
		<updated>2024-05-29T13:45:23Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Metro-tr-1.png&amp;diff=25340</id>
		<title>File:Metro-tr-1.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Metro-tr-1.png&amp;diff=25340"/>
		<updated>2024-05-29T13:45:15Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Metro-tr-0.png&amp;diff=25339</id>
		<title>File:Metro-tr-0.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Metro-tr-0.png&amp;diff=25339"/>
		<updated>2024-05-29T13:45:06Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25338</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25338"/>
		<updated>2024-05-29T13:44:50Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Pohyb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:metro-tr-0.png|none|400px]] [[File:metro-tr-1.png|none|400px]] [[File:metro-tr-2.png|none|400px]] [[File:metro-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25337</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25337"/>
		<updated>2024-05-29T13:43:38Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Tvorba mapy metra */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Metro-map.png&amp;diff=25336</id>
		<title>File:Metro-map.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Metro-map.png&amp;diff=25336"/>
		<updated>2024-05-29T13:42:59Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Best-path.gif&amp;diff=25335</id>
		<title>File:Best-path.gif</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Best-path.gif&amp;diff=25335"/>
		<updated>2024-05-29T13:42:20Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25334</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25334"/>
		<updated>2024-05-29T13:42:06Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Zobrazení nejlepší cesty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25333</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25333"/>
		<updated>2024-05-29T13:41:42Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Ukázka fungujícího modelu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|center|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25332</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25332"/>
		<updated>2024-05-29T13:41:18Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Ukázka fungujícího modelu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model-metro.gif|none|500px]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Model-metro.gif&amp;diff=25331</id>
		<title>File:Model-metro.gif</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Model-metro.gif&amp;diff=25331"/>
		<updated>2024-05-29T13:40:44Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:18-best-tr-3.png&amp;diff=25330</id>
		<title>File:18-best-tr-3.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:18-best-tr-3.png&amp;diff=25330"/>
		<updated>2024-05-29T13:39:33Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:18-best-tr-2.png&amp;diff=25329</id>
		<title>File:18-best-tr-2.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:18-best-tr-2.png&amp;diff=25329"/>
		<updated>2024-05-29T13:39:20Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:18-best-tr-1.png&amp;diff=25328</id>
		<title>File:18-best-tr-1.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:18-best-tr-1.png&amp;diff=25328"/>
		<updated>2024-05-29T13:39:07Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:18-best-tr-0.png&amp;diff=25327</id>
		<title>File:18-best-tr-0.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:18-best-tr-0.png&amp;diff=25327"/>
		<updated>2024-05-29T13:38:53Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25326</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25326"/>
		<updated>2024-05-29T13:38:17Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Výsledky */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:18-best-tr-0.png|none|400px]] [[File:18-best-tr-1.png|none|400px]] [[File:18-best-tr-2.png|none|400px]] [[File:18-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25325</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25325"/>
		<updated>2024-05-29T13:36:53Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: center; gap: 50px; flex-wrap: wrap&amp;quot;&amp;gt;&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] &lt;br /&gt;
[[File:8-best-tr-2.png|none|400px]]&lt;br /&gt;
[[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:8-best-tr-3.png&amp;diff=25324</id>
		<title>File:8-best-tr-3.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:8-best-tr-3.png&amp;diff=25324"/>
		<updated>2024-05-29T12:57:29Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:8-best-tr-2.png&amp;diff=25323</id>
		<title>File:8-best-tr-2.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:8-best-tr-2.png&amp;diff=25323"/>
		<updated>2024-05-29T12:57:07Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25322</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25322"/>
		<updated>2024-05-29T12:56:34Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px]] [[File:8-best-tr-2.png|none|400px]] [[File:8-best-tr-3.png|none|400px]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:8-best-tr-1.png&amp;diff=25321</id>
		<title>File:8-best-tr-1.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:8-best-tr-1.png&amp;diff=25321"/>
		<updated>2024-05-29T12:55:49Z</updated>

		<summary type="html">&lt;p&gt;Bled09: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25320</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25320"/>
		<updated>2024-05-29T12:54:59Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px|Popisek]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png|none|400px|Popisek]] [[File:8-best-tr-2.png|none|400px|Popisek]] [[File:8-best-tr-3.png|none|400px|Popisek]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25319</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25319"/>
		<updated>2024-05-29T12:54:10Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|none|400px|Popisek]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25318</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25318"/>
		<updated>2024-05-29T12:52:38Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|left|upright=1|Popisek]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25317</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25317"/>
		<updated>2024-05-29T12:51:06Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|size=400px|Popis]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25316</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25316"/>
		<updated>2024-05-29T12:50:23Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|size=400|Popis]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25315</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25315"/>
		<updated>2024-05-29T12:50:15Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|left|size=400|Popis]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25314</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25314"/>
		<updated>2024-05-29T12:50:03Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|left|Popis]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25313</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25313"/>
		<updated>2024-05-29T12:49:48Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|frame|Popis]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25312</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25312"/>
		<updated>2024-05-29T12:49:03Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|center]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25311</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25311"/>
		<updated>2024-05-29T12:48:52Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|size=400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25310</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25310"/>
		<updated>2024-05-29T12:48:36Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|size=400px|Popisek]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25309</id>
		<title>Simulace přestupu stanice metra Můstek</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Simulace_p%C5%99estupu_stanice_metra_M%C5%AFstek&amp;diff=25309"/>
		<updated>2024-05-29T12:48:07Z</updated>

		<summary type="html">&lt;p&gt;Bled09: /* Úsek 7-8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
=Metoda=&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Simulace byla provedena ve dvou nejrušnějších hodinách pracovního dne.&lt;br /&gt;
&lt;br /&gt;
=Model=&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
===Nejvytíženější hodiny===&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
===Počet cestujících===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Vzhledem, k datům které mam dostupné nebudu bohužel moc jednoduše dopočítat průměr a směrodatnou odchylku jelikož o přestupech v daných časech. Ze statistiky jsem schopen dopočítat pouze:&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy B-A cestujících z přijíždějícího metra v čase 7-8 - μ = 118, σ = 12&lt;br /&gt;
* Průměr a směrodatnou odchylku pro počet přestupy A-B cestujících z přijíždějícího metra v čase 17-18 - μ = 128, σ = 6&lt;br /&gt;
&lt;br /&gt;
Jak je vidět chybí mi průměr a směrodatné odchylky:&lt;br /&gt;
* B-A v čase 17-18 &lt;br /&gt;
* A-B v čase 7-8&lt;br /&gt;
&lt;br /&gt;
Pro jejich určení využijeme vztahu mezi A-B a B-A přestupech v časech 7-8 a 17-18. Ve statistice si můžeme povšimnout, následujícího vztahu:&lt;br /&gt;
&lt;br /&gt;
* B-A v čase 17-18 je přibližně 4149 přestupů&lt;br /&gt;
* A-B v čase 17-18 je přibližně 3609 přestupů  &lt;br /&gt;
* B-A v čase 7-8 je přibližně 3395 přestupů &lt;br /&gt;
* A-B v čase 7-8 je přibližně 4633 přestupů&lt;br /&gt;
&lt;br /&gt;
Je to zcela logické protože se lidé co přestupovali ráno vracejí zpět domů. Můžeme tedy údaje pro A-B v čase 17-18 použít pro normální rozdělení B-A v čase 7-8 a údaje pro A-B v čase 7-8 použít pro normální rozdělení B-A v čase 17-18.&lt;br /&gt;
&lt;br /&gt;
== Agenti - Cestující ==&lt;br /&gt;
V simulaci mají cestující za cíl dojít k náhodně zvolenému přestupu nebo také východu.&lt;br /&gt;
&lt;br /&gt;
==='Příjezd' cestujících===&lt;br /&gt;
Vlaky s cestujícími přijíždějí dle jízdního řádu kde se 100 ticku v simulaci bere jako jedna minuta. Jejich počet je určen normálním rozdělením 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é.&lt;br /&gt;
&lt;br /&gt;
===Parametry cestujících===&lt;br /&gt;
*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.)&lt;br /&gt;
*current-step - aktuální fáze pohybu ve které se cestující nachází&lt;br /&gt;
*arriving-in-train - index koleje ze, které cestující startuje&lt;br /&gt;
*transfer-exit - náhodně vybraný výstup v přestupní chodbě&lt;br /&gt;
*transfer-exit-steps - náhodně vybraná cesta k přestupu&lt;br /&gt;
*current-transfer-exit-step - aktuální krok v cestě z předchozího bodu&lt;br /&gt;
*ttl - počet ticku po kterém se neaktivní cestující vymažou&lt;br /&gt;
*path - pro uložení cesty kterou cestující urazil&lt;br /&gt;
*path-distance - pro uložení vzdálenosti, kterou cestující urazil&lt;br /&gt;
*Umístění cestujících v soupravě - náhodně se vybere souřadnice x a y z vymezeného intervalu soupravy.&lt;br /&gt;
&lt;br /&gt;
===Pohyb===&lt;br /&gt;
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ě:&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
#'''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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-tr-0.png]] [[File:metro-tr-1.png]] [[File:metro-tr-2.png]] [[File:metro-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
V jednotlivých bodech abstraktně zmiňuji &amp;quot;dojde tam&amp;quot; a &amp;quot;vydá se k ní&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
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ňů.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
==Prostředí - Metro==&lt;br /&gt;
===Tvorba mapy metra===&lt;br /&gt;
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 &amp;quot;metro.png&amp;quot; naleznete v příloze společně s kódem a je potřeba k jeho fungování stejně tak jako &amp;quot;metro-layout.png&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
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ě.&lt;br /&gt;
&lt;br /&gt;
[[File:mustek-cernobile.jpg]] [[File:mustek-nakres.jpeg]] [[File:mustek-3d.jpeg]]&lt;br /&gt;
&lt;br /&gt;
Na následujícím obrázku je výsledná mapa metra.&lt;br /&gt;
&lt;br /&gt;
[[File:metro-map.png]]&lt;br /&gt;
&lt;br /&gt;
===Speciální prvky===&lt;br /&gt;
Mapa obsahuje i &amp;quot;Speciální prvky&amp;quot;, 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.&lt;br /&gt;
&lt;br /&gt;
===Zobrazení nejlepší cesty===&lt;br /&gt;
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 &amp;quot;zobrazit nejlepší přestup&amp;quot; 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.&lt;br /&gt;
&lt;br /&gt;
[[File:best-path.gif]]&lt;br /&gt;
&lt;br /&gt;
===Nastavení metra===&lt;br /&gt;
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 frekvence přijezdu, která umožní změnit intervalu mezi příjezdy vlaků (mění se počet ticků které be berou jako jedna minuta). Defaultně je tato hodnota nastavena na 100.&lt;br /&gt;
&lt;br /&gt;
==Ukázka fungujícího modelu==&lt;br /&gt;
&lt;br /&gt;
[[File:model.gif]]&lt;br /&gt;
&lt;br /&gt;
==Problémy modelu==&lt;br /&gt;
#Asi největší problém plyne už ze samotného zadání. Zkoumám tady nejkratší cestu na tu, ale agenti nemají moc vliv. Místo toho jsem se měl spíše věnovat zkoumáním zátěže metra. &lt;br /&gt;
#Krom toho vidim problém i v použitém data setu který není úplný.&lt;br /&gt;
#Pohyb cestujících není optimální a celková neúplnost modelu výsledky zkresluje.&lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Výsledkem simulace je nalezení nejkratší cesty pro vlaky z obou směrů obou linek. Simulaci jsem prováděl 1 hodinu odsimulovaného času (6000 ticku) pro každý časový úsek. Jak je vidět z linky B, je lepší být v posledním nebo prvním vagonu soupravy, jít přestupem, který je nejblíž, a následně zabočit doprava při první možnosti. U linky A je zase nejlepší být v prostředních vagonech a následně přestoupit skrze eskalátor nejvíc vlevo a vydat se směrem doleva. Na výsledky přitom neměl časový úsek žádný vliv. Na následujících obrázcích můžete vidět nejlepší nalezené přestupy.&lt;br /&gt;
&lt;br /&gt;
==Úsek 7-8==&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-0.png|center|upright=1|Popisek]]&lt;br /&gt;
&lt;br /&gt;
[[File:8-best-tr-1.png]] [[File:8-best-tr-2.png]] [[File:8-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
==Úsek 17-18==&lt;br /&gt;
&lt;br /&gt;
[[File:18-best-tr-0.png]] [[File:18-best-tr-1.png]] [[File:18-best-tr-2.png]] [[File:18-best-tr-3.png]]&lt;br /&gt;
&lt;br /&gt;
Je nutné podotknout, že tyto výsledky jsou pouze orientační, vzhledem k nepřesnostem ve vytvořené mapě (není 1:1). Vliv agentů na nalezení nejkratší trasy je minimální. Simulace by v budoucnu mohla být vylepšena o počet srážek s agenty, což by se zohlednilo při hledání nejlepší trasy (delší trasy by tak mohly být lepší než kratší).&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Úspěšně se mi podařilo nalézt nejkratší trasy pomocí simulace. Výsledné trasy jsem na vlastní kůži vyzkoušel a na první pohled se zdají být skutečně nejkratší (měřil jsem krokoměrem). I přes tyto úspěchy bych rád podotknul, že zvolený cíl simulace, který se mi na začátku zdál vhodný pro agentní simulaci, se v průběhu ukázal jako celkem nevhodný jelikož agenti neměli vliv na nalezenou cestu. Pro simulaci na dané téma by se spíše hodil cíl jako &amp;quot;simulovat zatížení metra v dopravní špičce&amp;quot; a taky data, která se na první pohled zdála jako zdánlivě perfektní, neobsahovala dostatek informací.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;/div&gt;</summary>
		<author><name>Bled09</name></author>
		
	</entry>
</feed>