Difference between revisions of "User talk:Xgubk00"

From Simulace.info
Jump to: navigation, search
(Jak model pracuje)
(Výsledky)
 
(43 intermediate revisions by the same user not shown)
Line 13: Line 13:
  
 
=Definice problému=
 
=Definice problému=
Následující model simuluje chování zrn písku v přesýpacích hodinách, které pro měření času využívají právě pohyb zrvn písku, která se vždy sypou dolů díky zemské přitažlivosti.  
+
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.  
 
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 se zrna písku zachovají nastane-li v hodinách nějaká překážka.
+
Jak budou zrna spadávat?
 
+
Jak se zrna písku zachovají nastane-li v hodinách nějaká překážka?
 
 
Přesýpací hodiny. Za jak dlouho se přesype písek resp. propadnou různě velká zrna písku, určitým otvorem v přesýpacích hodinách při pořád stejné gravitaci. Možné rozšíření: Písek uvnitř baňky se rozemílá na drobnější, tzn. hodiny se začnou přecházet.
 
 
 
Agenty by byly jednotlivá zrna písku, která by se jednoduše sypala zhora, skrz zužující se trychtýř, takže by písek byl dávkován. Jednotlivá zrna by mohla být modifikovatelná, tedy dala by se měnit jejich velikost (do velikosti otvoru, jinak by došlo k ucpání). Sledovali bychom se také písek skládá na dně. Bylo by možné do hodin vložit i nějakou překážku a sledovat jak si s ní písek poradí. Mohli bychom také sledovat jak se přesýpání změní, nastane-li gravitační zrychlení.
 
  
 
=Metoda=
 
=Metoda=
Metoda vypracování: NetLogo
+
Metoda vypracování: program NetLogo 5.0.4
  
 
=Jak model pracuje=
 
=Jak model pracuje=
  
'''Tlačítko Setup''' - dojde k počátečnímu nastavení, zobrazí se nám rozhraní přesýpacích hodin.
+
'''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.
 
'''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í nám 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 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''' - spustí padání zrnek písku
+
'''Tlačítko Go''' - stisknutí spustí padání zrnek písku
  
'''Tlačítko Turnover''' - při stiknutí dojde k otočení přesýpacích hodin
+
'''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=
Model je vytvořen v prostředí NetLogo 5.0.1., 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, které jsou spojené hrdlem.
+
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=
 
=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=
 
=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=
 
=Kód=
 +
 +
http://www.simulace.info/index.php/File:Kiki_v6_final.nlogo#file

Latest revision as of 21:34, 12 June 2013

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