Simulace Sjezdovky (NetLogo)
Zadání
Název simulace: Simulace sjezdovky
Autor: Michal Pokorný
Typ modelu: Multiagentní
Modelovací nástroj: NetLogo
Popis Modelu: Simulace pohybu lyžařů/snowboardistů na svahu. Účastníci simulace jsou nejdříve vyvezeni vlekem/ky na vrcholek svahu a následně v závislosti na svojí strategii sjedou svah dolů. Simulace by řešila průchodnost tratě a počet nehod v závislosti na počtu účastníků, tvaru trati a porovnání jednotlivých strategií účastníků (jejich rychlosti lyžování, četnosti zátačení a rychlosti mimo sjezdovku) s pravděpodobností jejich srážky s jiným účastníkem.
Metoda
Model je vytvořen v softwaru NetLogo, který je určen především pro modelování multiagentních systémů. Lze v něm pomocí různých způsobů inputů měnit vlastnosti modelu v průběhu simulace. Stejně tak lze pomocí monitorovacích objektů sledovat klíčové hodnoty probíhající simulace a sledovat jejich průběh v čase pomocí grafů. Model sjezdovky vychází ze skutečníé sjezdovky nacházející se ve ski areálu Pec pod Sněžkou - Černá Hora, Jarov, 1b. Tato sjezdovka je obsluhována jedním vlekem.
Model
Vlastnosti Modelu
Globální Vlastnosti Modelu
Entry_x: X souřadnice vstupu, Y souřadnice je 0 (úpatí svahu)
Exit_x: X souřadnice vstupu, Y souřadnice je 0 (úpatí svahu)
Tow_x: X souřadnice vleku
Nastavitelné Vlastnosti Modelu
People_max: Maximální počet lidí v areálu
Speed_tow: Rychlost vleku
Width_env: Šířka hranice sjezdovky, nastavitelná pouze před vygenerováním modelu
Ski_max_global: Maximální počet sjezdů
Monitorované vlastnosti modelu
People_ski_count: Počet úspěšných sjezdů lyžaři (pro každou skupinu)
People_total: Celkový počet lidí, kteří vstoupili do areálu (pro každou skupinu)
People_injured_nonski: Počet lidí, kteří se zasekli (zranili) při jiné činnosti než je lyžování (pro každou skupinu)
People_injured_ski: Počet lidí, kteří se srazili s jinými lidmi (pro každou skupinu)
People_injured_ski_env: Počet lidí, kteří se srazili s hranicemi sjezdovky (Borders) (pro každou skupinu)
Agenti
People: Lidé přicházející na sjezdovku a využívající jejích služeb
Borders: Hranice sjezdovky, omezující pohyb lyžařů. Jejich jedinou vlastností jsou souřadnice, kde se nácházejí.
Životní Cyklus People
Appear: Agenti se náhodně vytvářejí na startovní pozici. Náhodně se jim přiřadí jedna ze 3 skupin a podle této skupiny se jim přiřadí vlastnosti. Jejich další akci je tow-want
Tow-want: Agent se snaží dostat k vleku. Další akcí je tow
Tow: Agent je vynesen na vrcholek vleku. Na vrcholku vleku má šanci vlek opustit předčasně. Další akci je ski-want
Ski-want: Agent si náhodně vybere místo na vrcholku a snaží se k němu dostat. Další akcí je ski
Ski: Agent lyžuje směrem dolů ze svahu. Agent lyžuje směrem dolů pod úhlem 45 stupňů a náhodně mění směr v závislosti na svých vlastnostech. Agent se snaží vyhýbat ostatním agentům (People a Borders). V případě, že se dva agenti nacházejí na stejném místě, srazí se, zvýší statistiky o srážkách a zmizí. Pokud se agent dostane na konec svahu, rozhodne se podle počtu svých sjezdů jestli jeho další akce bude tow-want nebo leave
Leave: Agent se snaží dostat k východu.
Nastavitelné Vlastnosti People
Speed_ski: Rychlost při lyžování (pro každou skupinu)
Turn_ski: Jak často se rozhoduje o změně směru (vyšší číslo = méně často) (pro každou skupinu)
Speed_normal: Rychlost v nelyžařských prostorech (pro každou skupinu)
Ski_max: Maximální počet sjezdů před opuštěním areálu
Pomocné Vlastnosti People
Action: Aktuální akce životního cyklu
Group: Skupina do které daný člověk patří, vlastnosti členů skupiny lze nastavovat globálně. Každému člověku je přiřazena skupina náhodně při jeho vstupu do areálu
Stuck_check_x, Stuck_check_y, Confused: Vlastnosti pro kontrolování zaseknutí se v nelyžařských prostorech
Crashed, Crashed_environment: Vlastnosti pro kontrolování srážky s jinými agenty
Obrázky
Vysvětlivky
Bílá: Sjezdovka
Světle modrá: Pohyb mezi sjezdovkou a Vlekem
Tmavě modrá: Vlek
Modrá: Konec vleku
Zelená: Hranice sjezdovky (Stromy)
Žlutá: Vstup do areálu
Červená: Východ z areálu
Výsledky
Výsledný model je velkým zjednodušením reality, agenti nemohou v průběhu sjezdu měnit svou rychlost a mohou lyžovat pouze jedním ze 3 směrů a pouze v diskrétních intervalech. Z těchto důvodů docházi k velmi četným srážkám i přez svoji snahu vyhýbat překážkám a jiným agentům (Před každou změnou směru se agent podívá na obě strany a vybere si tu kde nevidí žádnou překážku, případně jede přímo dolů). Hlavním přínosem modelu je tedy především porovnání jednotlivých nastavení agentů a modelu mezi sebou a nikoli absolutní čísla o zraněných lyžařích (Protože se jedná spíše o Free for All Battle Royal v tomto případě)
V tabulce níže jsou hodnoty parametrů modelu použité pro všechny vlastnosti které nejsou explicitně porovnávány v dané simulaci. V podkapitolách níže jsou výsledky simulací porovnávájící různé hodnoty zkoumané vlastnosti. Simulace byly v těchto případech omezeny na 50 000 ticků.
Vlastnost | Hodnota | Skupina 0 | Skupina 1 | Skupina 2 |
---|---|---|---|---|
speed_tow | 1 | |||
ski_max_global | 7 | |||
people_max | 100 | |||
width_env | 20 | |||
speed_ski | 0.5 | 1.0 | 1.5 | |
speed_normal | 0.5 | 0.5 | 0.5 | |
turn_ski | 7 | 7 | 7 |
Minimální hranice X Široké hranice
V případě minimálního nastavení hranic nejsou na trati žádně překážky a hranice jsou naprosto rovné. V případě nejširších hranic je na trati zig-zag vzor viditelný na přiloženém obrázku.
Široké hranice (a související členitost tratě) podle očekávání zvyšují pravděpodobnost srážky s okolním prostředí. Z tohoto důvodu se také snižuje pravděpodbnost srážky s jiným lyžařem, celková pravděpodobnost nedokončení trati je ale výrazně vyšší.
Vlastnost | Minimální hranice | Široké hranice |
---|---|---|
people_ski_count | 6746 | 4601 |
people_total | 1505 | 2450 |
people_injured_ski% | 47.18 | 30.49 |
people_injured_ski_env% | 2.59 | 59.8 |
people_injured_nonski% | 0 | 0.04 |
Rychlost vleku
V případě rychlejšího vleku se dle očekávání zvýší absolutní počet sjezdů a % srážek zůstava v rámci chyby stejné.
Vlastnost | speed_tow = 1 | speed_tow = 2 |
---|---|---|
people_ski_count | 6549 | 7400 |
people_total | 1695 | 1992 |
people_injured_ski% | 50.38 | 55.87 |
people_injured_ski_env% | 10.5 | 7.68 |
people_injured_nonski% | 0 | 0.05 |
Maximální počet sjezdů na agenta
V případě vytrvalejších návštěvíků areálu se dle očekávání sníží celkový počet návštěvníků (z důvodu limitu návštěvníků v areálu) a zvýší pravděpodobnost, že daný návštěvník utrpí zranění. Z důvodu lepšího využití času (žádný čas stráveny na opouštění areálu) se také dle očekávání zvýšil celkový počet sjezdů.
Vlastnost | ski_max_global = 3 | speed_tow = 15 |
---|---|---|
people_ski_count | 5550 | 6743 |
people_total | 2481 | 1296 |
people_injured_ski% | 24.18 | 66.51 |
people_injured_ski_env% | 7.9 | 13.97 |
people_injured_nonski% | 0 | 0 |
Maximální počet lidí v areálu
Při zvýšení počtu lidí v areálu se dle očekávání zvýší pravděpodobnost srážky s jiným návštěvníkem, celkový počet návštěvníků a úspěšný počet sjezdů.
Vlastnost | people_max = 50 | people_max = 200 |
---|---|---|
people_ski_count | 3422 | 7986 |
people_total | 676 | 2477 |
people_injured_ski% | 28.11 | 61.77 |
people_injured_ski_env% | 11.09 | 10.46 |
people_injured_nonski% | 0 | 0 |
Rychlost sjezdu agenta
Na rozdíl od předchozích porovnání, v tomto případě všechny 3 typy agentů projížděli tratí najednou. Nejpomalejší lyžaři měli největší šanci nedokončit trať a největší šanci srážky s hranicí trati, což je způsobeno nejspíše největší četností změny směru, kdy je možné, že lyžař 'zabloudí' do místa odkud si neví rady. Překvapením je, že středně rychlí lyžaři měli nejmenší šanci srážky a tedy i nejvíce úspěšných sjezdů, ačkoli jim sjezd trvá déle než nejrychlejěím lyžařům.
Vlastnost | speed_ski = 0.5 | speed_ski = 1 | speed_ski = 2 |
---|---|---|---|
people_ski_count | 1627 | 2591 | 2269 |
people_total | 609 | 596 | 631 |
people_injured_ski% | 58.62 | 44.3 | 62.92 |
people_injured_ski_env% | 20.53 | 7.38 | 5.23 |
people_injured_nonski% | 0 | 0 | 0 |
Četnost zatáčení agenta
Stejně jako v případě rychlosti (nejmenší rychlost - nejvíce změn směru), agenti s nejvíce změny směru mají největší šanci se srazit s okolní krajinou. Tito lyžaři se ale naopak ukazují lepší ve vyhýbání ostatním lyžařům, jejich celková pravděpodbnost srážky je ale i tak vyšší než v případě rozhodnějších agentů.
Vlastnost | turn_ski = 5 | turn_ski = 10 | turn_ski = 20 |
---|---|---|---|
people_ski_count | 2302 | 2671 | 2662 |
people_total | 478 | 502 | 511 |
people_injured_ski% | 16.74 | 26.79 | 26.03 |
people_injured_ski_env% | 23.22 | 7.97 | 8.41 |
people_injured_nonski% | 0 | 0 | 0 |
Rychlost pohybu agenta mimo sjezdovku
Největším překvapením jsou vyýsledky v závilosti na parametru, který by měl mít nejmenší vliv. Lyžaři s nejpomalejším pohybem mimo sjezdovku mají výrazně menší pravděpodobnost srážky s okolím a největší šanci, že úspěšně dokončí sjezd. V tomto průběhu simulace se také v některých případech stalo, že agenti se navzájem zaseknou (mimo trať) a nedokážou se sami zkovu rozejít. Vzhledem k tomu, že se to stávalo pouze v tomto nastavení je to nejspíše způsobeno různými rychlostmi pohybu agentů mimo sjezdovku.
Vlastnost | speed_normal = 0.3 | speed_normal = 0.6 | speed_normal = 0.9 |
---|---|---|---|
people_ski_count | 2555 | 2389 | 2192 |
people_total | 509 | 512 | 530 |
people_injured_ski% | 27.9 | 25.39 | 21.51 |
people_injured_ski_env% | 7.86 | 20.31 | 31.51 |
people_injured_nonski% | 2.36 | 0.2 | 3.96 |
Kód
Zdrojový kód simulace: File:Skiing.nlogo