Prírodou inšpirované algoritmy

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

Späť ku kurzom triedy
Obsah
Základné princípy OOP
Prvý program v Objective C
Spoločný život dvoch objektov
Používanie Swarmu
Viac agentov v prostredí
Parametre modelu
Grafické rozhranie



Ostatné kapitoly
Swarm
RePast
LEM
SDML
Eos
DDLab


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


Viac agentov v prostredí

Namodelujeme do nášho životného priestoru viac chrobákov, pričom na jednom mieste môže byť len jeden chrobák.

Súbor main.m sa nemení, mení sa ModelSwarm a súbory Bug.

Štruktúra ModelSwarm pre viac agentov

Pridáme dve štruktúry na umiestnenie nových agentov:

  • pretože nechceme aby si agenti stúpali po hlavách pridáme ďalší priestor, s ktorým budú agenti interagovať, čo nám zabezpečí, že nie je viac chrobákov na jednom mieste.
  • vytvoríme kolekciu všetkých chrobákov tak , že s nimi môžeme zaobchádzať ako s celkom. V podstate ich zapuzdríme do "zoznamu" objektov a komunikujeme s nimi posielaním správ do tohto zoznamu (bugList).

Využijeme triedu objektov Grid2d, ktorá je už zadefinovaná v knižniciach Swarmu, takže ju len požiadame o vytvorenie inštancie. Grid2d pracuje tak, že v jednej bunke môže byť iba jeden chrobák. Ak je na políčku chrobák tak tam má svoje "id" ak tam nie je, je tam "nil". Keď vytvoríme chrobáka umiestnime ho do sveta na jeho x, y súradnice.

Zoznam objektov je už preddefinovaný.

Požijeme objekt z knižnice náhodných čísel uniformDblRand id , ktorý nám vracia náhodné reálne čísla s normálnym rozložením.

Zoberieme chrobáka zo zoznamu, zapíšeme do reporterBug, či sa stretol s potravou. Po tom ako sme získali informáciu o potrave zaradíme chrobáka späť do zoznamu.
V buildActions vytvoríme zoznam simulovaných akcií. Tieto uložíme do skupiny, pretože tieto akcie chceme vykonať v určitom poradí, ale tak aby tieto kroky netrvali žiadny čas. M(lojzo) znamená odkaz z názvom lojzo, čiže je možné poslať správu jednotlivým objektom alebo všetkým objektom.

  • CreateActionForEach - odkaz pre všetkých chrobákov
  • CreateActionTo - odkaz pre jedného chrobáka

Chceme dve veci, a to aby všetky chrobáky vykonali jeden krok v priestore a aby nás reportBug informoval o nájdenej potrave.

Nakoniec vytvoríme rozvrh, ktorý vykoná model akcií (ModelActions). ModelActions je ActionGroup, ktorá v reálnej reprezentácii neexistuje, je tu vlastne preto, že počítač vykonáva operácie sekvenčne. Tento rozvrh má interval opakovania jedna - vykonáva sa v každom kroku.

Štruktúra súborov Bug.m a Bug.h pre viac agentov.

Chrobáky sú teraz závislé jeden na druhom, pretože žijú v jednom svete. Musia byť schopné spoznať, že na mieste kam chcú ísť nikto nie je. Kontrolujú to tým istým spôsobom ako potravu, t.j. v krokovej metóde. Pri vytváraní sme rozšírili metódu setFoodSpace na setWodld: Food:. Ak chrobák nájde potravu, nastaví sa príznak haveeaten na jednotku a vykoná sa metóda -report.

Hore
Kontakt: Marek Bundzel