Prírodou inšpirované algoritmy

študijné materiály pre projekt mobilnej triedy umelej inteligencie

Späť ku kurzom triedy
Obsah
Úvod
Tutoriál
Download
Linky
O tejto kapitole



Ostatné kapitoly
Swarm
RePast
LEM
SDML
Eos
DDLab


Tutoriály
 Celulárne automaty
 Morfogenéza
 Simulátory
 Evolučné algoritmy
 Chaos
 Roboty
 Rôzne


Tutoriál

Tento jednoduchý tutorial, sa vám snaží priblížiť proces tvorby jednoduchej aplikácie pre systém LEM. Je to ukážka ako vytvoriť simuláciu lovu líšok na zajace. Tento tutoriál nemôže samozrejme ukazovať všetky možnosti programu LEM, ale ako základný kameň pre budovanie zložitejších simulácií.

  1. Začneme vytvoriením modelu ekosystému. Sú dve možnosti ako to urobiť. Môžeme ručne napísať modelový súbor a potom ho načítať pomocou menu Model | Load Model, alebo si časť modelu nechať vytvoriť pomocou programu a až jeho špecifické rysy dopísať ručne. V tomto prípade použite menu Model | New Template na vytvorenie novej šablóny modelu. Toto vytvorí len základnú kostru modelu. Model následne uložíme pomocou menu Model | Save Model do súboru, ktorý si sami určíme. Otvoríme tento model pomocou menu File | Open a ručne zeditujeme riadok ecosystem(25,13,20) napríklad na ecosystem(20, 20, 20). Teraz pomocou menu Model | Load Model znovunačítame model ekosystému. ďalej do súboru musíme ručne vložiť typ modelu. Súbor ručne zeditujeme a dopíšeme do neho potrebný term model_type(simple, linear).

  2. Pokračujeme vytvorením etho-agentov. Etho-agenti budú dvoch typov. Líšky a zajace. Vytvoríme si teda nový súbor pomocou príkazu File | New. Do tohto súboru napíšeme špecifikáciu etho-agenta. Napríklad term name("L") popisuje, že daný etho-agent sa nazýva "L", čo je skratka od Líška. Ďalší term schema(1,[state(1,"high")],act1("moverandom")) hovorí napríklad o tom, že ak je postavenie líšky "high", teda je nažraná, tak sa má môže postupovať hociktorým smerom. Prvé číslo označuje, poradové číslo pravidla a podľa toho sa aj pravidlá počas simulácie vyhodnocujú. Teda vždy keď bude líška nažraná, tak pôjde náhodným smerom. Ak to však nie je splnené, tak sa skúša splniť ďalší term schema(2,[obj(1,"Z")],act2("attack",1)), ktorý znamená, že ak sa v rovnakej bunke nachádza zajac, tak ho má uloviť, a ak tento nie ej splnený, tak sa má skúsiť splniť nasledovný atď. Po kompletnej špecifikácii súbor uložíme pomocou File | Save As.. do súboru s príponou "*.esp". Takto vytvoríme všetkých etho-agentov. Pomocou príkazu Model | Add | Ethospecie vložíme túto špecifikáciu do aktuálneho modelu.

  3. Treťou úlohou je vytvorenie súboru producentov a envo-agentov. V našom prípade to bude len jeden producent (Tráva), od ktorého sú závislí agenti typu Zajac. Špecifikácia tohto súboru je veľmi jednoduchá. producer_sp("T","T",65280,0.01,2000). Po vytvorení tohto súboru ho musíme vložiť do modelu pomocou príkazu Model | Add | Producer Specie.

  4. Najdôležitejšou úlohou je vytvorenie súboru pravidiel. Znovu si vytvoríme, pomocou príkazu File | New, nový súbor a do tohto napíšeme špecifikáciu tabuľky pravidiel. špecifikáciu tohto súboru nájdete v súbore pomocníka. Vytvorenie tohto súboru je najdôležitejšou časťou tvorby nového modelu. Tabuľka obsahuje term species([["Z","L"],["T"],[]]), ktorý vlastne len hovorí akých máme v prostredí všetkých možných agentov. Sú zapísaní vo forme zoznamov. Tieto zoznamy sú tri. Prvý pre etho-agentov, druhý pre producentov a tretí pre envo-agentov. Oveľa dôležitejšie termy sú však termy ako napríklad rule([obj(2,"T"),action(1,"Z",act2("eat",2))],s([re(1,income(20)),re(2,loss(20))])), ktorý hovorí, že ak došlo k interakcii medzi zajacom a trávou, tak zajacovi pribudne 20 jednotiek energie a tráve odbudne 20. Podobne sú zapísané aj ostatné termy. Správne napísaná tabuľka práv má veľký vplyv na správanie ekosystému. Pri zle navrhnutej tabuľke pravidiel sa nám môže systém správať neštandartne, a niekedy je v tomto prípade radšej zvoliť cestu opätovného napísania tohto súboru, ako jeho opravy. Napísanú tabuľku práv do projektu vložíme pomocou príkazu menu Model | Add | The Law.

  5. Týmto by sme mali napísané všetky špecifikácie a program za nás do modelu pridal aj prepojenia na vytvorené súbory. Po každej zmene akéhokoľvek špecifikačného súboru je nutné znovunačítať model pomocou príkazu Model | Reload Model, ktorý sa dá vyvolať aj priamo z lišty s tlačidlami. Teraz musíme do modelu postupne pridať všetkých agentov, ktorých sme si v predchádzajúcich krokoch špecifikovali. Pridávanie jednotlivých agentov sa robí pomocou programu a to tak, že vyberieme z menu Introduce položku Ethoagent pre výber etho-agenta, ktorého chceme vložiť do modelu, Producer pre vloženie producenta a Envoagent pre vloženie envo-agenta do modelu. Potom ľavým tlačidlom myši kliknite na miesto kam chcete vložiť a program ho tam vloží. Uloženie vložených agentov sa robí pomocou menu Model | Save Agents.

    V našom prípade sme producentov vložili do modelu nasledovne

    Vloženie producentov
    Vloženie producentov

    etho-agentov typu Zajac sme vložili takto

    Vloženie etho-agentov typu Zajac
    Vloženie etho-agentov typu Zajac

    a etho-agentov typu Líška sme vložili nakoniec

    Vloženie etho-agentov typu Líška
    Vloženie etho-agentov typu Líška
  6. Teraz už môžeme pristúpiť k simulácii. Simuláciu môžeme spustiť z menu alebo z lišty tlačidiel pomocou príkazu Run | Run pre neobmedzený chod simulácie, až kým ju nezastavíme. Run | Step 1, Run | Step 10 a Run | Step 100 pre spustenie určitého počtu krokov v simulácii. Počet krokov sa počíta od 0 vrátane. V našom prípade som urobil simuláciu aj ja a ponúkam niekoľko obrázkov z nej pre ilustráciu.

    Po 10 krokoch
    Po 10 krokoch
    Po 20 krokoch
    Po 20 krokoch
    Po 30 krokoch
    Po 30 krokoch
    Po 40 krokoch
    Po 40 krokoch
    Po 50 krokoch
    Po 50 krokoch
    Po 100 krokoch
    Po 100 krokoch
    Po 200 krokoch
    Po 200 krokoch
  7. Počas simulácie nám pomáha databáza. Voľbu, či databázu používať alebo nie, si musíme zvoliť ešte pred samotnou simuláciou. Databázu zapneme pomocou príkazu Model | Start DataBase. Po tomto nás program vyzve, aby sme zadali kde chceme vytvoriť databázu, či v pamäti RAM, alebo na disku počítača. Databáza vytvorená v pamäti je rýchlejšia, ale keďže databáza môže byť veľmi obsiahla, tak aj rýchlejšie vyčerpateľná. Databáza v súbore je síce o niečo pomalšia, ale na disku je predsa viac priestoru ako v pamäti RAM a tak môže uchovávať aj väčšie množstvo údajov. Pri použití databázi graf vývoja populácie je nasledovný:

    Graf vývoja populácie
    Graf vývoja populácie

    Z grafu môžeme vidieť niekoľko zaujímavých vecí. Na začiatku bolo v modeli rovnaký počet líšok ako aj zajacov (10). Asi po 25 krok v simulácii sa v modeli udržiaval rovnaký počet zajacov ako aj líšok. Keďže sa však zajace rýchlejšie rozmnožujú ako líšky ich nárast bol rýchlejší. Zajace však začali migrovať smerom od líšok, načo líšky patrične nezareagovali a ostali na svojom pôvodnom mieste. Zajace sa tým začali viac množiť, pretože neboli lovené líškami, ktoré sa nedostávali na miesta, kde sa nachádzali aj zajace. Líšky sa tiež rozmnožovali, kým mali na tento úkon energiu. Avšak ich energia stále klesala a nevedeli sa dostať do blízkosti zajacov. Tým začal ich počet klesať a začali vymierať. Niekedy sa stane, že líšky dostanú druhý dych, ale to by sa museli dostať do blízkosti zajacov. V našom prípade sa to však nestalo a líšky vyhynuli. Jedna líška sa však udržala a dostala sa do blízkosti zajacov. Ale samotná líška sa nemôže rozmnožiť a tak aj tá po čase vyhynula. Potom už nárast počtu zajacov bol exponenciálny. Tento trend by sa zachoval a počet zajacov by neúmerne rástol. Zajace by časom začali spotrebovávať trávu, ktorá by nestačila dorastať a ich stav by sa znižoval, až by vyhynuli aj oni.

Hore
Kontakt: Marek Bundzel