Difference between revisions of "Optimalizace kapacity vleku (NetLogo)"

From Simulace.info
Jump to: navigation, search
Line 98: Line 98:
 
* personsBeforeMe - Proměnná vyjadřující počet lidí, kteří jsou před daným lyžařem na sjezdovce a blokují ho (Počet lidí na sousedech patche o 2 před lyžařem). Může nabývat hodnot od 0 do nekonečna.
 
* personsBeforeMe - Proměnná vyjadřující počet lidí, kteří jsou před daným lyžařem na sjezdovce a blokují ho (Počet lidí na sousedech patche o 2 před lyžařem). Může nabývat hodnot od 0 do nekonečna.
 
* stoppedAgo - Proměnná vyjadřující, před jak dlouho dobou (počet ticků) lyžař náhodně zastavil. Může nabývat hodnot od 0 do nekonečna.
 
* stoppedAgo - Proměnná vyjadřující, před jak dlouho dobou (počet ticků) lyžař náhodně zastavil. Může nabývat hodnot od 0 do nekonečna.
 +
 +
lokální proměnné jednotlivých metod:
 +
 +
* inQueue - Proměnná používaná pro sečtení lidí ve frontě a na cestě na konec fronty v daném ticku. Může nabývat hodnot od 0 do nekonečna.
 +
* onTheTop - Proměnná používaná pro sečtení lidí na vršku sjezdovky v daném ticku. Může nabývat hodnot od 0 do nekonečna.
 +
* personCount - Proměnná používaná pro sečtení lidí před daným lyžařem v daném ticku, pokud by bylo potřeba sčítat více než jeden patch. Může nabývat hodnot od 0 do nekonečna.
 +
* blocked - Proměnná používaná pro sečtení všech zablokovaných lidí v daném ticku. Může nabývat hodnot od 0 do nekonečna.

Revision as of 13:12, 5 June 2016

JESTE NENI HOTOVE

Zadání

Název simulace: Optimalizace kapacity vleku

Předmět: 4IT495 Simulace systémů (LS 2015/2016)

Autor: Bc. Martin Hradil

Typ modelu: Multiagentní

Modelovací nástroj: NetLogo 5.3.1

Definice problému

Příjmy skiareálu s jednou sjezdovkou jsou z drtivé většiny tvořeny z prodeje permanentek. Pro největší příjmy je tedy vhodné, aby se do skiareálu vešlo co nejvíce lidí.

Celý skiareál má ale určitou kapacitu lidí, kteří se do něj vejdou, a při tom se ještě vzájemně na sjezdovce neblokují. Limitovat počet lidí na sjezdovce je možné kapacitou vleku (kolik lyžařů/čas vlek vyveze na kopec, nebo po jaké době vyveze jednoho lyžaře).

Cíl

Cílem simulace je při zadané šířce sjezdovky nalézt maximální kapacitu vleku, při které se lyžaři ještě nebudou blokovat tolik, aby se hromadili na kopci kvůli ucpání sjezdovky.

Metoda

Jelikož se jedná o multiagentní simulaci, jako prostředek byl zvolen program NetLogo, v poslední verzi 5.3.1. V něm byl vytvořen model skiareálu, ve kterém se jednotliví agenti pohybují.

Jelikož každý člověk má jiné schopnosti a chová se na sjezdovce jinak, lze jednotlivé lyžaře obtížně vyjádřit čísly. V nástroji NetLogo je možné vlastnosti lažařů jako rychlost nebo velikost obloučků náhodně generovat. Podklady pro nastavení generování těchto parametrů by bylo možné získat pozorováním na nějaké sjezdovce. To však nebylo vzhledem k aktuálnímu ročnímu období možné a tak byly odhadnuty.

Model

Tato část obsahuje popis modelu, jeho grafické rozhraní a logiku. První je vysvětlen samotný model, následně jak ho používat.

Popis Modelu

Grafické Rozhraní

Grafické rozhraní se skládá z části nastavení a ovládání, hlavního okna s vizualizací děje, a grafů a monitorů.

Xhram29-UI2.PNG

Část s ovládáním obsahuje posuvníky pro nastavení parametrů v rámci vhodných mezí a tlačítka pro prvotní nastavení a běh.


Hlavní okno s vizualizací obsahuje grafický model skiareálu. Ten se skládá z několika částí:

  • Kolem procházející cesta
  • Příchozí cesta do fronty
  • Fronta
  • Vlek
  • Výstup z vleku
  • Sjezdovka

Celé pozadí je zelené a má znázorňovat les nebo louku.


V pravé části jsou zobrazeny číselné výstupy simulace v číslech a grafech.

Implementace

V modelu existují lyžaři, kolem kterých se celá simulace odehrává. Ti mohou být v několika stavech, podle kterých se různě chovají chovají. Tyto stavy jsou uloženy v proměnných. Dále model obsahuje globální proměnné a několik lokálních proměnných.

Proměnné, parametry, obory hodnot

Proměnné z nastavení v UI:

  • slopeWidth - šířka sjezdovky, udáváná v "patches". Může nabývat hodnot od 10 do 55.
  • slopeMaxCurve - maximální úhel obloučku lyžaře vzhledem k jeho pohledu. Může nabývat hodnot od 0 do 90. Tzn. při 0° jede rovně přímo dolů, při 90° dělá obloučky až do pravého úhlu ke směru sjezdovky.
  • slopeSpeedDeviation - směrodatná odchylka pro generování náhodně rychlosti lyžařů. Může nabývat hodnot od 0 do 0,01.
  • liftCapacity - tato proměnná limituje, po jakém čase (po kolika ticích) vlek vyveze dalšího lyžaře. Když se má v daném ticku vyvézt další lyžař, tato proměnná se porovná a je-li větší než "lastPersonLifted", první lyžař z fronty nastoupí na vlek a proměnná se vynuluje. Může nabývat hodnot od 0 do 400.
  • newPeopleFrequency - Šance # z 1000, že se v daném ticku vytvoří nový člověk. Může nabývat hodnot od 0 do 100.
  • maxQueueLenght - Pokud je fronta na vlek delší než #, kolem procházející lidé nevstoupí do skiareálu. Může nabývat hodnot od 0 do 50.
  • stopChance - Šance # z 1 000 000, že se lyžař na sjezdovce v daném ticku zastaví. Může nabývat hodnot od 1 do 500.
  • StopDuration - Na jak dlouho se lyžař zastaví, udávaná v ticks. Může nabývat hodnot od 0 do 3000.

Globální proměnné:

  • lastNewPerson - tato proměnná limituje, po jakém čase mohou kolem procházet noví potencionální lyžaři. Jestliže je na ně fronta moc dlouhá, procházejí kolem skiareálu a mizí. S každým tickem se přičítá. Když se má v daném ticku vytvořit další člověk, tato proměnná se porovná a je-li větší než 10, vytvoří se nový člověk a proměnná se vynuluje.
  • liftSpeed - tato proměnná vyjadřuje rychlost pohybu lyžařů na vleku. Je nastavena na 0,05.
  • walkSpeed - tato proměnná vyjadřuje rychlost chůze lyžařů. Je použita, pokud je lyžař kdekoli kromě sjezdovky nebo vleku. Je nastavena na 0,13.
  • lastPersonLifted - tato proměnná vyjadřuje, před kolika ticky byl vyvezen poslední lyžař. Může nabývat hodnot od 0 do hodnoty nastavené v "liftCapacity".
  • personsInSkiareal - Proměnná vyjadřující počet lidí ve skiareálu. Tzn. těch, kteří jsou kdekoli kromě cesty procházející okolo. Může nabývat hodnot od 0 do nekonečna. (při hodně dlouhé době běhu simulace)
  • QueueLength - Proměnná vyjadřující počet lidí ve frontě nebo na cestě na konec fronty. Může nabývat hodnot od 0 do nekonečna. (při hodně dlouhé době běhu simulace a změně určitých nastavení)
  • onTheTopCount - Proměnná vyjadřující počet lidí na výstupu z vleku, kteří jsou zablokování a nemohou jet po sjezdovce dolů. Může nabývat hodnot od 0 do nekonečna. (při hodně dlouhé době běhu simulace)
  • blockedTotal - Proměnná vyjadřující počet lidí zablokovaných ostatními lyžaři, na sjezdovce a výstupu z vleku. Může nabývat hodnot od 0 do nekonečna. (při hodně dlouhé době běhu simulace)

Proměnné lyžařů:

  • place - Proměnná vyjadřující, kde se daný člověk nachází. Může nabývat hodnot road, roadUp, queue, lift, liftExit, slope, toQueue.
  • slopeSpeed - Proměnná vyjadřující rychlost lyžaře na sjezdovce. Může nabývat hodnot z normálního rozdělení 0,03;slopeSpeedDeviation, minimálně však 0,005.
  • slopeAngle - totéž jako interní proměnná heading, ale používána pouze, pokud je proměnná place="slope". Vyjadřuje aktuální směr pohybu na sjezdovce. U jednotlivých lyžařů může nabývat hodnot od 180 - slopeCurve do 180 + slopeCurve. Při určitém nastavení tedy u všech od 90 do 270.
  • slopeCurve - Proměnná vyjadřující maximální úhel obloučku daného lyžaře. Generována po opuštění vleku, náhodně v rozmezí od 0 do slopeMaxCurve. Při určitém nastavení tedy u všech od 0 do 90.
  • personsBeforeMe - Proměnná vyjadřující počet lidí, kteří jsou před daným lyžařem na sjezdovce a blokují ho (Počet lidí na sousedech patche o 2 před lyžařem). Může nabývat hodnot od 0 do nekonečna.
  • stoppedAgo - Proměnná vyjadřující, před jak dlouho dobou (počet ticků) lyžař náhodně zastavil. Může nabývat hodnot od 0 do nekonečna.

lokální proměnné jednotlivých metod:

  • inQueue - Proměnná používaná pro sečtení lidí ve frontě a na cestě na konec fronty v daném ticku. Může nabývat hodnot od 0 do nekonečna.
  • onTheTop - Proměnná používaná pro sečtení lidí na vršku sjezdovky v daném ticku. Může nabývat hodnot od 0 do nekonečna.
  • personCount - Proměnná používaná pro sečtení lidí před daným lyžařem v daném ticku, pokud by bylo potřeba sčítat více než jeden patch. Může nabývat hodnot od 0 do nekonečna.
  • blocked - Proměnná používaná pro sečtení všech zablokovaných lidí v daném ticku. Může nabývat hodnot od 0 do nekonečna.