User talk:Xgubk00
Tato stránka slouží jako Výzkumná zpráva simulace "Přesýpací hodiny" k semestrálnímu projektu pro předmět 4IT495 Simulace systémů (LS 2012/2013) na Vysoké škole ekonomické v Praze.
Zadání
Název simulace: Přesýpací hodiny
Autor: Kristýna Gubišová
Předmět: 4IT495 Simulace systémů (LS 2012/2013)
Typ modelu: Multiagentní model
Nástroj modelu: Netlogo
Definice problému
Následující model by měl simulovat chování zrn písku v přesýpacích hodinách, které pro měření času využívají právě pohyb zrn písku, která se vždy sypou dolů díky zemské přitažlivosti.
Přesýpací hodiny se skládají ze dvou baněk (trychtýřů), které jsou spojené úzkým hrdlem. Zrna písku se postupně přesýpají z horní do spodní baňky. Jakmile je horní baňka prázdná, hodiny by mělo být možné obrátit, aby bylo možné pokračovat v měření dalšího časového úseku.
Jak budou zrna spadávat? Jak se zrna písku zachovají nastane-li v hodinách nějaká překážka?
Metoda
Metoda vypracování: program NetLogo 5.0.4
Jak model pracuje
Tlačítko Setup - při stisknutí dojde k počátečnímu nastavení pole a k vykreslení přesýpacích hodin.
Number of balls - umožní nám nastavit objem zrnek písku v přesýpacích hodinách.
Tlačítko Charge - při stisknutí se naplní přesýpací hodiny na požadovaný počet zrnek písku, který lze nastavit v number of balls. Po naplnění je potřeba tlačítko vypnout.
Tlačítko Go - stisknutí spustí padání zrnek písku
Tlačítko Turnover - při stiknutí dojde k přetočení přesýpacích hodin
Tlačítko Make-obstacles - při stisknutí dojde k vytvoření překážky na určeném místě, kterou musí zrnka překonat.
Model
Model je vytvořen v prostředí NetLogo 5.0.4., jehož základem je svět ve tvaru čtverce o rozměru 41x41px (max. pxcor a pycor = 20) s centrem na souřadnicích 0;0, a vněmž máme červenou barvou vymezené dvě baňky spojené hrdlem, které tvoří hodiny.
Globální proměnné:
field - pole - vsechny patches mimo borders border - hranice - okoli hodin gc - defice spodni vnitrni casti hodin pro prvni naplneni
Metody:
setup - nastavení go - padání zrnek turnover - přetočení hodin charge - naplnění hodin zrnky define-glasscenter - definuje spodní pole hodin define-field - definuje vnitřní pole define-border - definuje rámeček hodin define-screen-regions - pokud není nastaveno field a border, nastaví jej reset-screen-regions - úvodní nastavení clear-field - smaže pole set-border - nastaví rámeček make-ball - vytvoří jedno zrno písku do-fall - padání zrna (popsána níže) make-sandglassgrid - vytvoří hodiny clear-grid - nastaví grid na prázdnou hodnotu set-grid - nastaví na grid disappear - želva umře a uvolní místo make-obstacles - vytvoří překážku na stanoveném místě
Výsledky
Dle procedury do-fall, která vyjadřuje padání zrnka písku, zrnko padá, dokud je pod ním místo.
Pokud je pod ním a vlevo i vpravo místo, může se náhodně vychýlit do strany.
Pokud je nahoře zrno a na jedné ze stran je volno, zrno si vybere tu volnou stranu a vychýlí se tam.
Pokud je nahoře ucpáno (např. grid) a je volná nějaká strana, vychýlí se na ni.
to do-fall ; Procedura padání zrna
let below patch-at 0 -1 ;definice patche pod aktualnim let beside patches at-points [ [ -1 0 ] [ 1 0 ] ] ;definice bocnich patchu let above patch-at 0 1 ;definice patche nad aktualnim ; pokud je pod misto, proste pada ifelse [void?] of below = true [ set void? true set ycor ycor - 1 set void? false ]
; jinak pokud je vlevo ci vpravo volno a pod je taky volno, tak si pujde i trochu do strany [ set beside beside with [ void? = true and [void?] of patch-at 0 -1 = true ] ifelse any? beside [ set beside one-of beside set void? true set xcor [pxcor] of beside set ycor pycor - 1 set void? false ]
; pokud je nahore micek a na nejake strane je volno, vybere si tu stranu a utece tam [ set beside beside with [ void? = true ] ifelse ([void?] of above = false and ([any? balls-here ] of above = true) and (any? beside) ) [ set beside one-of beside set void? true set xcor [pxcor] of beside set void? false ] ; pokud je nahore ucpano (treba grid) a je volna nejaka strana, uhne tam [ if ([void?] of above = false and ([ not any? balls-here ] of above = true) and any? beside with [ void? = true ] and any? beside with [ not void? = true ] ) [ set beside one-of beside with [ void? = true ] set void? true set xcor [pxcor] of beside set void? false ] ] ] ]
end
Podle procedury make-obstacles bude na určeném místě vytvořena překážka, kterou budou muset zrna písku obtékat. Pro zjednodušení jsem vytvořila překážku minimálních rozměrů. V případě, že by byla použita překážka větší, zrna by se chovala stejně.
to make-obstacles ;vytvoří statickou překážku ask patch 0 -8 [ set-grid ] end
Závěr
Snažila jsem se namodelovat přesýpací hodiny věrně, tak jak by měly fungovat v realitě včetně přetáčení hodin.
Kód
http://www.simulace.info/index.php/File:Kiki_v6_final.nlogo#file