Tutoriál 3: Procedury Prostředí NetLogo ver. 3.1.4

Transkript

Tutoriál 3: Procedury Prostředí NetLogo ver. 3.1.4
Martina Husáková
Tutoriál 3: Procedury
Prostředí NetLogo ver. 3.1.4
Znalostní technologie III
materiál pro podporu studia
Martina Husáková
OBSAH
AGENTY A PROCEDURY .................................................................................................... 3
TVORBA TLAČÍTKA SETUP............................................................................................... 3
TVORBA TLAČÍTKA GO ..................................................................................................... 5
EXPERIMENTOVÁNÍ S PŘÍKAZY..................................................................................... 7
POLE A PROMĚNNÉ............................................................................................................. 8
„ŽELVÍ PROMĚNNÉ“ ........................................................................................................... 9
DISPLEJE............................................................................................................................... 10
PŘEPÍNAČE A TITULKY ................................................................................................... 11
PÍŠEME DALŠÍ PROCEDURY........................................................................................... 13
NETLOGO A GRAFY........................................................................................................... 15
GLOBÁLNÍ PROMĚNNÉ .................................................................................................... 17
VÍCE DETAILŮ..................................................................................................................... 18
CO DÁL? ................................................................................................................................ 19
PŘÍLOHA: CELÝ PROGRAM............................................................................................ 20
ZDROJ .................................................................................................................................... 22
2
Martina Husáková
Agenty a procedury
V druhém tutoriálu jsme se seznámili s možností zadávat příkazy agentům pomocí centra
příkazů (Command Center) a získávat o nich informace obsažené v monitorech agentů
(Turtle Monitor a Patch Monitor). Nyní můžeme přejít k samotnému srdci modelování
v NetLogu - k záložce Procedures.
Již jsme se seznámili se základními typy agentů, kterým jsme zadávali příkazy v NetLogu:
• Pole (angl. Patches);
• Želvy (angl. Turtles);
• Pozorovatel (angl. Observer).
Pole jsou nepohyblivým prvkem modelu a organizovány do mřížky. Želvičky jsou aktivními
prvky modelu, které se pohybují na políčkách. Pozorovatel vidí vše, co se kde ve světě
NetLoga šustne a realizuje takové akce, které ani želva nebo pole udělat nemohou.
Všechny tyto typy agentů mohou spouštět příkazy i procedury. Procedura v NetLogu
kombinuje příkazy do jednoho celku (vlastně příkazu), který sami vytvoříme.
Nyní se naučíme psát procedury, které zajistí pohyb želv, jejich stravování, reprodukci a
úhyn. Také se seznámíme s tvorbou a využíváním displejů (Monitors), posuvníků (Sliders) a
grafů (Plots). Vytvoříme jednoduchý ekosystém, který se příliš neliší od modelu Wolf Sheep
Predation, který známe z prvního tutoriálu.
Tvorba tlačítka SETUP
Pro založení nového modelu vybereme položku „New“ z menu „File“. Pak vytvoříme nové
tlačítko setup a to následovně:
• Klikněte na ikonu „Button“ v panelu nástrojů v záložce Interface;
• Klikněte pak kamkoliv do plochy záložky Interface;
• Otevře se vám dialogové okno pro editaci tlačítka. Napište „setup“ do okna s názvem
Commands;
• Stiskněte tlačítko OK a dialogové okno zmizí.
Nyní jsme vytvořili tlačítko setup. Stiskem tlačítka setup spustíme proceduru, která se bude
nazývat setup. Procedura je sekvence příkazů NetLoga, které přiřazujeme název. Ještě jsme
ale proceduru setup nedefinovali, jen jsme vytvořili tlačítko setup. Protože tlačítko odkazuje
na proceduru, která ještě neexistuje, tlačítko je červené:
3
Martina Husáková
Když budete chtít vidět chybové hlášení skryté za zčervenáním tlačítka, klikněte na tlačítko
setup.
Nyní vytvoříme proceduru setup, takže pak už toto tlačítko nebude mít červenou barvu.
Přepněte se do záložky Procedures a napište tyto příkazy:
to setup
clear−all
create−turtles 100
ask turtles [ setxy random−xcor random−ycor ]
end
Okno s procedurou vypadá následovně:
Každá procedura začíná slovem „to“ a končí slovem „end“.
Podívejme se na význam jednotlivých řádků procedury „to setup“;
• To setup je začátkem definice procedury pojmenované jako „setup“;
• Clear-all převádí modelovaný svět do inicializačního stavu (začínáme s čistým
plátnem). Všechna pole zčernají a želvy zmizí;
• Create-turtles 100: vytvoření 100 želviček, které se objeví v centru modelovaného
světa, resp. na souřadnicích (0;0);
• Ask turtles [ … ] sdělí každé želvě, aby provedla kód, který je uveden uvnitř
hranatých závorek (ask je příkaz, který spouští pozorovatel pro ovlivnění chování
želviček);
• Setxy random-xcor random-ycor je příkaz, který používá tzv. „reportér“. Reportér,
oproti příkazu, vrací určitou hodnotu. Nejprve každá želva spustí reportéra randomxcor, který vrátí náhodné číslo (vlastně pseudonáhodné) z rozsahu, které je dané
souřadnicemi pozice želvy (osa x). Pak každá želva spustí reportér random-ycor.
4
Martina Husáková
•
Nakonec každá želva spustí příkaz setxy a náhodně vygenerovaná čísla budou pro
něho vstupními hodnotami;
End ukončuje definici procedury „setup“.
Po napsání procedury se přepněte do záložky Interface a stiskněte tlačítko setup, které jste
předtím vytvořili. Uvidíte želvičky roztroušené ve vašem modelovaném světě:
Stiskněte několikrát tlačítko setup a sledujte, jak se mění pozice želv při každém stisknutí.
Tvorba tlačítka GO
Nyní vytvoříme tlačítko „go“. Realizujte ty samé kroky, které jste použili při zakládání
tlačítka setup, přitom:
• pojmenujte proceduru ne setup, ale go;
• zaškrtněte pole s názvem „forever“ v editačním okně tlačítka.
5
Martina Husáková
Zaškrtnutím políčka „forever“ zajistíme neustálé spouštění procedury „to go“. Pak přidáme
programový kód k tlačítku „go“ v záložce Procedures:
to go
move−turtles
end
Co ale znamená „move-turtles“? Je to primitivum (vestavěné v NetLogu) jako např. clear-all?
Ne, není. Jedná se o proceduru, kterou vytvoříme sami. Dosud jsme vytvořili jen dvě
procedury – setup a go.
Vytvořte tedy novou proceduru „move-turtles“:
to move−turtles
ask turtles [
right random 360
forward 1
]
end
Popis jednotlivých příkazů v proceduře „to go“ je následující:
• ask turtles [ … ]: přikazujeme želvám prostřednictvím pozorovatele, aby provedly
akce uvedené v hranatých závorkách;
• right random 360 je dalším příkazem, který využívá reportéra. Nejprve každá želva
od reportéra random získá náhodnou hodnotu v rozmezí 0 – 359. Pak se každá želva
otočí vpravo o takový úhel, který je daný náhodně vygenerovaným číslem;
• forward 1 způsobí posun želvičky o jeden krok dopředu.
Proč jsme právě vytvořený kód nenapsali přímo do procedury „to go“? To je samozřejmě
možné, ale snažíme se o to, aby celý programový kód modelu byl snadný k pochopení a
jednodušeji jsme se v něm orientovali. Je dobré mít pro každou určitou akci, kterou chceme
v modelu zachytit (např. vykreslení grafu, pohyb želv, inicializace modelu, …), určitou
proceduru s jednoznačným názvem. Není příliš vhodné nahustit většinu kódu do několika
málo procedur. Nevyznali bychom se v tom. Samozřejmě, že také záleží na složitosti
modelované úlohy.
Tlačítko go je tzv. „forever tlačítko“, tj. nekonečné tlačítko. Jeho úkolem je opakovat
programový kód do doby jeho opětovného stisknutí. Zkuste nyní stisknout tlačítko setup a
pak tlačítko go. Pak opět stiskněte tlačítko go a všimněte si, jak „nekonečné tlačítko“ funguje.
Je zajímavé, že když se jedna želvička objeví na hraně modelovaného světa a udělá další
krok, objeví se na protější straně modelovaného prostoru. Je ovšem možné želvičkám
zabránit, aby se na protějších stranách při přesahu hranic modelu objevovaly. Klíčem k tomu
je editační okno modelovaného světa, viz. obrázek níže (tlačítko Edit a možnosti World
wraps horizontally a World wraps vertically). Zkuste si změnit tato nastavení a pozorujte
pohyb želviček ve vašem modelu.
6
Martina Husáková
Experimentování s příkazy
Zadejte do centra příkazů (Command Center):
• turtles> set color red s následným stiskem Enteru nebo;
• setup nebo;
• go nebo;
• move-turtles.
Jedná se o jiný způsob spouštění příkazů nebo procedur než s pomocí tlačítek. V případě
centra příkazů musíte nejprve vybrat typ agenta, který má příkaz nebo proceduru vykonat.
Zkuste pak ještě:
• turtles> pen-down nebo;
• změňte proceduru move-turtles tak, že zadáte místo „right random 360“ – „right
random 45“.
Poznámka: pro zajištění pozornějšího sledování výstupů vámi napsaných procedur
doporučuji si čas modelu zpomalit pomocí posuvníku, viz. obrázek níže.
7
Martina Husáková
Pole a proměnné
Nyní máme v našem modelu vytvořeno 100 želviček, které neví nic o světě kolem sebe jen se
pohybují. Vytvoříme nové procedury, které budou nastavovat vlastnosti polí a želv.
Vraťte se k proceduře setup a přepište ji následujícím způsobem:
to setup
clear−all
setup−patches
setup−turtles
end
Máme zde dvě nové procedury „setup-patches“ a „setup-turtles“. Pro definování procedury
„setup-patches“ uděláme následující:
to setup−patches
ask patches [ set pcolor green ]
end
Procedura „setup-patches“ nastavuje barvu každého pole na zelenou. Jen připomeňme, že
barva želv se nastavuje pomocí proměnné „color“ a barva polí pomocí „pcolor“.
Teď nastavíme proceduru „setup-turtles“, která se neodlišuje od původně nastavené
procedury „setup“:
to setup−turtles
create−turtles 100
ask turtles [ setxy random−xcor random−ycor ]
end
Přepněte se zpátky do záložky Interface a stiskněte tlačítko setup. Jak vidíte, objeví se zelené
pozadí pro náš svět.
8
Martina Husáková
„Želví proměnné“
Zatím máme vytvořeno několik desítek želv, které ale nic nedělají. Dodáme jim tedy
možnost interagovat s okolím (resp. s ostatními želvami a poli). Zajistíme, aby želvy jedly
trávu (zelená políčka), rozmnožovaly se a … tak jak to ve světě už chodí, i odcházely na onen
svět. Potom, co želvičky zelenou trávu sní, tráva se znovu objeví. Budeme proto potřebovat
zajistit kontrolu reprodukce, úmrtí želv a jejich energie (energie sama vlastně ovlivňuje
výkonnost živého organismu). Vytvoříme tedy novou tzv. „želví proměnnou“.
Již jste poznali vestavěnou proměnnou, kterou používají výhradně agenty typu želva tj.
proměnnou color. Pro vytvoření nové proměnné, kterou bude používat jen a jen agent typu
želva, využijeme deklaraci „turtles-own“ s názvem nové proměnné „energy“. Tuto
proměnnou umístíme před všechny procedury, které jsme dosud vytvořili:
turtles−own [energy]
Teď využijeme tuto proměnnou a dovolíme želvám jíst. Přepněte se do záložky Procedures a
přepište proceduru go následovně:
to go
move−turtles
eat−grass
end
Procedura eat-grass bude mít následující kód:
to eat−grass
ask turtles [
if pcolor = green [
set pcolor black
set energy (energy + 10)
]
]
end
Jak vidíte, v proceduře „eat-grass“ jsme poprvé použili příkaz „if“. Podívejme se na něj blíže.
Každá želva, která spustí příkazy uvedené v hranatých závorkách, porovnává barvu, která je
obsažena v proměnné pcolor, se zelenou barvou. (Želva má přímý přístup k proměnné pole
pcolor na které právě stojí). Jestliže je barva pole zelená, výsledkem porovnání je logická
hodnota true a jedině v tomto případě želva realizuje příkazy uvedené v hranatých
závorkách (jinak je přeskočí). Takže jestliže je želva na zeleném poli, pak je barva tohoto pole
změněna na černou (najedla se) a dojde k zvýšení její energie o deset jednotek výše.
Samozřejmě, i při pohybu želvy se mění energie (energie ubývá). Proto upravíme proceduru
„move-turtles“ tak, aby bylo zajištěno, že co krok želvy to ztráta energie o jednu jednotku:
9
Martina Husáková
to move−turtles
ask turtles [
right random 360
forward 1
set energy energy − 1
]
end
Přepněte se na záložku Interface, stiskněte tlačítko setup a pak go. Uvidíte změnu barvy
políčka ze zelené na černou, jakmile po nich želvičky přejdou.
Displeje
Nyní vytvoříme dva displeje (Monitor) v záložce Interface. Postup jejich tvorby je stejný jako
v případě tlačítek. Po založení prvního z nich se Vám otevře editační okno displeje, kde do
části s názvem Reporter napište: „count turtles“, viz. obrázek níže. Pak stiskněte OK a
editační okno se zavře.
10
Martina Husáková
„Turtles“ v okně reportéra je tzv. množinou agentů (agentset). Množina je v tomto případě
tvořena všemi želvami, které jsme vytvořili. „Count“ nám říká, kolik agentů je v množině.
Druhý monitor vytvoříme podobným způsobem. Opět se nám objeví editační okno. Do okna
Reporter zadejte:
• count patches with [pcolor = green];
• do pole „Display name“ zadejte green patches;
• stiskněte tlačítko OK a editační okno se zavře.
Opět jsme zde použili „count“ pro zjištění kolik agentů je v množině. „Patches“ je množina
všech polí. Chceme přitom vědět, kolik agentů z množiny má zelenou barvu. Vytvoří se
menší množina splňující podmínku uvedenou v hranatých závorkách (pcolor = green).
Nyní máme dva displeje, které nám budou oznamovat, kolik želv a zelených polí máme
aktuálně k dispozici. Po spuštění modelu bude docházet automaticky ke změnám
v hodnotách uvedených v monitorech, v našem případě se bude zatím měnit jen počet
zelených polí.
Přepínače a titulky
Jak již bylo naznačeno, želvy získávají a ztrácejí energii. Je možné sledovat stav energie želv
pomocí nástroje Turtle Monitor, když model běží. Bylo by ale užitečné mít před očima stav
energie všech želv neustále. Proto založíme přepínač (Switch), který bude zobrazovat nebo
nezobrazovat stav energie všech želv.
•
•
•
Vytvořte přepínač kliknutím na ikonu přepínače na panelu nástrojů záložky
Interface;
Objeví se dialogové okno pro zadání názvu globální proměnné;
Do dialogového okna zadejte: show-energy?, přitom nezapomeňte uvést otazník
v názvu proměnné.
11
Martina Husáková
Teď se vraťte k proceduře go s použitím záložky Procedures a přepište proceduru „eatgrass“ následovně:
to eat−grass
ask turtles [
if pcolor = green [
set pcolor black
set energy (energy + 10)
]
ifelse show−energy?
[ set label energy ]
[ set label "" ]
]
end
Procedura „eat-grass“ v sobě obsahuje nový příkaz „ifelse“. Každá želva při spuštění tohoto
příkazu zkontroluje hodnotu globální proměnné „show-energy?“ (tato hodnota je získána
z nastavení přepínače ze záložky Interface). Když je přepínač zapnutý (poloha „On“),
výsledkem je hodnota true a želvička spustí příkazy uvedené v hranatých závorkách.
V našem případě se přiřadí hodnota energie do titulku ke každé želvě. Jestliže je přepínač
vypnutý (poloha „Off“), pak želvička spustí kód uvedený v druhých hranatých závorkách.
V našem případě nezobrazí žádný titulek u želv.
Poznámka: V NetLogu je část textu nazývána „string“ – řetězec. Řetězec je sekvence písmen
nebo jiných znaků zapsaných do dvojitých uvozovek. Jestliže zapíšeme uvozovky takto: “ ”,
jedná se o prázdný řetězec. Jestliže je titulek u želvy prázdným řetězcem, žádný text není u
ní zobrazen.
12
Martina Husáková
Zkuste si spustit model a nastavovat přepínač do různých poloh. Když je přepínač zapnutý,
uvidíte energetickou hodnotu každé želvy, která se zvýší, když želva bude jíst trávu. Také
uvidíte pokles energie, když se želva pohybuje.
Píšeme další procedury
Nyní zajistíme, aby se želvy rozmnožovaly, hynuly a tráva znovu rostla. Pro každou tuto
aktivitu vytvoříme novou proceduru.
Jděte na záložku Procedures a přepište proceduru go:
to go
move−turtles
eat−grass
reproduce
check−death
regrow−grass
end
Jednotlivé procedury mají následující kód:
to reproduce
ask turtles [
if energy > 50 [
set energy energy − 50
hatch 1 [ set energy 50 ]
]
]
end
13
Martina Husáková
to check−death
ask turtles [
if energy <= 0 [ die ]
]
end
to regrow−grass
ask patches [
if random 100 < 3 [ set pcolor green ]
]
end
Každá z těchto procedur používá příkaz „if“. Každá želva, která spustí proceduru
„reproduce“, provede kontrolu proměnné „energy“. Jestliže je její hodnota větší než 50, pak
každá želva spustí příkazy uvedené v hranatých závorkách. V našem případě sníží energii
želvy o 50 jednotek. Následně použije příkaz „hatch“, který má tuto syntaxi: „hatch number [
commands ]“. Příkaz vytvoří tolik nových želv, kolik je hodnota number. Želvy jsou přitom
kopiemi svých rodičů. V hranatých závorkách se uvádějí příkazy, které mají nové želvy
provést. V našem případě po nových želvách požadujeme, aby nastavily svoji energii na
hodnotu 50. Rodí se tedy s určitou dávkou energie.
Když každá želva spustí proceduru „check-death“, pak dochází ke kontrole stavu proměnné
energy. Jestliže je výsledek porovnání proměnné energy s hodnotou rovnou nebo menší než
0 true, pak želva umře, resp. využije se primitivum „die“.
Jestliže každá želva spustí proceduru „regrow-grass“, pak se kontroluje, jestli náhodně
vygenerovaná hodnota v rozsahu 0 – 99 je menší než 3. Jestliže ano, pak je barva pole
nastavena na zelenou. Růst trávy je zcela náhodnou záležitostí.
Přepněte se do záložky Interface, stiskněte tlačítko setup a go a sledujte model. Uvidíte
zajímavé chování modelu. Některé želvy umírají v důsledku ztráty energie, dochází ke
vzniku nových želv a růstu trávy. Když budete sledovat displeje ve vašem modelu, uvidíte,
jak počet želv (count turtles) a zelených polí (green patches) kolísá. Jze kolísání nějak
předpovědět? Je vztah mezi těmito proměnnými (počty želv a zelených polí)?
Bylo by dobré mít jednodušší způsob monitoringu změn v chování modelu. NetLogo nám
dovoluje vytvářet grafy pro tyto účely. To bude další krok při konstrukci ekosystému.
14
Martina Husáková
NetLogo a grafy
Požadujeme vytvořit graf. Přejdeme tedy např. nejprve do záložky Procedures, kde změníme
proceduru „setup“ a přidáme novou proceduru „do-plots“:
to setup
clear−all
setup−patches
setup−turtles
do−plots
end
Dále pozměníme proceduru „go“ kam přidáme také proceduru „do-plots“:
to go
move−turtles
eat−grass
reproduce
check−death
regrow−grass
do−plots
end
Nyní definujeme samotnou proceduru „do-plots“. Je přitom důležité si uvědomit, co
budeme chtít na grafu zachytit. V našem případě se bude jednat o počty želv a zelených polí,
které se budou v čase vyvíjet. Každý krok vývoje bude v grafu zachycen.
to do−plots
set−current−plot "Totals"
set−current−plot−pen "turtles"
plot count turtles
set−current−plot−pen "grass"
plot count patches with [pcolor = green]
end
Předtím než budeme moci graf využívat, je třeba udělat dvě základní věci. Je třeba
specifikovat, jaký graf s jakým názvem budeme používat a jaké pero pro vykreslování
využijeme.
Pro specifikaci grafu slouží příkaz: set−current−plot "Totals", kterým graf zakládáme
s určitým jménem (v našem případě „Totals“). Příkaz „plot“ vykresluje počet želviček
s jedním druhem pera a počty zelených polí druhým perem. Každé pero má své jméno a
zakládá se následovně:
• Pro želvy: set−current−plot−pen "turtles";
• Pro pole: set−current−plot−pen "grass".
15
Martina Husáková
Jak graf vytvořit? Využijte ikonu „Plot“ v záložce Interface. Postup jeho vytvoření je
obdobný jako u ovládacích prvků, o kterých jsme se již zmiňovali. Objeví se vám editační
okno, kde do pole „Name“ zadáte název grafu „Totals“. Pojmenujte osu X jako „time“ a osu
Y jako „total“.
Dále založíme dvě pera, která nám budou vykreslovat počty želv a zelených polí. Klikněte
proto na tlačítko „Create“ v editačním okně grafu. Objeví se vám okno, kam zadáte název
pera. První pero pojmenujte jako „turtles“ a druhé jako „grass“.
Abyste dokázali rozeznat obě pera, přidělte jim barvu v sekci Color editačního okna grafu.
Všimněte si, že můžete nastavovat maximální a minimální hodnotu pro osu X a Y. Je vhodné
16
Martina Husáková
mít zaškrtnutou položku Autoplot?. Tato volba zajišťuje přizpůsobení grafu při překročení
minimálních a maximálních hodnot na osách. Znovu spusťte model a sledujte, jak se mění
hodnoty na grafu.
Jestliže jste zapomněli, která barva pera co zobrazuje, pak klikněte na titulek „Pens“ na
vytvořeném grafu a objeví se vám legenda, která toto popisuje.
Globální proměnné
Někdy je vhodné zastavit model po určitém počtu kroků. Jak na to? Zavedeme globální
proměnnou s názvem „ticks“, kterou umístíme nad definici „želví proměnné“:
globals [ticks]
turtles−own [energy]
Pak změníme proceduru setup tak, že uvedeme inicializační hodnotu počtu cyklů příkazem
„set ticks 0“:
to setup
clear−all
set ticks 0
setup−patches
setup−turtles
do−plots
end
Nakonec pozměníme i proceduru go:
to go
if ticks = 500 [ stop ]
move−turtles
eat−grass
reproduce
check−death
regrow−grass
do−plots
set ticks (ticks + 1)
end
17
Martina Husáková
Nyní spusťte model. Výsledkem výše upravených procedur je, že model, i přes existenci
tlačítka „forever“, neběží neustále. Model se zastaví po pěti stech cyklech. Jak přidáte displej
do modelu, který vám bude oznamovat počet již proběhnutých cyklů? Jak byste změnili
proceduru, aby se model zastavil po stech cyklech?
Více detailů
Podívejme se nyní, jak využít další komponentu prostředí NetLogo, tzv. posuvník (Slider).
Nebudeme totiž chtít mít v modelu pevně stanovený počet želv, v našem případě 100.
Budeme chtít jednodušeji měnit počty želv, aniž bychom museli pokaždé měnit jejich počet
ve zdrojovém kódu modelu.
Tuto komponentu založíme stejně jako ty předchozí. Klikneme na ikonu posuvníku – Slider
a otevře se nám jeho editační okno. Zde zadáme název globální proměnné, např. „number“.
Tuto proměnnou použijeme v proceduře „setup-turtles“, namísto zadaného počtu želv 100,
viz. níže:
to setup−turtles
create−turtles number
ask turtles [ setxy random−xcor random−ycor ]
end
Zkuste si měnit nastavení hodnot na posuvníku pro zjištění, jaký vliv mají různé hodnoty na
model.
Teď vytvoříme dva posuvníky: „energy-from-grass“ a „birth-energy“. Prvním budeme
regulovat energii želv, která se mění tak, jak želvy jí (energie se zvyšuje). Druhým budeme
regulovat energii želv, která se mění tak, jak se želvy rozmnožují (energie se snižuje).
18
Martina Husáková
Upravíme tedy proceduru „eat-grass“ a „reproduce“:
to eat−grass
ask turtles [
if pcolor = green [
set pcolor black
set energy (energy + energy−from−grass)
]
ifelse show−energy?
[ set label energy ]
[ set label "" ]
]
end
to reproduce
ask turtles [
if energy > birth−energy [
set energy energy − birth−energy
hatch 1 [ set energy birth−energy ]
]
]
end
Jaké posuvníky byste ještě mohli do modelu přidat?
Co dál?
Nyní máme program kompletní. Vytvořili jsme model ekosystému, ve kterém tráva roste a
ubývá, želvičky, jakožto aktivní prvky ekosystému, se pohybují, rozmnožují, jí a hynou.
Seznámili jsme se s komponentami modelu: tlačítky, posuvníky, přepínači, displeji a grafy.
Dá se říci, že jimi vytváříme grafické rozhraní modelu, které přímo souvisí s kódem, který je
zapsán v záložce Procedures.
Můžete samozřejmě dál experimentovat s tímto modelem nebo ho rozšiřovat. Ekosystém,
který jsme zde vytvořili je velmi podobný modelu Wolf Sheep Predation, který byl
představen v prvním tutoriálu. Můžete si ho otevřít a třeba upravit na základě informací
zjištěných z tohoto tutoriálu.
19
Martina Husáková
Příloha: Celý program
globals [ticks] ;; for keeping track of how many times the
;; go procedure has been run
turtles−own [energy] ;; for keeping track of when the turtle is ready
;; to reproduce and when it will die
to setup
clear−all
set ticks 0 ;; resets the counter to zero when setup is pressed
setup−patches
setup−turtles
do−plots
end
to setup−patches
ask patches [ set pcolor green ]
end
to setup−turtles
create−turtles number ;; uses the value of the number slider to create turtles
ask turtles [ setxy random−xcor random−ycor ]
end
to go
if ticks = 500 [ stop ] ;; only run these procedures if ticks is less than 500
move−turtles
eat−grass
reproduce
check−death
regrow−grass
do−plots
set ticks (ticks + 1) ;; increase the tick counter by 1 each time through
end
to move−turtles
ask turtles [
set heading random 360
forward 1
set energy energy − 1 ;; when the turtle moves it looses one unit of energy
]
end
20
Martina Husáková
to eat−grass
ask turtles [
if pcolor = green [
set pcolor black
;; the value of energy−from−grass slider is added to energy
set energy (energy + energy−from−grass)
]
ifelse show−energy?
[ set label energy ] ;; the label is set to be the value of the energy
[ set label "" ] ;; the label is set to an empty text value
]
end
to reproduce
ask turtles [
if energy > birth−energy [
set energy energy − birth−energy ;; take away birth−energy to give birth
hatch 1 [ set energy birth−energy ] ;; give this birth−energy to the offspring
]
]
end
to check−death
ask turtles [
if energy <= 0 [ die ] ;; removes the turtle if it has no energy left
]
end
to regrow−grass
ask patches [ ;; 3 out of 100 times, the patch color is set to green
if random 100 < 3 [ set pcolor green ]
]
end
to do−plots
set−current−plot "Totals" ;; which plot we want to use next
set−current−plot−pen "turtles" ;; which pen we want to use next
plot count turtles ;; what will be plotted by the current pen
set−current−plot−pen "grass" ;; which pen we want to use next
plot count patches with [pcolor = green] ;; what will be plotted by the current pen
end
21
Martina Husáková
CHYBA: v originálním tutoriálu je požadavek (str. 64), aby se model zastavil při pěti stech
cyklech, ale dle programového kódu se zastaví při 501 a více cyklech:
to go
if ticks > 500 [ stop ]
move−turtles
eat−grass
reproduce
check−death
Je to opraveno na podmínku: if ticks = 500.
Zdroj
NetLogo 3.1.4. User Manual. Přístup z internetu: URL:
http://ccl.northwestern.edu/netlogo/docs/NetLogo%20User%20Manual.pdf
22

Podobné dokumenty

Tutorial 3: Procedury

Tutorial 3: Procedury Příkazy pište do příkazového panelu (podobně jako turtles> set color red) nebo je přidejte do procedur setup (PŘIPRAV), go (START) a move-turtles. Všimněte si, že když zadáváte příkazy v příkazovém...

Více

Slovníček NetLogo

Slovníček NetLogo Vrací pravdivou hodnotu, pokud daná množina agentů není prázdná – v případě, že ano, vrací nepravdivou hodnotu. Reportér je ekvivalentní k count agentset > 0, ale efektivnější (a pravděpodobně čite...

Více

Průvodce rozhraním

Průvodce rozhraním Když měníte nastavení, všimněte si, že provedené změny se projeví v náhledu (po pravé straně panelu) ukazujícím výchozí bod a hranice. Šířka a výška světa jsou zobrazeny pod náhledem. Pod náhledem ...

Více

Často kladené dotazy

Často kladené dotazy I když tato instalace váš problém vyřeší, napište nám na [email protected], abychom zjistili podrobnosti o vašem nastavení. Tuto chybu chceme v budoucnu opravit, ale potřebujeme co nejvíce

Více

Uživatelská příručka v češtině pro použití na Odorik.cz

Uživatelská příručka v češtině pro použití na Odorik.cz Přepojení naslepo i asistované přepojení má totiž společný postup a liší se jen tím, v kterém okamžiku zavěsíme. Postup je zpočátku stejný jako u přepojení naslepo. (viz výše) Pokud zavěsíme již bě...

Více

Tutorial 1 - Robotomie.cz

Tutorial 1 - Robotomie.cz maximální hodnotu 250. Model může být spuštěn s nula ovcemi nebo může běžet s dvě stě padesáti ovcemi nebo jakýmkoliv množstvím mezi těmito hodnotami. Vyzkoušejte to a uvidíte, co se stane. Při pos...

Více

Plavba, jež přepíše učebnice

Plavba, jež přepíše učebnice Celý let potrvá zhruba půl hodiny, během níž se dvoučlenná posádka na čtyři minuty ocitne ve stavu beztíže. Jsou tu i další „ale“: let se společností XCOR si může koupit kdokoliv za sto tisíc dolar...

Více

Czechspace 08 ke stažení

Czechspace 08 ke stažení PECS, podepsaná rovněž oficiálně Ministrem školství v listopadu 2004. Byly v ní vyjmenovány první projekty s českými pracovišti zodpovědnými za jejich řešení. Novým rysem v programu PECS bylo to, ž...

Více