Darwinovy pěnkavy (NetLogo)

Zadání
Název simulace:  Darwinovy pěnkavy

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

Autor:  Bc. Marek Bartoušek

Typ modelu: Multiagentní

Modelovací nástroj:  NetLogo

Definování tématu simulace
Tato simulace bude založena na práci Charlese Darwina a jeho pozorování evolučního vývoje a přizpůsobení se na dané prostředí galapágských pěnkav. Právě toto pozorování bylo zrodem původní myšlenky darwinovy evoluční teorie.

Souostroví Galapágy se nachází v Tichém oceánu přibližně 1000 km západně od Ekvádoru. Jed celkem o 18 sopečných ostrovů, které jsou zajímavé právě velkou rozdílností fauny a flory. Na jednotlivých ostrovech se nachází rozdílné druhy rostlin i živočichů, z nichž nejzajímavější jsou právě pěnkavy, které se nacházejí na všech ostrovech.

Postupem času se vyvynuly a přizpůsobily prostředí a potravě jednotlivých ostrovů, na kterých žijí. Nyní tak můžeme v rámci galapágských ostrovů pozorovat 4 druhy pěnkav a jejich výrazné evoluční odlišnosti. Nejvýraznější je bezpochyby velikost a tvar zobáku, který se přizpůsobil dostupné potravě (semínka, oříšky, malý létavý hmyz, větší pozemní hmyz). Velkou zajímavostí je, že tato evoluční změna proběhla oproti běžným evolučním procesům velmi rychle a již v intervalu jednoho roku je možné u pěnkav pozorovat minimální změny a přizpůsobení se prostředí.



Hlavním předmětem simulace by tedy bylo pozorování evolučního vývoje parametrů a postupně se rozvýjející míra odlišností z jednoho původního druhu pěnkav ve čtyři druhy současné.

Cíl simulace
Cílem simulace je vytvoření multiagentního prostoru, v němž bude možné pozorovat evoluční vývoj agentů simulace a zejména jejich určitých parametrů. Na základě pozorování by mělo být možné ověřit pozorování galapágských pěnkav Charlesem Darwinem.

Metoda
Jak již bylo uvedeno výše, jedná se multiagentní simulaci. Primárním úkolem bude simulovat správné prostředí, v němž se budou agenti pohybovat a z něhož budou získávat životně důležité zdroje. Dle klasické definice evolučního vývoje, agenti, kteří si nedokáží získat dostatek životně důležitých zdrojů uhynou a nebudou tak schopni předat své genetické informace dalším pokolením. Pro tento typ multiagentní simulace se bezpochyby hodí NetLogo, jelikož jeho funkce umožní výborně nastavit a řídit chování agentů a zcela nezávisle i jejich prostředí.

Model simulace
Model simulace je možné rozdělit do tří navazujících částí.

Inicializace simulace

 * Na úvod je potřeba nastavit simulované prostředí. Jako první krok tedy proběhne vytvoření 4 resortů, které reprezentují 4 resorty galapágských ostrovů. Rozdílnost resortů je dána převážně rozdílným dominantním druhem potravy v každém resortu.
 * Jako druhý krok se inicializují základní hodnoty globálních proměnných, které následně řídí simulované prostředí. Jedná se o určení základní úrodnosti jednotlivých resortů a citlivost evolučního vývoje. Tyto proměnné je možné i nadále během průběhu simulace ovlivňovat a pozorovat tak vliv jejich změn na populace pěnkav.
 * Třetí krokem je inicializace agentů pro všechny resorty. Pro každý resort, je potřeba inicializovat agenty zvlášť, aby bylo následně možné pozorovat jednotlivé druhy agentů samostatně.

Spuštění a průběh simulace

 * Simulace probýhá v jednotlivých kolech. Jedno kolo je rovno jednomu týdnu reálného času. V rámci jednoho kola se dějí následující události.
 * Správa zásob jídla - generování nových jednotek, postaršení existujících a odstranění prošlých (jednotlivé typy jídla mají svou reálnou trvanlivost)
 * Životní cyklus pěnkav - hledání potravy, pohyb, lov a jídlo, stárnutí, umírání, hledání partnera
 * Hnízdění a reprodukce - jednou ročně v určitých měsících

Pozorování a závěr simulace

 * V průběhu simulace je možné pozorovat vývoj jednotlivých druhů pěnkav, jednotlivých druhů potravy a další obecně informace. Je možné také průběh simulace ovlivňovat zásahem do počtů nově generovaných zdrojů jídla, což může například simulovat různé přírodní změny a nečekané kritické události.
 * Závěr simulace se hodnotí složitěji. Simulace jakožto evoluce nemá přirozený konec a její vývoj je možné pozorovat neomezenou dobu. Konec může nastat jen v případě, že některý z druhů pěnkav díky nepříznivým vlivům prostředí kompletně vyhyne.

Finches (pěnkavy)
Hlavním pozorovaným agentem simulace jsou pěnkavy. Pěnkavy jsou obecně brány jako jeden typ agentů, který se na 4 druhy dělí pouze pomocí hodnoty klíčového identifikačního atributu. Atributy si můžeme rozdělit do několika skupin. První skupinou jsou dlouhodobé základní atributy, které se v průběhu simulace generují jen jednou, na začátku existence agenta. Druhá skupina jsou životní parametry, které se v průběhu života agenta stále vyvýjí a mění a jejich hodnoty jsou hlavní objektem pozorování. Třetí skupina jsou atributy pomocné, které agent obsahuje jen pro realizací určitých simulačních algoritmů a nejsou pro reálný život agenta či výsledky simulace podstatné a nereprezentují tak žádné reálné hodnoty.

atributy:
 * kind - základní atribut - Nabývá hodnoty 1 - 4 a reprezentuje druh, ke kterému agent/pěnkava patří. V každém resortu souostroví se nachází pouze jeden druh pěnkav. Resorty jsou tak pro přehlednost také indexovány čísly odpovídajícímy číslům typu pěnkav na nich žijících.
 * gender - základní atribut - Pohlaví jednotlivých pěnkav. Pouze samice přivádí na svět potomky a předávají jim nejvíce ze svých genetických informací (atributů). Naopak pouze samci se účastní fáze námluv a hledají si své životní partnerky.
 * pace - základní atribut - Pohyblivost, rychlost, jakou jsou pěnkavy schopné se pohybovat.


 * max-age - pomocný atribut - Obsahuje informaci o maximálním možném věku každé pěnkavy. Tento atribut je náhodně generován. Průměrný maximální věk pěnkav je 10 let. Hodnota parametru je uchovávána v týdnech a je generována náhodným poissonovým rozdělením - random-poisson 520.
 * just-born - pomocný atribut - Atribut obsahují informaci o stavu právě narozených pěnkav. Jeho základní hodnota je 0 a hned při prvním nastavování agenta (setup a alokace) je tato hodnota nastavována na true. To je mimo jiné jedinná chvíle, kdy je tento atribut používán a díky tomu se vždy nové atributy generují pouze novým agentům. Při stárnutí pěnkav se dále tento atribut nastavuje na hodnotu false, ale ani tak již nemá další využití.
 * nested-this-year - pomocný atribut - Jeho hodnota udává, zda se tento agent již letos reprodukoval. Pokud již reprodukce proběhla, atribut má hodnotu true a čeká do dalšího roku(ledna) na opětovné nastavení hodnoty na false. S toutou hodnotou je poté agent opět připraven na reprodukci.


 * age - životní atribut - Udává aktuální věk agenta v týdnech. Tento atribut je inkrementován každé kolo právě o jedna nehledě na další okolnosti. Pokud je jeho hodnota větší než hodnota atributu max-age, agent umírá stářím. Pro možnost rozmnožování musí pěnkava dosáhnout věku přibližně dvou let (90 týdnů).
 * stamina - životní atribut - Životní energie agenta. Stamina je spotřebovávána pohybem a obnovována jídlem. Pokud je tento atribut roven nule, agent není schopen pohybu, lovu ani žádných jiných aktivit a umírá vyčerpáním. Pozorováním hodnot tohoto parametru je možné hodnotit aktuální "zdravotní stav" pěnkav.
 * partner - životní atribut - Obsahuje odkaz na jiného agenta opačného pohlaví. Tento parametr je nastavován ve fázi námluv, kdy nezadaní samci hledají samičky svého druhu ve svém okolí. Partner u pěnkav je životní. Každá pěnkava má vždy právě jednoho partnera a nového partnera si pěnkavy hledají pouze ve chvíli, kdy ten starý zemře.
 * to-hunt - životní atribut - Pěnkavy si vyhlédnou kořist a tu sledují a snaží se ji sníst či ulovit. Tato proměnná ovlivňuje směr pohybu pěnkav. Může se stát, že pěnkava nebude schopná kořist sníst a tak ji v tu chvíli nechá být a najde si jinou. Stejně tak může být kořist ulovena jinou pěnkavou dříve, než se k ní stihne původní pěnkava dostat. Kořist je pro stravování pěnkav důležitá. Každý druh pěnkav preferuje jiný druh potravy a pokud pěnkava jí svou kořist, v rámci simulace se jedná o trénink a pěnkava si tak vylepšuje své parametry, které k ulovení kořisti potřebovala.
 * beak-length - životní atribut - Délka zobáku je klíčový atribut pro předmět simulace. Jeho hodnota ovlivňuje pohyblivost a sílu zobáku. Jelikož je u galapágských pěnkav možné pozorovat minimální vývojové změny již v rámci jednoho roku, mohou si pěnkavy pomocí tréninku (lovem či získáváním svého preferovaného druhu potravy) velmi mírně tento atribut uzpůsobovat. Uzpůsobení je ovlivněno náhodným generováním, nemusí se tedy povést. Hodnota parametru se pohybuje v reálných číslech (13 - 45 mm) měřených u všech čtyř typů galapágských pěnkav.
 * beak-height - životní atribut - Výška zobáku (bráno u hlavy) je klíčový atribut pro předmět simulace. Jeho hodnota ovlivňuje pohyblivost a sílu zobáku. Jelikož je u galapágských pěnkav možné pozorovat minimální vývojové změny již v rámci jednoho roku, mohou si pěnkavy pomocí tréninku (lovem či získáváním svého preferovaného druhu potravy) velmi mírně tento atribut uzpůsobovat. Uzpůsobení je ovlivněno náhodným generováním, nemusí se tedy povést. Hodnota parametru se pohybuje v reálných číslech (6 - 25 mm) měřených u všech čtyř typů galapágských pěnkav.
 * beak-width - životní atribut - Šířka zobáku (bráno u hlavy) je klíčový atribut pro předmět simulace. Jeho hodnota ovlivňuje pohyblivost a sílu zobáku. Jelikož je u galapágských pěnkav možné pozorovat minimální vývojové změny již v rámci jednoho roku, mohou si pěnkavy pomocí tréninku (lovem či získáváním svého preferovaného druhu potravy) velmi mírně tento atribut uzpůsobovat. Uzpůsobení je ovlivněno náhodným generováním, nemusí se tedy povést. Hodnota parametru se pohybuje v reálných číslech (6 - 20 mm) měřených u všech čtyř typů galapágských pěnkav.
 * beak-agility - životní atribut - Pohyblivost zobáku pěnkav je hlavní pozorovaný parametr. Určována je pomocí rovnice x = 100 - (délka + výška + šířka). To odráží fakt, že větší zobák je méně pohyblivý a zároveň je díky této rovnici atribut plně inverzí k atributu sílý zobáku (čím větší zobák, tím silnější). Díky tréninku a úpravě atributů je nemožné, aby součet délky, výšky a šířky přesáhl číslo 100 a tím se hodnota dostala do mínusu. Již při dosažení nereálných rozměrů si pěnkava není schopná zajistit dostatek potravy a umírá vyčerpáním = nerozmnožuje se. Dosažení nereálných rozměrů tak může být považováno za hříčku přírody či genetickou poruchu, která se místy objeví, ale nepřenáší se dál/není dědičná.
 * beak-power - životní atribut - Síla zobáku pěnkav je hlavní pozorovaný parametr. Určována je pomocí rovnice x = délka + výška + šířka. To odráží fakt, že větší zobák je silnější a zároveň je díky této rovnici atribut plně inverzí k atributu pohyblivosti zobáku (čím větší zobák, tím méně pohyblivý). Díky tréninku a úpravě atributů je nemožné, aby součet délky, výšky a šířky přesáhl číslo 100 a tím hodnota narušila běh simulace. Již při dosažení nereálných rozměrů si pěnkava není schopná zajistit dostatek potravy a umírá vyčerpáním = nerozmnožuje se. Dosažení nereálných rozměrů tak i v tomto případě může být považováno za hříčku přírody či genetickou poruchu, která se místy objeví, ale nepřenáší se dál/není dědičná.

Seeds (semínka)
Zdroj potravy. Hlavní zdroj potravy v prvním resortu ostrovů. Pro příjem tohoto typu potravy je potřeba, aby zobák pěnkav dosahoval pohyblivosti alespoň 25 a síly alespoň 10. Tento typ potravy se běžně nepohybuje. Zároveň není chráněn žádnou pevnou slupkou a pro jeho získání tak není potřeba žádné velké síly. Semínka naopak často bývají zapadlá v menších prostorech a prasklinách, mezi kamínky nebo je potřeba je vyhrabávat ze země, a proto je potřeba k jejich získání úměrná střední hodnota pohyblivosti zobáku.

atributy:
 * new - Atribut uchovávající hodnotu true nebo false. Značí, zda je tento druh potravy v simulovaném prostoru nově zrozený a zda mu mají být nastaveny potřebné parametry, nebo zda již existuje delší dobu.
 * age - Atribut uchovávající informaci o věku jednotky potravy reprezentované agentem. Základní jednotkou věku je jedno kolo simulace - týden. Pokud je hodnota tohoto atributu vyšší než hodnota atributu max-age, končí jeho životnost a agent zaniká.
 * max-age - Pomocný atribut informující o maximální možné životnosti daného agenta. V případě semínek se jedná o hodnotu generovanou náhodným poissonovým rozdělením - random-poisson 200.

Nuts (oříšky)
Zdroj potravy. Hlavní zdroj potravy ve druhém resortu ostrovů. Pro příjem tohoto typu potravy je potřeba, aby zobák pěnkav dosahoval pohyblivosti alespoň 10 a síly alespoň 65. Tento typ potravy se běžně nepohybuje. Je ovšem většinou chráněn velmi pevnou slupkou a pro jeho získání je potřeba poměrně velké síly. Oříšky se naopak povalují téměř všude na zemi a jsou dobře dostupné. Pro jejich získání tak není potřeba žádné výrazné pohyblivosti.

atributy:
 * new - Atribut uchovávající hodnotu true nebo false. Značí, zda je tento druh potravy v simulovaném prostoru nově zrozený a zda mu mají být nastaveny potřebné parametry, nebo zda již existuje delší dobu.
 * age - Atribut uchovávající informaci o věku jednotky potravy reprezentované agentem. Základní jednotkou věku je jedno kolo simulace - týden. Pokud je hodnota tohoto atributu vyšší než hodnota atributu max-age, končí jeho životnost a agent zaniká.
 * max-age - Pomocný atribut informující o maximální možné životnosti daného agenta. V případě semínek se jedná o hodnotu generovanou náhodným poissonovým rozdělením - random-poisson 140.

Flying insect (malý létavý hmyz)
Zdroj potravy. Hlavní zdroj potravy ve třetím resortu ostrovů. Pro příjem tohoto typu potravy je potřeba, aby zobák pěnkav dosahoval pohyblivosti alespoň 60 a síly alespoň 10. Tento typ potravy se běžně pohybuje, ve vzduchu velmi dobře manévruje. Podle velikosti může jeho rychlost pohybu dosahovat téměř i rychlosti pohybu poamlejších pěnkav. Díky svým drobným rozměrům je létavý hmyz velmi křehký a k jeho požití není potřeba žádné velké síly zobáku. Naopak díky pohyblivosti a manévrování je k jeho získání potřeba poměrně vysoké hodnoty pohyblivosti zobáku.

atributy:
 * new - Atribut uchovávající hodnotu true nebo false. Značí, zda je tento druh potravy v simulovaném prostoru nově zrozený a zda mu mají být nastaveny potřebné parametry, nebo zda již existuje delší dobu.
 * age - Atribut uchovávající informaci o věku jednotky potravy reprezentované agentem. Základní jednotkou věku je jedno kolo simulace - týden. Pokud je hodnota tohoto atributu vyšší než hodnota atributu max-age, končí jeho životnost a agent zaniká.
 * max-age - Pomocný atribut informující o maximální možné životnosti daného agenta. V případě semínek se jedná o hodnotu generovanou náhodným poissonovým rozdělením - random-poisson 70.

Land insect (větší pozemní hmyz)
Zdroj potravy. Hlavní zdroj potravy ve čtvrtém resortu ostrovů. Pro příjem tohoto typu potravy je potřeba, aby zobák pěnkav dosahoval pohyblivosti alespoň 35 a síly alespoň 45. Tento typ potravy se běžně pohybuje po zemi. Jeho rychlost nikdy nedosahuje rychlosti žádných pěnkav, je vždy pomalejší. Pozemní hmyz je o trochu větší, než létavý a většinou má navíc i další ochranné prvky, jako například krovky. Proto je k jeho ulovaní potřeba vyšší síly. Stejně tak jeho efektivní pohyb po zemi a tendence schovávat se před lovcem klade nároky i na vyšší pohyblivost zobáku pěnkav.

atributy:
 * new - Atribut uchovávající hodnotu true nebo false. Značí, zda je tento druh potravy v simulovaném prostoru nově zrozený a zda mu mají být nastaveny potřebné parametry, nebo zda již existuje delší dobu.
 * age - Atribut uchovávající informaci o věku jednotky potravy reprezentované agentem. Základní jednotkou věku je jedno kolo simulace - týden. Pokud je hodnota tohoto atributu vyšší než hodnota atributu max-age, končí jeho životnost a agent zaniká.
 * max-age - Pomocný atribut informující o maximální možné životnosti daného agenta. V případě semínek se jedná o hodnotu generovanou náhodným poissonovým rozdělením - random-poisson 60.

Procedury
Jednotlivé procedury jsou seřazeny v pořadí, v jakém jsou prováděny během simulace. Procedury můžeme logicky rozdělit na dva typy. Nastavovací a simulační. Zatímco nastavovací procedury probýhají pouze jednou na začástku simulace, simulační se opakují v každém kole simulace.
 * setup-islands - nastavovací - Základní procedura, která nastavuje barvu políček prostoru na hnědou a vytvoří modré předěly mezi resorty. Totu barevnost následně využívají pěnkavy při pohybu, jelikož nejsou schopny cestovat mezi resorty.
 * setup-finches - nastavovací - Proceduraje volána s parametry kind a amount. Defaultně je amount nastaven na 20. Tím se vytvoří 20 pěnkav s náhodně generovanými parametry. Jejich umístěný závisí na parametru kind, který představuje druh pěnkav a zároven resort, kde budou pěnkavy "žít". Tato procedura se během nastavování simulace volá celkem čtyřikrát, pro každý druh pěnkav jednou. Vznikne nám tedy na úvod 80 agentů/pěnkav, dvacet od každého druhu a v každém resortu.
 * setup-defaults - nastavovací - Jednoduchá procedura nastavující defaultní hodnoty posuvníků a ovládacích prvků simulace. Nastavuje také tvary agentů.


 * birth-food-supply - simulační - Pro přehlednost kódu tato procedura obsahuje pouze 4 další "podprocedury" (birth-seeds, birth-nuts, birth-f-insects, birth-l-insects) a nemá žádnou samostatnou funkci. V uvedených "podprocedurách" se následně vždy generuje určitý počet zásob/agentů pro každý resort.
 * aging-food-supply - simulační - Stárnutí všech agentů představujících potravu. Všechny zdroje jsou postaršeny o jeden týden.
 * expire-food-supply - simulační - Tato procedura kontroluje, zda nějaký z agentů potravy (seeds, nuts, f-insects, l-insects) nepřekročil svou vlastní dobu epirace a nemá být odstraněn. Případně zdroj/agenta ihned odstraní. Simulační prostor se tak nezahltí nevyužitou potravou.
 * move-insects - simulační - Dva druhy agentů potravy se mohou také pohybovat (f-insects, l-insects). Jejich pohyb je prováděn právě v rámci této procedury, která jim generuje naprosto náhodný směr a pohyb o náhodnou vzdálenost (v intervalu závislém na rodu agenta) v daném směru.
 * move-finch - simulační - Procedura pohybu pěnkav. Tato procedura kontroluje všechny pěnkavy, zda jejich stamina je vyšší než 0. Pokud není, pěnkava umírá. Pokud je vyšší, pěnkava se pohne ve směru své kořisti (to-hunt). Pokud pěnkava nemá kořist, pokusí se ve svém dohledu nějakou najít a až následně se pohnout v jejím směru. Pokud se pěnkavě nepodaří ádnou koříst najít, pohne se zcela náhodně (pěnkavy hledají a cestují, nechtějí zůstat na jednom neúrodném místě). Pohyb stojí pěnkavy právě 1 staminu.
 * eat-hunt - simulační - Pokud je pěnkava v operační vzdálenosti, loví svou koříst (získává potravu). Tato procedura kontroluje dostupnost kořisti. Pokud je kořist dostupná, pěnkava se ji pokusí ulovit/získat (a tím si vylepšit atributy zobáku) a tím si doplnit staminu. Pokud je kořist stále daleko či se jí nepodaří ulovit/získat (například příliš tvrdá skořápka ořechu), ohlédne se pěnkava po svém operačním okolí a zkusí ulovit/získat jiný, náhodný zdroj potravy (jedná už se o zoufalý akt a pěnkava z něho nemá žádný další užitek, kromě doplnění staminy). Jelikož trávicí ústrojí pěnkav se přizpůsobuje jejich potravě, získání a spotřebování agenta potravy pěnkavám doplňuje vždy právě 1 bod staminy.
 * aging-finches - simulační - Všechny pěnkavy jsou postaršeny o 1 týden. Během této procedury se první týden v roce kontroluje a nuluje hodnota parametru nested-this-year.
 * die-finches - simulační - Procedura kontroluje všechny pěnkavy a ty, jejichž age převyšuje max-age umírají stářím. U této procedury je důležité vynulování parametrů partner, jelikož přeživší pěnkavy si mohou najít nového partnera.
 * look-for-partner - simulační - Procedura, během níž si samci pěnkav hledají samičky. Během této procedury se nastavuje parametr partner, který je neměnný právě do konce života jednoho z partnerů.
 * nest-finches - simulační - Hlavní procedura evolučního vývoje pěnkav. Během této fáze pěnkavy hnízdí a pěnkavy, které mají partnera, přivádí na svět své potomky. Pěnkavy běžně mají ročně max 4 mláďata. Svým mláďatům poté předají část svých genetických informací (atributy zobáku). Tyto informace jsou ještě ovlivněny globální proměnnou evolution-tenderness. Citlivost evoluce udává rychlost, s jakou se evoluční změny projevují z generace na generaci pěnkav.

Základní nastavení simulovaného prostředí
Defaultní nastavení simulace se provádí vždy automaticky v proceduře setup-defaults po stisknutí tlačítka setup. Ovladače (posuvníky) sloužili převážně pro odladění citlivosti celé simulace a jejich defaultní hodnota by se měla měnit pouze s jasným záměrem pozorovýní jistých změn. Nastavují se totiž hodnoty (maximální hodnoty intervalu) pro generování nových zdrojů (v každém resortu se pravidelně generuje jeden dominantní a tři podpůrné druhy potravy) a evoluční citlivost.

Ovladače simulace
Na obrázku je vidět ovládací panel simulace. Vzhledem k cíly simulace (viz výše) tento panel obsahuje malé množství ovládacích prvků.


 * tlačítko setup - Základní ovládací prvek. Simulace by měla začít stiskem tohoto tlačítka. stiskem se připraví základní rozložení simulačního prostoru (procedura setup-islands), iniciují se první agenti simulace (procedura setup-finches) a nastaví se defaultní hodnoty ostatních ovládacích prvků (procedura setup-defaults).
 * talčítko go - Tlačítko s funkcí spínače. Po jeho stisknutí se spustí jeho efekt, který se opakuje ve smyčce dokud není tlačítko znovu stisknuto. Efekt tlačítka je 1 cyklus simulace (1 týden)(volány jsou postupně všechny procedury, které neobsahují v názvu slovo "setup").
 * posuvník dominant-food-supply - Hodnota posuvníku je v modelu simulace uchovávána jako globální proměnná. Určuje horní mez intervalu pro počet nově generovaných agentů dominantního zdroje potravy pro každý resort.
 * posuvník supporting-food-supply - Hodnota posuvníku je v modelu simulace uchovávána jako globální proměnná. Určuje horní mez intervalu pro počet nově generovaných agentů tří podpůrných zdrojů potravy pro každý resort.
 * posuvník evolution-tenderness - Hodnota posuvníku je v modelu simulace uchovávána jako globální proměnná. Určuje hodnotu citlivosti evoluce, která je využívána v proceduře nest-finches při předávání genetických informací z rodičů na potomky.

Monitory a grafy (ploty)

 * Základní sada monitorů obsahující obecné informace (počet uplynulých let, počet úmrtí, úmrtnost pěnkav za rok, počet pěnkav, počet samců a počet samic).
 * Plot a několik měnších monitorů informujících o základním rozložení jednotlivých druhů pěnkav. Plot zobrazuje kontinuální graf s počty jednotlivých druhů pěnkav, monitory následně ukazují přesné číslo pro počet pěnkav, počet samic a počet samců pro každý druh pěnkav zvlášť. (formát popisku monitoru je následující: druh - pohlaví)
 * Další sekce obsahuje dva ploty a několik menších monitorů, které přinášejí podrobné informace o stavu potravy v celém simulačním prostředí. První plot zobrazuje kontinuální graf jednotlivých druhů potravy, monitory vedle něho pak informují o přesných aktuálních počtech. V pravé části jsou monitory, které přinášejí informace o využití všech vygenerovaných druhů potravy. Hhodnotí se zde zejména poměr využité a prošlé potravy, což přehledně zobrazuje i plot pomocí kontinuálního grafu.
 * Dalším oddíl se zabývá ukazatelem stamina, jakožto obrazu obecného zdraví pěnkav. Plot zobrazuje kontinuální graf průměrné hodnoty staminy, monitory pak zobrazují aktuální přesnou minimální, průměrnou a maximální hodnotu staminy.
 * Podélný pás u spodu uživatelského rozhraní přináší detailní informace o pozorovaných atributech jednotlivých druhů pěnkav. Dá se rozdělit na 4 bloky, přičemž každý blok obsahuje informace o jednom druhu pěnkav. Nachází se zde monitory s aktulními minimálními, průměrnými a maximálními hodnotami pohyblivosti a síly zobáků pěnkav v rámci celého druhu. Data jsou poté i reprezentována průběžně pomocí kontinuálního grafu na plotu.
 * Levá část uživatelského rozhraní je vyhrazena pro dva ploty, které obsahují pro porovnání kontinuální grafy všech druhů pěnkav. Ploty jsou zaměřeny na pohyblivost a sílu zobáků jednotlivých druhů pěnkav.
 * Grafický průběh simulačního modelu a chování agentů. Plátno rozdělené na 4 resorty očíslované pomocí čísel druhů pěnkav, které se na nich nachází.

Definice problému
Hlavní problémem simulace je prokázání teorie přirozené evoluce galapágských pěnkav na základě jejich snahy přizpůsobit se svému postředí. Nejobtížnější je najít způsob, jakým by se evoluční vývoj dal monitorovat a pozorovat. Společně s tím je velmi obtížné připravit prostředí, které by bylo dostatečně proměnlivé a nutilo pěnkavy/agenty se dlouhodobě přizpůsobovat bez razantního jednorázového vyhynutí.

Postup
Prostředí, ve kterém pěnkavy žijí je velmi proměnlivé a to ovlivňuje zejména jejich potravu. Ta se liší resort od resortu a pěnkavy musí být dostatečně schopné se dané potravě přizpůsobit - konkrétně jejich trávicí ústrojí by mělo být schopné příjmu daných typů potravy. Simulace tedy pracuje právě s evolucí parametrů zobáku. Pro potřeby této simulace a určité zjednodušení problému byly zanedbány aspekty zobáku, jako jsou přesný tvar, ergonometrie, zakřivení, ostrost apod. Naopak jsem se detailně zaměřil na sílu a pohyblivost, jakožto dva přímo neúměrné parametry zobáku. Ty přímo vyplývají z rozměrů zobáku, které byly pro potřeby této simulace rovněž dostatečně zjednodušeny na délku, výšku (u hlavy) a šířku (u hlavy). Reálné rozměry vycházejí ze studie "Evolution of Darwin's Finches Caused by a Rare Climatic Event", auth. B. Rosemary Grant a Peter R. Grant. Transformace rozměrů do pohyblivosti a síly poté probýhá pomocí jednoduchých rovnic (pohyblivost: x = 100 - (délka + výška + šířka); síla: x = délka + výška + šířka). Vzhledem k tomu, že oba parametry jsou dokonale přímo neúměrné a pro příjem potravy je vždy zapotřebí kombinace alespoň minimálních hodnot obou dvou, nemůže dojít ke vzniku "super pěnkavy", která by si vybudovala oba parametry na maximální hodnoty a byla přírodou "neohrozitelná".

Můžeme tak snadno pracovat s rozměry zobáků, které se v podobě parametru dají snadno předat z rodičů na potomky. V této chvíli ještě zasahuje evoluční citlivost, kdy se předávané hodnoty upraví náhodným faktorem. Může tak dojít k jejich zlepšení ale i ke zhoršení, což je běžný genetický průběh. Rod pěnkav se stále se zhoršujícími parametry tedy časem přestane dosahovat parametrů potřebných po zajištění potravy a poměrně rychle vyhyne. V zásadě dle definice evoluce tak přežijí pouze nejsilnější. Nejsilnější v tomto případě neznamená nadprůměrně vyvynutí pouze v jednom parametru. Jak již bylo uvedeno výše, je potřeba správné kombinace obou parametrů a tak stejně jako podprůměrné a zhoršující se rody pěnkav, i tyto jednostranně "obdařené" rody postupem času vyhynou.

Díky určité toleranci a rozptylu tak na závěr vznikají přírodně "čisté", ale přesto velmi bohatě rozmanité druhy pěnkav. Stejně jako v reálném případě v přírodě.

Měřené výsledky

 * Obecný screenshot celé plochy v průběhu simulace. V rámci projektu a jisté kvality naměřených hodnot jsem si stanovil cíl nechat běžet simulaci minimálně 100 let a až poté se věnovat jejím hodnotám.
 * Jak je vidět z následujícího detailu, hodnocení se tedy budu věnovat po 104 letech běhu simulačního modelu. V danou chvíli existuje 208 pěnkav, což je více než dvojnásobek oproti počátečnímu stavu. Rozdělení pohlaví je stále poměrně symetrické 114 samců a 94 samiček. Genetické informace si předalo přibližně 6884 již vyhynulých předků. Poměr počet úmrtí za rok se postupem času výrazně snížil (krátce po spuštění nabýval hodnot před 90) a jeho tendence je stále klesat, i když rychlost klesání se stále stabilizuje.
 * Pokud se blíže zaměříme na jednotlivé druhy pěnkav, můžeme si všimnout, že se poměrně dobře daří všem druhům (52, 41, 64, 51). Žádný z druhů tak není ne pokraji vyhynutí a dokonale se přizpůsobil svému prostředí. Mírný úbytek se dá očekávat u pěnkav druhu 1, jelikož mají výrazně více samců. Naopak u druhů 3 a 4 jsou čísla hezky souměrná a tyto druhy čeká v následujících letech jistě ještě navýšení počtů. V tomto stavu je pro počty pěnkav ohrožující pouze množství dostupné potravy. Ve vysokém počtu pěnkav mají zdroje tendenci docházet o něco dříve a slabší jedinci mohou začít umírat hlady. Z uvedeného grafu je tato tendence jasně viditelná právě u pěnkav druhu 1, který má jako dominantní a preferovanou potravu semínka. Jedná se o potravu, která není nijak zvlášť omezena parametry a tak se pěnkavy druhu 1 rychle množí. I když semínek je obvykle více než ostatních druhů potravy, brzy pro dané množství pěnkav dojdou a pěnkavy tak začnou vymírat, jelikož všechny nejsou dostatečně schopné příjmat i jiné druhy potravy. Naopak menší rozkmit je vidět u pěnkav se specifickým dominantním zdrojem potravy - pěnkavy druhu 3 a 4.
 * Následující grafy nám ukazují průběh množství dostupné potravy. Aktuálně je všech zdrojů dostatek, i když semínka jsou již značně redukována. Historicky je z grafu jasné, jak jsou jednotlivé druhy potravy konzumovány v závislosti na množství pěnkav. To potvrzuje největší výkyvy u pěnkav druhu 1.
 * Zajímavým zpestřením je pozorování využité (snězené) a nevyužité (prošlé) potravy. Množství obou hodnot stále kumulativně narůstá ale poměr obou hodnot se nastěstí stále zlepšuje. V současném stavu máme na jednu prošlou jednotku potravy 1,993 jednotek snězených. Z kontinuálního grafu je vidět, že v minulosti byl tento poměr méně příznivý a jídlo více procházelo. Na počátku byl poměr pod hodnotou jedna (procházelo více jídla, než se stíhalo využít). Rychlost růstu tohoto poměru roste rychle a jeho tendence si udržuje přibližně konstantní rychlost. Dá se tedy očekávat, že v průběhu času se bude poměr stále zlepšovat (bude procházet stále méně jídla oproti množství jídla využitého).
 * Další zajímavou částí výsledků z probýhající simulace je náhled na staminu. Průměrná hodnota je 13, to je mnohem více než je základní hodnota - nová mláďata díky péči svých rodičů začínají na hodnotě 6 - 8. Pěnkavám se tedy z tohoto pohledu daří. O populaci pěnkav se zde dá spekulovat jako o dospívající, jelikož zde máme i úspěšné jedince se staminou 92, což v porovnání s průměrem napovídá tomu, že pěnkavy již nějakou dobu žijí a v daném počtu jsou i starší jedinci s takto vysokou staminou. Minimální hodnota staminy se běžně pohybuje v rozmezí 0 - 2, jelikož stále existují neúspěšní jedinci, kteří rychle umírají.
 * Blížíme se k závěru a proto je na čase se zaměřit na ty nejdůležitější hodnoty. Následující grafy poskytují přehled pohyblivosti a síly jednotlivých druhů pěnkav. Z dlouhodobého hlediska se jednotlivé hodnoty postupně stabilizují, i když měli poměrně prudký a neklidný start. Z grafů vyplývá, že hodnoty obou parametrů (pohyblivosti a síly) jsou vzájemně přímo neúměrné. zároveň ale pozorované hodnoty potvrzují na začátku definovanou teorii - pěnkavy se přizpůsobili svému prostředí. Dokazují to bez výjimky všechny druhy pěnkav, kdy v grafu pohyblivosti zobáku dominují pěnkavy druhu 3. Ty se živí malým létavým hmyzem a tak potřebují malý extra pohyblivý zobák. Naopak pěnkavy druhu 2, živící se oříšky, potřebují extra silný zobák, takže dominují v druhém grafu síly zobáku. Pěnkavy druhu 4 potřebují poměrně vyváené atributy zobáku (sílu i pohyblivost) a tak zaujímají poměrně vyrovnanou pozici uprostřed grafů. Jejich vývoj je sice nejstabilnější, ale zase se tento druh velmi liší jednotlvec od jednotlivce.
 * Výše rozebírané naměřené hodnoty a uváděné výsledky pozorování jasné dokládají i pozorování parametrů zobáků jednotlivých druhů pěnkav. Všechny 4 druhy začínaly na přibližně stejných hodnotách, ale vývoj jejich zobáků se velmi lišil na zákadě příjmané potravy. U druhu 2 (dominantní potrava jsou ořísky) je jasně vidět okamžitá preference síly nad pohyblivostí. Naopak u druhu 3 ( dominantní potravou je malý létavý hmyz) se preference těchto parametrů velmi rychle prohodila. Do vedení šla pohyblivost nad sílu. Druh 4 (dominantní potravou je pozemní hmyz) naopak obě hodnoty vyrovnal a využívá výhod středně silného i středně pohyblivého zobáku.

Závěr a hodnocení
Na závěr bych svou simulaci rád zhodnotil jako zdařilou. I přes velké obtíže při hledání toho správného směru a detailních zaměřeních se na jednotlivé části života a vývoje pěnkav považuji svou práci za úspěšnou a na základě dostatečné míry zjednodušení (nikoliv však na úkor reálných pozorování) se mi podařilo vytvořit simulační model, který věrohodně prezentuje potvrzení teorií pana Charlese Darwina založených na jeho pozorování galapágských pěnkav. I když se projekt zdál původně být méně náročným a ve výsledku sebral více než desetinásobek původně alokovaného času, jsem rád především za osvojení si práce s netlogem a jeho možnostmi a schopnost přemýšlet nad problémem z pohledu právě tohoto simulačního nástroje či z pohledy multiagentní simulace. Pohled a přístup netloga je velmi specifický a i když v dnešní době je procedurální programování dávno překonáno, těžko bych si dokázal zvolit jiný lepší plně objektový nástroj.

Možnosti rozšíření modelu
Tento model by se dal rozšířit o další možnosti a parametry, které ovlivňují buď samotné pěnkavy a jejich vývoj, nebo ovlivňují jen jejich zdroje potravy. Dle přirozené situace na galapágských ostrovech by se mělo jednat o počasí a další přírodní vlivy, které velmi silně ovlivňují množství dostupné potravy a její rozmanitost.

Další možností rozšíření modelu simulace by byl určitě i jiný přístup k danému prostředí. Galapágské ostrovy by se nechali více reálné a došlo by k odstranění resortů. Pěnkavy by se tak mohli pohybovat napříč celýmy ostrovy a při změně poměrů dostupné potravy by se měl vždy stát dominantní právě ten druh pěnkav, který danou potravu preferuje. V tomto přístupu by byl mnohem větší prostor pro ovlivnění vstupních a řídících parametrů celé simulace.

Přílohy a zdrojový kód
| Zdrojový kód simulace

| Balíček obsahující kompletní zdrojovou složku s projektem. Obsahuje kromě obrázků i jednotlivé menší projekty, na kterých byly laděny jednotlivé části modelu před jejich začlenněním do finálního projektu.

Zdroje
Všechny podklady a detailní informace byly čerpány z práce "Evolution of Darwin's Finches Caused by a Rare Climatic Event", auth. B. Rosemary Grant a Peter R. Grant.

Komentáře
--Xbarm96 (talk) 18:24, 7 June 2016 (CEST)

--Xbarm96 (talk) 01:43, 8 June 2016 (CEST)

--Xbarm96 (talk) 11:35, 8 June 2016 (CEST)