A. Užívateľská príručka

A.1 Požiadavky simulátora

Vzhľadom k skutočnosti, že simulátor správania sa spoločensky žijúceho hmyzu je implementovaný v prostredí SWARMu, je nutné mať nainštalovaný SWARM 1.4.1 a vyššie.

A.2 Ovládanie simulátora

Ovládanie simulátora je realizované Control Panelom swarmovského prostredia. Po spustení programu, sa nám ponúknu 2 okná, a to Observer a Model. Taktiež sa objaví ConrolPanel, pomocou ktorého sa ovláda celý chod simulátora.

Okno Observera

Okno Observer slúži na nastavenie frekvencie zobrazovania jednotlivých krokov simulácie. Defaultná hodnota je nastavená na 1, t.j. každý krok simulácie sa zobrazí. Túto hodnotu možno meniť v prípade, keď chceme priebeh simulácie urýchliť. Ak nastavíme hodnotu napr. na 10, zobrazí sa každý desiaty krok simulácie.

Okno Model

Okno Model požaduje od nás vloženie mena súboru, v ktorom sú dôležité informácie pre simulátor. Pomocou tohto súboru sa vymodeluje scéna a taktiež agenti simulácie. Tento súbor môže užívateľ editovať a tak meniť východzie podmienky simulátora. Podrobným popisom syntaxe v tomto súbore sa zaoberá nasledujúca kapitola. Predvolená hodnota tohto okna je súbor "default.sce", ktorý sa priložený pri zdrojovom kóde simulátora.

ControlPanel

Pri spustení sa taktiež objaví ContorlPanel, pomocou ktorého sa ovláda celý chod simulátora. Tlačidlo "Start" slúži na spustenie simulátora. Beh simulátora sa zastaví tlačidlom "Stop". Ak chceme simuláciu krokovať, budeme používať tlačidlo "Next". Tlačidlo "Save" nie je v tomto simulátore aktívne. Na ukončenie behu simulátora sa použije tlačidlo "Quit".

Poznámka: Ak dosadíme nejakú hodnotu do niektorého z okien, treba ju potvrdiť klávesou Enter.


A.3 Súbor "*.sce"

Súbor typu "*.sce" obsahuje popis scény prostredia, t.j. rozmiestnenie objektov ako jedlo, prekážky, hniezdo.

Sekcia Model

Súbor sa skladá z troch sekcií. Prvou sekciou je sekcia Model. V tejto sekcii sa definuje veľkosť prostredia a vlastnosti feromónov definovaním ich konštánt.


Kľúčové slová sekcie Model:

WorldSize X Y - nastaví veľkosť prostredia, pričom X je horizontálna veľkosť a Y vertikálna.
evap0 X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta vypŕchania feromónu0.
evap1 X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta vypŕchania feromónu1.
evap2 X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta vypŕchania feromónu2.
evapF X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta vypŕchania vône jedla.
diff0 X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta difúzie feromónu 0.
diff1 X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta difúzie feromónu 1.
diff2 X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta difúzie feromónu 2.
diffF X - X je reálne číslo z intervalu < 0, 1>. Nastaví sa konštanta difúzie vône jedla.
Model - začne sa načítavať zo sekcie Model.
ModelEnd - ukončí sa sekcia Model.

V prípade nevloženia hodnôt užívateľom, použijú sa hodnoty predvolené a to: diff0 = 0.05, diff1= 0.05, diff2 = 0.05, diffF = 0.6, evap0 = 0.99, evap1 = 0.99, evap2 = 0.99, evapF = 0.95.


Príklad:
Model
    WorldSize 100 100
    evap1 0.95
    diff1 0.01
EndModel

Veľkosť arény sa nastaví na rozmer 100x100 buniek. Konštanty pre feromón 1 sa nastavia na hodnoty vypŕchanie 0,95 a difúzia 0,01.

Sekcia Scene

Táto časť súboru slúži na popis scény arény, t.j. popis o rozmiestnení objektov ako jedlo, prekážka a pod. v aréne.
Táto sekcia má nasledujúce kľúčové slová:
Food - vloží objekt jedlo.
Obstacle - vloží prekážku do arény.
Space - zmaže časť arény.
Nest - vloží hniezdo.
Pheromone0 - zakreslí feromón 0.
Pheromone1 - zakreslí feromón 1.
Pheromone2 - zakreslí feromón 2.
Circle X Y R - nakreslený objekt je tvaru kruhu, stred je na pozícii X,Y a polomer je R.
Square X Y A - objekt má tvar štvorca, so stredom na X,Y a so stranou A.
Rectangle X Y A B - obĺžnikový objekt so stredom na pozícii X,Y, dĺžka strán A a B.
Point X Y - bod so súradnicami X,Y.
VLine X Y1 Y2 I1 I2 - vertikálna čiara, X je x-ová súradnica, Y1 y-ová súradnica začiatku čiary, Y2 koniec čiary, I1 počiatočná intenzita, I2 koncová intenzita. Intenzita je z intervalu <0, 32768>. VLine sa používa na vytváranie feromónových cestičiek. Nakreslí sa feromonová čiara .
HLine X1 X2 Y I1 I2 - obdoba Vline, avšak nakreslí sa horizontálna čiara.
Scene - informuje, že sa začína vytvárať scéna arény.
EndScene - ukončenie sekcie Scene.

Objekt je v tejto sekcii popísaný takto:

Typ objektu    Tvar objektu    Parametre pre tvar objektu


Príklad.
Scene
    Obstacle Square 50 50 100
    Space Square 50 50 80
    Obstacle Square 20 30 10
    Circle 80 20 5
    Food Rectangle 30 80 5 9
    Food Point 70 70
    Nest Circle 50 50 5
    Pheromone1 VLine 90 40 10 100 20000
    Pheromone1 HLine 10 50 10 20000 1000
EndScene

Vygeneruje sa nasledujúca scéna. Feromónové vône sú v prvom kroku čiary.

ArenaPheromone1

Poznámka: Objekty sa vykresľujú od prvého k poslednému a môžu sa prekresľovať. Pod prekážkami sa vône nevykreslia.

Sekcia AgentSection

V tejto sekcii sa definujú agenti simulácie. Samotná sekcia sa skladá z niekoľkých podsekcií Agent. Takýchto podsekcií môže byť v tejto sekcií AgentSection viac a môže sa tak do simulácie dosadiť agenti s rôznymi počiatočnými podmienkami, napr. 1 kráľovná, 20 robotníc v hniezde a 30 robotníc mimo hniezda. Každá podsekcia Agent definuje jeden typ agentov.


Kľúčové slová pre túto podsekciu sú:
NumbOfAgents X - nastaví, koľko agentov tohto typu sa pridá do modelu. X je počet agentov.
Location - toto slovo charakterizuje, kam sa agent umiestni na začiatku simulácie. Sú tri možnosti umiestnenia agenta. Location At X Y, špecifikuje na ktorú súradnicu sa agent umiestni. Location Nest - agent štartuje v hniezde. Location Random - náhodné umiestnenie agenta. Inside - nastaví počiatočný stav vnútorných premenných agenta. Default je vynulovanie hodnoty vnútorných stavov. Tieto stavy možno zmeniť kľúčovými slovami: Hungry, Trail-Lay, Returning, Foraging, Building alebo Soil. (Pozri tiež nasledujúcu kapitolu A.3.)
EndInside -ukončí nastavovanie vnútorného stavu.
Direct XX - nastaví počiatočné smerovanie agenta, XX je smer a možné hodnoty sú kompasového charakteru: N,NE,E,SE,S,SW,W,NW.
RelPhero X - nastaví, koľko feromónu agent vylúči, ak je to vyžiadané pravidlom. X je množstvo feromónu a je z intervalu <0, 30000>.
Brain FileName - zo súboru FileName sa načíta sada produkčných pravidiel, ktorá vytvorí mozog agenta.
EndAgent - ukončí sa vytváranie agenta.
EndAgentSection - ukončí sa AgentSection.


Príklad:
AgentSection
    Agent
        NumbOfAgents 20
        Location Nest
        Inside
                Hungry
        EndInside
        Brain default.brn
        RelPhero 10000
    EndAgent
EndAgentSection

A.3 Súbor "*.brn"

Súbor typu "brn" popisuje mozog agenta pomocou produkčných pravidiel. V týchto pravidlách je zakomponované celé správanie agenta. Produkčné pravidlo má tvar

IF podmienka THEN dôsledok ,

alebo s konjunkciou v podmienkovej časti

IF podmienka1 AND podmienka2 THEN dôsledok.


Kľúčové slová pre definovanie produkčných pravidiel:
IF - začiatok pravidla.
AND - konjunkcia v podmienkovej časti.
THEN - prechod na dôsledkovú časť pravidla.
"." - bodka je ukončovací symbol, bodka musí byť od posledného slova oddelená medzerou.

V podmienkovej časti sa nachádzajú vstupné registre, ktoré v tomto prípade popisujú nejakú situáciu, do ktorej sa agent môže dostať. V dôsledkovej časti sa zase popíše, akú akciu má agent vykonať, ak sa do danej situácie dostane.

Prvým kľúčovým slovom v tomto súbore je
Rules: X - kde X udáva počet pravidiel. Toto kľúčové slovo je povinné.
Odor - definuje použitie registra Odor v podmienke. Predvolená hodnota tohto registra je "*****000", t.j. ak nepoužijeme nijakú špecifikáciu, do podmienky sa zapíše táto hodnota. Každý register možno špecifikovať pomocou kľúčových slov.


Na špecifikáciu registra Odor sú použité slová:
Pheromon0 - ak agent zacíti feromón 0.
notPheromon0 - ak agent necíti feromón 0.
Food - ak agent zacíti vôňu jedla.
NotFood - príslušný bit pre jedlo sa nastaví na 0.
Pheromon1 - ak agent zacíti feromón 1.
notPheromon1 - ak agent necíti feromón 1.
Pheromon2 - nastaví príslušný bit na 1.
notPheromon2 - nastaví príslušný bit na 1.
Left - špecifikácia pre smer z ktorého prichádza vôňa.
Straight - špecifikácia pre smer z ktorého prichádza vôňa.
Right - špecifikácia pre smer z ktorého prichádza vôňa.
Nothing - znuluje všetky bity registra.


Príklad:
Podmienku "Ak cítiš vôňu jedla sprava" možno vyjadriť "IF Odor Food Right".


Inside - v podmienke sa nachádza register Inside, charakterizujúci vnútorný stav agenta. Vnútorný stav agenta súbor premenných, ktoré si agent môže prenášať medzi jednotlivými krokmi simulácie. Tieto premenné sú boolovského charakteru, t.j. môžu nadobúdať len hodnotu 0 alebo 1. Nešpecifikovaná hodnota tohto registra je "********", t.j. ak nedosadíme žiadnu špecifikáciu, ostane hodnota tohto registra s touto hodnotou a daný register použitý v podmienke bude v tomto prípade vždy splnený.


Hungry - nastaví príslušný bit na 1.
notHungry - nastaví príslušný bit na 0.
Trail-Lay - nastaví príslušný bit na 1.
notTrail-Lay - nastaví príslušný bit na 0.
Returning - nastaví príslušný bit na 1.
notReturning - nastaví príslušný bit na 0.
Foraging - nastaví príslušný bit na 1.
notForaging - nastaví príslušný bit na 0.
Building - nastaví príslušný bit na 1.
NotBuilding - nastaví príslušný bit na 0.
Soil - nastaví príslušný bit na 1.
notSoil - nastaví príslušný bit na 0.
Defending - nastaví bit na 1.
notDefending - nastaví bit na 0.
Nesting - nastaví bit na 1.
notNesting - príslušný bit nastavený na 0.

Každý bit je zviazaný s jednou premennou a prostredníctvom týchto bitov možno prenášať informáciu medzi krokmi simulácie. Je to taká malá pamäť.

Ak chceme v podmienke použiť register o kolízii agenta s okolím, použijeme slovo
Contact. Defaultná hodnota je "********".
Na jeho špecifikáciu slúžia slová:
Food - agent narazil na jedlo.
noFood - agent je mimo jedla.
Soil - agent ma priamo pod sebou čiastočku pôdy.
noSoil - agent nie je v kontakte s pôdou.
Nest - agent je v hniezde.
noNest - agent nie je v hniezde.
Obstacle - agent má pred sebou prekážku.
NoObstacle - agent nemá pred sebou prekážku.
Ant - agent stretol iného agenta.
noAnt- agent nikoho nestretol.


Príklad.
Ukážka zápisu podmienok:
1.
Ak cítiš feromón1 sprava Potom ...
IF Odor Pheromone1 Right THEN ...
2.
Ak si hladný A narazil si na jedlo Potom ...
IF Inside Hungry AND Contact Food THEN ...

Dôsledková časť sa zapisuje obdobne, s tým rozdielom že sa špecifikujú výstupné registre.

Inside - v dôsledkovej časti má tento register ten význam, že mení v nasledujúcom kroku simulácie stav agenta. Nešpecifikovaná hodnota tohto registra je "********".


Hungry - nastaví príslušný bit na 1.
notHungry - nastaví príslušný bit na 0.
Trail-Lay - nastaví príslušný bit na 1.
notTrail-Lay - nastaví príslušný bit na 0.
Returning - nastaví príslušný bit na 1.
notReturning - nastaví príslušný bit na 0.
Foraging - nastaví príslušný bit na 1.
notForaging - nastaví príslušný bit na 0.
Building - nastaví príslušný bit na 1.
notBuilding - nastaví príslušný bit na 0.
Soil - nastaví príslušný bit na 1.
notSoil - nastaví príslušný bit na 0.
Defending - nastaví bit na 1.
notDefending - nastaví bit na 0.
Nesting - nastaví bit na 1.
notNesting - príslušný bit nastavený na 0.


Motor je register, ktorý popisuje, aký pohyb agent vykoná.


Kľúčové slová, ktoré ho špecifikujú:
Stay - stoj.
Go - choď vpred.
Back - cúvaj.
Left - Vľavo, napr. Go Left= choď vľavo.
Right - Vpravo, napr. Stay Right = otoč sa vpravo.
Straight - nemeň smer, rovno.
NavigTo - natoč sa na hniezdo.
NavigFrom - natoč sa od hniezda.

V prípade zadania kombinácie kľúčových slov Left, Right, Straight si agent náhodne vyberie jeden z nich. NavigTo a NavigFrom prepisujú nastavený smer smerom potrebným pri navigovaní.

Pre zásahy do prostredia slúži register
Effector so špecifikáciami:
Eat - zjedz jedlo.
LayPheromon0 - vylúč feromón 0.
LayPheromon1 - vylúč feromón 1.
LayPheromon2 - vylúč feromón 2.
GetSoil - zdvihni čiastočku pôdy.
PutSoil - polož čiastočku pôdy.


Príklad.

1. Ak si hladný A narazil si na jedlo Potom ho zjedz. IF Inside Hungry AND Contact Food THEN Effector Eat .

2 Ak si hladný A narazil si na jedlo Potom si najedený. IF Inside Hungry AND Contact Food THEN Inside notHungry .

3. Ak nemáš pred sebou prekážku Potom choď v ľubovoľnom smere. IF Contact noObstacle THEN Motor Go Left Straight Right .

Ukončovací symbol je "." (bodka), ktorá je od posledného slova oddelená medzerou.