Overview

Obsah

Obsah.. i

Zoznam obrázkov.. ii

1      Úvod.. 1

1.1        Predslov.. 1

1.2        Ciele diplomovej práce. 1

2      Prehľad jazykových experimentov.. 3

2.1        Jazyk.. 3

2.2        Jazyková hra.. 4

2.3        Pomenovávacia hra.. 6

2.4        Príznaky experimentov.. 9

2.4.2     Štruktúra systému. 12

2.4.3     Otvorenosť. 14

2.4.4     Priestor. 18

2.4.5     Zložitosť jazyka. 21

2.4.6     Reprezentácia významov. 23

2.4.7     Reprezentácia slovníka v agentoch. 25

2.4.8     Spoľahlivosť komunikácie agentov. 28

2.5        Miery.. 28

2.5.1     Úspešnosť hier. 28

2.5.2     Koherencia a lokálna koherencia. 29

2.5.3     Zhoda slovníkov. 29

2.5.4     Špecificita. 29

2.5.5     Neistota klasifikovania. 30

2.6        Parametre. 30

2.6.1     Obmedzenie slov  slovníka. 30

2.6.2     Počet krokov simulácie. 30

2.6.3     Vytvorenie a absorpcia nového slova. 31

2.6.4     Vstup nového agenta. 31

2.6.5     Odchod agenta. 31

3      Prostredie pre jazykové hry.. 32

3.1        Motivácia.. 32

3.2        Existujúce prostredia.. 32

3.3        Štruktúra prostredia.. 33

3.4        Základy prostredia.. 34

3.5        Inštalácia a počiatočná konfigurácia prostredia.. 35

3.6        Experimenty.. 37

3.6.1     Editor projektu. 37

3.6.2     Pridávanie agentov. 38

3.6.3     Nastavovanie grafov. 39

3.6.4     Prvý experiment 42

3.6.5     Druhý experiment – otvorenosť systému. 44

3.6.6     Tretí experiment – spoločenstvá. 47

3.7        Rozšírenie prostredia pre jazykové hry.. 51

3.7.1     Potrebné znalosti 51

3.7.2     Pravidlá rožširovania. 53

3.7.3     Príklad rozšírenia. 57

Záver.. 61

Literatúra.. 62


Zoznam obrázkov

 

Obrázok 1 – jednoduchá interakcia.. 3

Obrázok 2 – zložitejšia interakcia.. 3

Obrázok 3 – úspešnosť hier.. 14

Obrázok 4 – úspešnosť hier a veľkosť populácie. 15

Obrázok 5 – úspešnosť hier a veľkosť populácie 2. 16

Obrázok 6 – úspešnosť hier a veľkosť populácie 3. 17

Obrázok 7 – rozdelenie 20 agentov na mriežke po skupinkách.. 18

Obrázok 8 – úspešnosť hier v priestorových hrách.. 19

Obrázok 9 – globálny slovník po 10000 hrách.. 21

Obrázok 10 – holistické a štruktúrované jazyky.. 21

Obrázok 11 – typy jazykov.. 22

Obrázok 12 – diskriminačný strom... 24

Obrázok 13 – model jazykovej hry pomocou neurónových sietí 26

Obrázok 14 – vytvorené slovníky modelu s neurónovými sieťami 27

Obrázok 15 – analýza jazyka neurónových sietí 27

Obrázok 16 – základná štruktúra prostredia.. 33

Obrázok 17 – tok dát pri monitorovaní 34

Obrázok 18 – hlavné okno programu.. 36

Obrázok 19 – zberňa agentov.. 36

Obrázok 20 - editor projektu.. 37

Obrázok 21 – ukážka koláčového grafu.. 40

Obrázok 22 – ukážka stĺpcového grafu.. 40

Obrázok 23 – konfigurácia grafu.. 41

Obrázok 24 – ukážka grafu a jeho menu.. 41

Obrázok 25 – nastavenie monitoru WorldRatioMonitor pre mieru úspešnosť hier.. 43

Obrázok 26 nastavenie monitoru WorldMonitor.. 45

Obrázok 27 – agenty v priestore po skupinkách.. 47

Obrázok 28 – koherencia a úspešnosť hier v spoločenstvách.. 48

Obrázok 29 – koherencia a úspešnosť hier v spoločenstvách 2. 49

Obrázok 30 – koherencia a lokálne koherencie spoločenstiev.. 50

Obrázok 31 – objektový model rozšíriteľných častí programu.. 51

Obrázok 32 – komunikácia agentov.. 52

 


 


1        Úvod

1.1      Predslov

 

"A štvrtý stupeň je skutočný cudzinec, varelse, ktorý zahrňuje všetky zvieratá, lebo s nimi sa rozprávať nedá. Sú živé, ale nevieme odhadnúť, akými pohnútkami sa riadi ich chovanie. Môžu byť inteligentné, môžu si sami seba uvedomovať, ale my nemáme možnosť sa to dozvedieť."

Orson S. Card "Mluvčí za mrtvé"

 

Evolúcia jazyka je zaujímavou témou vhodnou pre pozorovanie. Táto téma a jazyk samotný je odpradávna parketou filozofov. V dnešnej dobe sa vznikom jazyka zaoberajú rôzne vedné odbory. Pri myšlienke, že by sme sa mohli v budúcnosti dorozumievať s počítačmi, je namieste si klásť otázky, čo je to vlastne jazyk a ako vznikol. Tieto otázky budeme musieť mať zodpovedané, aby sme boli schopní plnohodnotne preniesť jazyk tak, ako ho poznáme, aj do sveta počítačov a rozšíriť tak dnešné primitívne možnosti komunikácie so strojmi.

Pri dnešných možnostiach využitia počítačov sa medzi vedné odbory, ktoré sa zaoberajú problematikou vzniku jazyka, zaradila aj umelá inteligencia so svojím osobitným prístupom v riešení problémov. Pomocou simulácii, takzvaných jazykových hier, o ktorých si z filozofického hľadiska môžete viac prečítať v [1,2,3], sa umelá inteligencia pokúša skúmať príčiny a možnosti vzniku jazyka v komunite simulovaných agentov.

1.2      Ciele diplomovej práce

Stanovili sme si dva základné ciele diplomovej práce.

Prvým cieľom je priblížiť čitateľovi tematiku experimentov s jazykovými hrami. Existuje mnoho publikácií zaoberajúcich sa evolúciou jazyka a veľa článkov popisujúcich rôzne typy experimentov v tejto oblasti. Našou snahou je ich zosumarizovať a vytvoriť nový prehľad založený nie na typoch experimentov, ale na ich vlastnostiach. Takto chceme priblížiť základné pojmy v problematike jazykových hier a zároveň ich vysvetliť záujemcom o danú oblasť výskumu.

Druhým cieľom diplomovej práce je vytvoriť vlastný program – prostredie, ktoré má slúžiť na experimentovanie v oblasti evolúcie jazyka, hlavne na simulácie založené na multi–agentovej architektúre.

Text práce je rozdelený podľa cieľov na dve časti.

Druhá kapitola začína prehľadom problematiky evolúcie jazyka. V jej ďalších podkapitolách sa venujeme jednotlivým vlastnostiam experimentov.

V tretej kapitole popisujeme nami vytvorené prostredie. Podkapitoly sú rozdelené na popis programu, ukážky vytvárania experimentov v programe a nakoniec popis možností rozširovania programu pre ďalšie experimenty. V ukážkach experimentov sa pokúšame demonštrovať jednotlivé vlastnosti experimentov, ktoré sú vysvetlené v prvej časti textu. Podrobný manuál prostredia nie je súčasťou textu ale samotného programu.


2        Prehľad jazykových experimentov

2.1      Jazyk

Jedným z cieľov výskumu v oblasti evolúcie jazyka je zistiť, ako jazyk vznikol. Touto témou sa zaoberá mnoho vedeckých tímov s rôznych oblastí výskumu (lingvistika, filozofia, umelá inteligencia, psychológia), pričom existuje niekoľko smerov výskumu jazyka.

Štandardný adaptačný model je založený na Chomského jazykovej paradigme [34,35], ktorá sa sústredí na vrodené lingvistické schopnosti jedinca. Jazyk vníma hlavne ako biologickú charakteristiku. Tento model vysvetľuje vznik jazyka ako dôsledok interakcie medzi biologickým vývojom ľudského jazykového inštinktu [36] a učením sa jednotlivca. Túto interakciu znázorňuje [Obrázok 1 – jednoduchá interakcia].

Obrázok 1 – jednoduchá interakcia

Obrázok je uvedený v [21]

Ďalší smer [21] pridáva do systému vývoja jazyka tretí komplexný systém – kultúru. Jazyk teda chápe ako výsledok interakcie medzi troma systémami (viď Obrázok 2 – zložitejšia interakcia).

Obrázok 2 – zložitejšia interakcia

Obrázok je uvedený v [21]

Pri vytváraní jazyka je v prvom modeli určujúci genetický vývoj, ktorý zabezpečuje zmeny a mutácie jazykového aparátu jedinca. Nato, aby sa mohla udiať zmena v jazyku populácie agentov, je nutné, aby u všetkých prebehla podobná mutácia pri genetickom prenose ich génov. Takáto situácia je málo pravdepodobná. Samotná teória genetickej evolúcie jazyka neodzrkadľuje vývoj reálneho jazyka, pri pozorovaní ktorého vidíme zmeny v jazyku často už počas jednej generácie populácie. Kultúrny proces prináša veľký počet interakcií – lokálnych komunikácií medzi agentmi. Takáto komunikácia dáva lepšie podmienky pre vývoj, organizáciu a šírenie jazyka medzi jednotlivcami populácie. K zmenám jazyka môže prispievať odsun a prísun jednotlivcov (napríklad demografické migrácie), prípadne nespoľahlivý prenos vedomostí (napríklad šírenie ústnym podaním z generácie na generáciu).

V tejto práci sa budeme na jazyk pozerať ako na samostatný dynamický adaptívny systém, ktorý vzíde z interakcie všetkých troch komplexných adaptívnych systémov – biologickej evolúcie, učenia sa a kultúrnej evolúcie. Avšak veľa popísaných experimentov sa zameriava a využíva iba interakciu kultúrneho procesu a učenia sa. Takéto experimenty pochádzajú hlavne z projektov Luca Steelsa a jeho vedeckého tímu pracujúceho pre Sony Computer Science Laboratory v Paríži. L Steels v [6] píše o jazyku ako adaptívnom systéme:

Sformovanie globálnej lingvistickej konvencie v skupine distribuovaných agentov môže byť porozumené pod pojmom samoorganizácia. Existujúca prirodzená variácia v chovaní sa jazyka sa upevňuje, pretože čím viac členov komunity si privlastňuje rovnaké konvencie, tým silnejšou sa tá konvencia stáva. Avšak táto dynamika je možná iba vtedy, keď agenty menia svoje správanie tak, aby bolo viac v súlade so správaním komunity. Samoorganizácia teda vedie k záveru, aby sme sa na jazykovú komunitu pozerali ako na komplexný adaptívny systém.

2.2      Jazyková hra

Mnohí vedci pri výskume jazyka používajú ako jeden z nástrojov na experimentovanie jazykové hry. Pojem jazyková hra zaviedol pravdepodobne ako prvý  Wittgenstein [1,2,3].

My budeme v tejto práci pod  jazykovou hrou rozumieť experimenty, ktoré majú nasledujúce vlastnosti a pravidlá:

Experiment prebieha v multi–agentovom prostredí, v prostredí kde sa môže nachádzať jeden alebo viac agentov. Agenty môžu byť softvérový výtvor a prostredie softvérová simulácia alebo to môžu byť fyzické roboty a prostredie reálny svet. Dôležitou vlastnosťou týchto prostredí je, že agenty sú samostatné jednotky, ich rozhodovanie a konanie v prostredí nie je centrálne riadené. Každý agent si vytvára svoj vnútorný obraz prostredia, tento je preň jedinečný. Agent nemá možnosť nahliadnuť do vnútornej reprezentácie prostredia iných agentov.

Agenty spolu komunikujú, prebieha medzi nimi interakcia. Taktiež komunikujú s prostredím a tak získavajú potrebné informácie. Na komunikáciu používajú agenty pri skutočných robotoch senzory a efektory, ktoré sa v počítačových simuláciách simulujú.

Výmena informácií medzi agentmi sa deje formou slov. Pod slovom budeme rozumieť reťazec písmen, zvukov, pohybov. Agenty sa výmenou slov snažia dorozumieť o význame, ktorý sa stáva  témou ich rozhovoru. Hrajú spolu jazykovú hru, ktorá väčšinou prebieha medzi dvoma agentmi. Hra je úspešná, ak si agenty porozumeli, v opačnom prípade hra zlyhala.

Súčasťou agentov je slovník, v ktorom si udržujú informácie o svojich pomenovaniach významov z prostredia ako reláciu slovo – význam. Pre jeden význam môže mať agent viac slov. Jedno zo slov je preferované, týmto agent pomenováva daný význam, keď je v roli rozprávača. Slovník, tak ako vnútorná reprezentácia prostredia, je jedinečný pre každý agent. Agent ho nemôže priamo sprostredkovať iným agentom. Slovník je zvyčajne na začiatku simulácie prázdny.

Cieľom experimentu je dosiahnuť jednotný slovník medzi agentmi. Jednotný slovník neznamená, že jednotlivé slovníky agentov sú identické, ale že používajú pre pomenovanie významov, o ktorých sa dorozumievajú rovnaké preferované slová. Môžeme povedať, že jazyk týchto agentov emerguje, lebo spoločný jazyk je vedľajší produkt interakcií jazykových hier a nie ich priamy výsledok. (Agenty sú naprogramované, aby spolu komunikovali, nie aby si vytvárali spoločnú reč.) Jednotný slovník medzi agentmi vzniká práve vtedy, keď väčšina jazykových hier – interakcií je úspešná. Hovoríme, že dochádza k porozumeniu si agentov.

Jazykové hry môžu mať aj iné ciele. Napríklad, popri vytvorení spoločného jazyka sa môže očakávať tiež vytvorenie viet, väčšej komplexnosti slov či dokonca celej gramatiky. Takéto očakávania musia byť ale niečím podložené (napr. zložitejšími modelmi agentov a prostredia). Inými slovami, ciele jazykových hier môžu byť naozaj široké.

2.3      Pomenovávacia hra

Pomenovávacia hra je konkrétny prípad jazykovej hry. Hra prebieha medzi agentom A –rozprávačom a agentom B – poslucháčom. Rozprávač si vyberie z prostredia ľubovoľný význam, ktorý sa stane témou ich rozhovoru. K tejto téme nájde slovo zo svojho slovníka, pod ktorým ju pozná a toto slovo sprostredkuje (povie) poslucháčovi. Ten sa podľa vypočutého slova snaží vo svojom slovníku nájsť tému, ktorú pod týmto slovom rozumie on. Ak sa téma vybratá poslucháčom zhoduje s témou rozprávača, hra bola úspešná.

Po úspešnej hre si oba agenty zvýšia úspešnosť relácie slovo – téma, ktorú pri hre použili. Ak hra bola neúspešná, agenty si tiež upravia svoje poznatky, ale takým spôsobom, aby nabudúce boli bližšie k úspešnej hre.

Príklad priebehu pomenovávacej hry:

Rozprávač si vyberie objekt, o ktorom chce rozprávať. Napríklad, veľkú bielu škatuľu, ktorú pozná pod slovom práčka. Sprostredkuje toto slovo poslucháčovi. Poslucháč počuje slovo práčka a v svojom slovníku si nájde objekt, ktorému prislúcha toto slovo. Poslucháč ale pod týmto slovom pozná objekt malú bielu guľu. Keďže guľa a škatuľa sa nezhodujú, hra neprebehla úspešne. Obaja – rozprávač aj poslucháč si  upravia  slovníky tak, aby si  nabudúce lepšie porozumeli.

Treba si uvedomiť, že agenty sú naozaj samostatné, teda nie je žiadne centrálne riadenie. Nemôžu si navzájom vidieť do svojich reprezentácií, ako predpokladajú niektoré iné experimenty [37].

Nasleduje presná definícia pomenovávacej hry podľa Steelsa [7].

Definícia 1. Pomenovávacia hra

Predpokladajme množinu agentov , kde každý agent  má prístup k množine objektov . Niektoré alebo všetky objekty sú spoločné pre rôzne agenty. Slovo je postupnosť písmen konečnej abecedy. Predpokladáme, že všetky agenty majú prístup k rovnakej abecede. Slovník L je dynamická relácia medzi objektmi a slovami a dvoma veličinami: u – počet, koľkokrát bola relácia použitá a s ­­– počet, koľkokrát bola použitá úspešne. Každý agent  má svoj vlastný slovník , ktorý je na začiatku prázdny. Slovník môže obsahovať synonymá aj homonymá, teda jedno slovo môže byť asociované s viacerými objektmi a objekt môže byť asociovaný s viacerými slovami. Agent  môžeme teraz definovať ako dvojicu .

Pomenovávacia hra  je interakcia medzi dvoma agentmi: rozprávačom s a poslucháčom h o téme o, ktorá je objektom, . Interakcia prebieha nasledovne:

1.      Rozprávač si náhodne vyberie tému zo svojej množiny objektov. Rozprávač si vynúti pozornosť poslucháča na vybratú tému. V prirodzenej konverzácii by sa toto rovnalo ukázaniu prstom.

2.      Rozprávač s zakóduje tému o prostredníctvom slova w. Vybraté slovo je najúspešnejšie slovo w, kde . Slovo  je úspešnejšie ako slovo , ak ,  a buď  alebo  a . Ak je viac slov rovnako úspešných, vyberie sa z nich jedno náhodne.

3.      Poslucháč h dekóduje slovo w a odvodí množinu objektov H takú, že .

4.      Pomenovávacia hra je úspešná, ak .

Keďže interakcie v pomenovávacích hrách prebiehajú iba medzi dvojicou agentov, môžu paralelne prebiehať viaceré pomenovávacie hry medzi disjunktnými dvojicami agentov.

Adaptívna pomenovávacia hra je pomenovávacia hra  definovaná vyššie, so zmenami v slovníku oboch agentov, tak rozprávača ako aj poslucháča. To znamená, že musíme definovať časovú dimenziu v definícii agenta. Agent a v čase t je definovaný ako . Časový bod korešponduje s udalosťou, v ktorej dva agenty hrajú jazykovú hru. Ak rozprávač v čase t použije slovo w, kde  a hra skončí úspešne, potom  a . Ak hra skončí neúspešne, zvyšuje sa použitie slova, ale nie úspešnosť:  a . Ostatné zmeny definujúce stav agenta v čase t+1 sú nasledovné:

·        Chýbajúci objekt (krok 1 zlyhal)

                        Rozprávačom vybraná téma nie je zdieľaná poslucháčom: . Hra končí neúspechom, ale poslucháč dostal vedomosť o novom objekte podľa pravdepodobnosti šírenia objektov .

·        Rozprávač nemá slovo (krok 2 zlyhal)

                       Teda neexistuje také w, kde. Hra končí neúspechom, ale rozprávač si môže náhodne vytvoriť nové slovo w' a asociovať ho s objektom vo svojom slovníku podľa pravdepodobnosti vytvárania slov .

·        Poslucháč nepozná slovo (krok 3 zlyhal)

                       Teda . Hra končí neúspechom, ale poslucháč si môže rozšíriť slovník podľa pravdepodobnosti absorpcie slov .

·        Téma nie je úspešne dekódovaná poslucháčom (krok 4 zlyhal)

                       Teda . Hra končí neúspechom, ale poslucháč si môže rozšíriť slovník podľa pravdepodobnosti absorpcie slov .

·        Ak nenastane žiadna z vyššie definovaných explicitných zmien, definícia agenta sa nezmení: .

Uviedli sme definíciu veľmi triviálnej jazykovej hry. Existuje veľa modifikácii tejto definície (napríklad analogická pomenovávacia hra [31], hádacia hra [12], rozlišovacia hra [10, 11, 9] a iné.). Všetky však majú rovnaký cieľ – dosiahnuť zhodu slovníkov komunikujúcich agentov.

Jedným z variantov pomenovávacej hry je verzia, v ktorej sa do komunikácie agentov pridal šum. Aj v takomto systéme pri rozumnej miere šumu bola dosiahnutá koherencia slovníkov [13]. Iným variantom pomenovávacej hry môže byť rozšírenie definície agenta o ďalší parameter – pozíciu v priestore [7].

2.4      Príznaky experimentov

V tejto kapitole kategorizujeme použité články podľa niektorých kľúčových vlastností experimentov a tiež podrobnejšie popisujeme dané kľúčové vlastnosti. Niektoré články sú rozsiahlejšie a zaoberajú sa viacerými metódami. Pri jednotlivých vlastnostiach uvádzame články, ktoré sa nám zdali k nim relevantné.

2.4.1.1  Komplexné adaptívne systémy

Komplexný dynamický systém [8] pozostáva z množiny prvkov, medzi ktorými prebieha interakcia, pričom globálne správanie systému je nepriamym a nehierarchickým dôsledkom správania sa jednotlivých prvkov. Neexistuje v ňom žiadna centrálna riadiaca jednotka a štandartne je systém otvorený, teda prvky v systéme môžu pribúdať a odbúdať.

Najčastejšie sú pozorované tri hlavné typy správania sa, ktoré závisia na nastaveniach parametrov prostredia:

·        rovnováha – systém sa posúva bližšie k rovnovážnemu stavu, v ktorom zotrváva

·        samoorganizácia – v systéme vznikajú disipatívne štruktúry (pokiaľ sú na to vhodné podmienky v prostredí)

·        chaos – v systéme sa vyskytujú často nepredvídateľné postupnosti správania sa

Komplexné adaptívne systémy sú podtriedou komplexných dynamických systémov. Zatiaľ, čo v dynamických systémoch je správanie prvkov a priebeh interakcií konštantný, v adaptívnych systémoch sa toto správanie mení, čo prispieva k vyššej dynamickosti systému. Ako už bolo spomínané, príkladmi [8] takéhoto systému je biologický vývoj, sociálny systém, ekonomika či ekologický systém.

Ako sme videli v úvode, jazyk môžeme chápať ako výsledok kooperácií troch komplexných adaptívnych systémov. Ak chceme vedieť vysvetliť pôvod a evolúciu jazyka, je potrebné pochopiť samotné komplexné systémy. Pre pochopenie pôvodu komplexnosti sa ponúkajú tri prístupy: genetická evolúcia, samoorganizácia s prispôsobovaním a genetická asimilácia. Genetická asimilácia je kombinácia prvých dvoch prístupov.

2.4.1.2  Genetická evolúcia

Veľa z prvých experimentov s multi–agentovými prostrediami využívalo genetickú evolúciu. Takéto počítačové simulácie využívajú princípy prevzaté z prírody, kde potomok získa svoje vlastnosti od svojich rodičov prostredníctvom génov.

Podobne sa v niektorých multi–agentových systémoch môžu správať agenty. Agent je nositeľom genetickej informácie – génov, ktoré môžu predstavovať napríklad program alebo nejaké pravidlá, ktorými sa agent riadi.

Po niekoľkých krokoch simulácie, v ktorých má každý agent "voľnosť pohybu", sa z celej populácie agentov vyberú tie najlepšie. Výber sa koná podľa takzvanej fitnes funkcie agenta. Fitnes funkcia je zvolená tak, aby agent, ktorý je najviac schopný prežiť či riešiť problém v prostredí, bol ňou najlepšie ohodnotený.

Potom sa z vybratých agentov vytvoria potomkovia. Gény vybratých rodičov – agentov sa navzájom skrížia v jeden gén, napríklad prvá polovica prvého rodiča a druhá polovica druhého rodiča. V skríženom géne môže ešte nastať náhodná mutácia, teda niektoré informácie sa v géne náhodne zmenia – zmutujú. Tento výsledný gén bude patriť ich potomkom – novým agentom vstupujúcim do systému. Podľa úspešnosti ich nových génov sa z nich za nejaký čas môžu stať rodičia. Pôvodní rodičia prostredie opúšťajú alebo v ňom ešte nejaký čas zotrvajú.

Jazykové experimenty založené na genetickej evolúcii vychádzajú väčšinou z nasledujúcich predpokladov:

1.      V mozgu existuje orgán slúžiaci na získavanie jazyka. Väčšinou tento orgán neslúži na získanie konkrétneho jazyka, ale zahŕňa v sebe univerzálne princípy. V konkrétnom prostredí sa mu nastavia parametre pre špecifický jazyk daného prostredia.

2.      Zachovanie jazyka je spôsobené prenosom génov, ktoré zahŕňajú aj jazykový orgán, na potomkov.

3.      Zmeny v jazyku vznikajú mutáciou a kombináciou génov, v dôsledku čoho sa mení aj jazykový orgán.

4.      Tvar jazyka závisí od úspešnosti prenosu génov pri reprodukčnom procese.

5.      Jazyková koherencia by mala nastať podobne, ako sa predpokladá pri iných biologických znakoch (napríklad vznik párových orgánov)

Genetická evolúcia nie je asi to najlepšie na simulovanie evolúcie jazyka. Každopádne to neznamená, že v tomto procese nemôže  prispievať inou formou, než sme si popísali [8,21].

2.4.1.3  Sociálna evolúcia – samoorganizácia a adaptácia

Pri sociálnej evolúcií zohráva dôležitú úlohu samoorganizácia [38]. Je to proces, v ktorom systém elementov s lokálnymi interakciami a so silnou pozitívnou spätnou väzbou dosiahne globálnu koherenciu, aby sa vysporiadal s prísunom a odsunom energie alebo materiálu. V takomto procese nie sú žiadne známky genetiky. Informácie sú uchovávané len spôsobom samoorganizácie štruktúr. Samoorganizácia bola použitá na vysvetlenie niektorých negenetických biologických fenoménov, akou je napríklad tvorba cestičiek v komunite mravcov.

Pri skúmaní evolúcie jazyka môžeme samoorganizáciou vysvetliť vytvorenie slovníka v skupine distribuovaných agentov. Každý agent v prostredí je schopný komunikovať a zároveň musí svoju komunikatívnosť rozširovať a zlepšovať. Agenty si predávajú informácie – zvukové, textové alebo obrazové, a tak sa medzi nimi šíria "vedomosti", ktoré sa častým používaním a opakovaním stávajú spoločné. Teda čím viac agentov používa rovnaké vedomosti, tým rýchlejšie sa šíria a upevňujú.

Jazykové experimenty používajúce samoorganizáciu a adaptáciu vychádzajú z trochu odlišných predpokladov [8] než experimenty založené na genetickej evolúcii:

1.      Informácie o jazyku sú uložené v pamäti jedinca a nie v jeho génoch. Neexistuje jazykový orgán ale niekoľko základných kognitívnych schopností agenta, ktoré sa pokladajú za vrodené a jazyk si s nimi musí vystačiť.

2.      Jazyk sa zachováva šírením a učením v komunite, čo by sme mohli pomenovať kultúrnym procesom.

3.      Zmeny jazyka môžu nastať rôznym spôsobom. Komunikácia medzi jedincami nemusí byť v inicializačnej fáze a pri komunikácii stopercentná. Do komunity môže vstúpiť cudzinec, alebo sa môže chcieť jedinec v komunite zámerne odlišovať a podobne.

4.      Selekciu, teda to, aké formy z jazyka sa zachovajú, určujú rôzne faktory. Príkladmi takýchto faktorov sú: snaha maximalizovať úspech komunikácie, snaha znížiť pamäťové nároky, zrýchliť kognitívne procesy, byť schopný popísať objekty, schopnosť dorozumieť sa a iné.

5.      Jazyková koherencia vzniká samoorganizáciou. Medzi komunikáciou agentov je pozitívna spätná väzba, ktorá zaručuje označovanie úspešnosti. Formy, ktoré sú úspešné v používaní, sa preferujú, čo vedie k ich ďalším úspešným použitiam.

Sledovaním priebehu interakcií medzi agentmi môžeme sledovať sociálnu evolúciu jazyka. Poznatky o priebehu môžu priniesť trochu viac svetla do evolúcie jazyka vo svete ľudí. Tiež nám pomôžu bližšie pochopiť, ako sa jazyk vyvinul, čo všetko je potrebné – akými kognitívnymi vlastnosťami musí agent disponovať, aby jazyk vôbec mohol vzniknúť.

2.4.2       Štruktúra systému

2.4.2.1  Multi–agentové systémy

Multi–agentové systémy sme spomínali už pri definícii jazykovej hry. Sú to systémy založené na agentoch – samostatných entitách bez centrálneho riadenia. Jedným z prvých vedeckých smerov, ktorý začal využívať takéto systémy, bol umelý život [43].

Priebeh simulácie v multi–agentových prostrediach môže byť rôzny. Ak je prostredie reálne (fyzicky realizované) [11,12,14,32], priebeh simulácie je okamžitý. To znamená, že každá entita (agent) v systéme má vlastný výpočtový čas a ten môže využiť podľa vlastných potrieb. Simuláciu je niekedy ťažké presne zastaviť, prípadne sa v nej vrátiť späť. Tieto simulácie sú vysoko paralelné.

Počítačové simulácie majú väčšiu možnosť riadiť svoj priebeh. Jednak vedia simulovať paralelizmus ako pri reálnych systémoch, no môžu tiež celú simuláciu rozdeliť do krokov. V každom kroku môže podľa potreby spraviť svoje akcie jeden alebo viac agentov. Vďaka takejto možnosti riadenia priebehu simulácie je jednoduchšie sledovať závislosti v systéme, prípadne príčiny vzniku niektorých javov.

Pri jazykových hrách sa využíva simulovanie po krokoch, kde v každom kroku prebehne jedna jazyková hra – interakcia medzi dvoma vybratými agentmi.

2.4.2.2  Deterministické systémy

Inou možnosťou na experimenty sú matematické modely, ktoré sú presné a navyše umožňujú dosiahnuté výsledky aj dokázať.

Ak by sme chceli vytvoriť deterministický multi–agentový systém, museli by sme z neho odstrániť náhodnosť. V našom prípade pri jazykových hrách nastáva náhodnosť vždy vtedy, keď sa rozhoduje, či sa akcia podľa nejakej pravdepodobnosti vykoná. Napríklad, či si agent vytvorí nové slovo (ak mu chýba v slovníku), či prijme počuté nové slovo a podobne.

De Jong v [26] ukazuje, že zo simulácie jednoduchej jazykovej hry sa dá odstrániť náhodnosť tak, aby si systém zachoval svoje vlastnosti. Tento deterministický systém konverguje do atraktorov, v ktorých je dosiahnutá stopercentná komunikácia medzi agentmi. V [26] je poskytnutý dôkaz (jeho rozsah prekračuje zámery tejto práce a preto ho nebudeme uvádzať) uvedenej konvergencie. De Jong ďalej uvádza, že nedeterministická verzia systému konverguje do určitých stavov – tzv. pseudo–atraktorov. Táto konvergencia závisí od nastavenia parametrov simulácie (viac sa o tom zmienime v ďalšom texte pri otvorených systémoch).

Matematické modely jazykových hier sú tiež témou výskumov [4,5,39].

2.4.3       Otvorenosť

2.4.3.1  Zatvorené systémy

Multi–agentové prostredie, v ktorom sa nemení počet agentov, sa nazýva zatvorené. Zatvorené prostredia nemajú význam pri genetickej evolúcii, pretože u nej je fluktuácia agentov potrebná.

V [7] sú prezentované výsledky niekoľkých uzavretých jazykových hier. Po niekoľkých hrách systém dosiahne stav, kedy je väčšina jazykových hier úspešná a tento stav sa nemení (viď Obrázok 3 – úspešnosť hier).

Obrázok 3 – úspešnosť hier

Výsledky simulácie, ktorú sme podľa [7] realizovali v našom programe.

Je to spôsobené tým, že v tomto stave v systéme nie je nič, čo by doň prispelo nejakou radikálnou zmenou (ako napríklad nové slovo). Každý agent má väčšinu preferovaných slov rovnakých, čo vedie k porozumeniu si v populácii agentov. Tým sa zvyšuje úspešné použitie tých istých slov, ktoré si stále viac a viac upevňujú svoje miesta v slovníkoch agentov. V každom kroku sa preto počet úspešných hier približuje k maximu.

2.4.3.2  Otvorené systémy

V otvorených systémoch pribúdajú nové agenty a odchádzajú staršie agenty, ktoré boli v systéme už niekoľko krokov simulácie. Pribúdanie aj ubúdanie agentov sa často definuje pomocou pravdepodobností. V každom cykle je pravdepodobnosť, že pribudne nový agent pp a pravdepodobnosť odchodu staršieho agenta po.

Fluktuácia agentov spôsobuje v systéme rôzne javy a ovplyvňuje výsledky experimentu. Jedným z ovplyvnených výsledkov je pri jazykových hrách počet úspešných hier. Pribúdanie a ubúdanie agentov vplýva na úspešnosť hier niekoľkými spôsobmi [7,15,31].

Ak agenty pribúdajú pomaly, teda pp je nízka (približne 0.00025), celá populácia sa vie rýchlo zosynchronizovať, a aj keď po pribudnutí agentov klesne úspešnosť komunikácie, je v krátkom čase napravená (viď Obrázok 4 – úspešnosť hier a veľkosť populácie).

Obrázok 4 – úspešnosť hier a veľkosť populácie

Spodnejšia čiara predstavuje počet agentov, vrchnejšia úspešnosť hier.

 Výsledky simulácie, ktorú sme podľa [7] realizovali v našom programe.

Nové agenty prinášajú do systému dočasnú nestabilitu, lebo ich slovníky sú prázdne. Preto každá hra, ktorej sa zúčastňujú, je neúspešná, až kým si nedotvoria svoje slovníky. Dotvorený slovník nových agentov odzrkadľuje stav pamäti (pod pamäťou rozumieme všetky slovníky všetkých agentov, akoby globálnu vedomosť celého systému), ktorou systém disponuje. Nové agenty môžu tiež prispieť novými slovami.

Obrázok 5 – úspešnosť hier a veľkosť populácie 2

Ak je pravdepodobnosť pp vysoká (napr. 0.001), pribúdanie nových agentov je tak rýchle, že sa systém nestíha synchronizovať a úspešnosť komunikácie stále klesá (viď Obrázok 5 – úspešnosť hier a veľkosť populácie 2). Počet jazykových hier nie je dostatočný na prísun nových agentov, preto sa ich slovníky nestíhajú dotvoriť. Dôsledkom je veľký počet neúspechov pri hrách.

Pri odchode agenta je situácia iná. Agent zo sebou odnesie svoje vedomosti, ale taktiež možnosť pre neúspešnú hru, ak jeho slovník ešte nebol dostatočne vyvinutý. Nižší počet agentov má k dispozícii viac krokov a teda viac jazykových hier, ktoré skôr dorovnajú rozdiely v ich slovníkoch. Takže odchodom agentov stúpa úspešnosť komunikácie k maximu oveľa rýchlejšie (viď Obrázok 6 – úspešnosť hier a veľkosť populácie 3).

Ostáva spomenúť, ako sa systém správa, keď je v ňom plná fluktuácia agentov, odchod aj príchod. Platia tu podobné výsledky, ako sme už uviedli. Ak sú pravdepodobnosti nízke, systém sa vyrovnáva so zmenou v krátkom čase. Teda výsledok je podobný situácii na [Obrázok 4 – úspešnosť hier a veľkosť populácie]. Naopak, pri veľkých pravdepodobnostiach sa systém nestíha stabilizovať a priebeh experimentu sa viac podobá [Obrázok 5 – úspešnosť hier a veľkosť populácie 2]. Treba si uvedomiť, že aj keď samotný odsun agentov má priaznivý vplyv na úspešnosť hier, v spolupráci s prísunom nových agentov je jeho vplyv presne opačný. Pridaním nového agenta a odobratím starého sa ešte viac prehlbuje podiel nových agentov voči starším a tak sa systém dostáva bližšie k stavu, v ktorom začínal.

Obrázok 6 – úspešnosť hier a veľkosť populácie 3

Klesajúca čiara predstavuje počet agentov a stúpajúca čiara úspešnosť hier.

Výsledky simulácie, ktorú sme podľa [7] realizovali v našom programe.

Asi by stálo zato preskúmať, ako sa bude systém správať, keď po pribudnutí agenta tento bude niekoľko prvých hier len v pozícii poslucháča. Tento model by viac pripomínal realitu, v ktorej sa deti tiež najskôr len učia a až neskôr aktívne prispievajú svojimi vedomosťami k formovaniu jazyku.

Taktiež by bolo zaujímavé skúmať simuláciu, v ktorej sa príchody a odchody agentov neriadia pravdepodobnosťami, ale sa dejú spontánne medzi agentmi. Dva agenty by "splodili" nového agenta, ak si dobre rozumejú a majú na to dosť síl a staršie agenty by umierali na starobu (na počet simulačných krokov). Takáto simulácie je už kombináciou sociálnej evolúcie s genetickou.

Otvorenosť systému je dôležitá vlastnosť pri experimentoch, viac približuje realitu a prináša do emergencie nové javy [6,7,17,29,31].

2.4.4       Priestor

2.4.4.1  Nepriestorové hry

Agenty v jednoduchých jazykových hrách nie sú uložené v priestore. Nemajú žiadnu polohu, nepohybujú sa. Pozeráme sa na ne iba ako na množinu agentov, z ktorej náhodne vyberieme dva, medzi ktorými prebehne jazyková hra.

Takáto vlastnosť systému zaručuje, že agenty si sú rovnocenné. Slová sa medzi nimi šíria s rovnakou pravdepodobnosťou. Ale aj takto je možné agenty rozdeliť do viacerých skupín, množín, a robiť jazykové hry len v rámci skupín a neskôr aj medzi skupinami.

2.4.4.2  Priestorové hry

Jazykové hry by mohli prebiehať aj závisle od priestoru [7,31]. Nestačí však len pridať agentom ďalšiu vlastnosť, akou je poloha v priestore. Treba určiť, akú úlohu bude tento priestor v experimente zohrávať.

Obrázok 7 – rozdelenie 20 agentov na mriežke po skupinkách

Obrázok je uvedený v [7]

 

V jednom z prvých experimentov [7] sa sledoval priebeh jazykovej hry, kedy bol výber agentov pre vzájomnú komunikáciu závislý na ich vzájomnej polohe. Agenty boli rozmiestnené na 2D mriežke po niekoľkých skupinkách. Na niektorých miestach boli agenty blízko seba, ale skupinky boli od seba dosť ďaleko (viď Obrázok 7 – rozdelenie 20 agentov na mriežke po skupinkách).

Pravdepodobnosť výberu dvoch agentov bola určená podľa jednoduchej priestorovej funkcie, čím ďalej boli agenty od seba, tým bola pravdepodobnosť menšia. Takýto výber agentov na komunikáciu zapríčinil, že každé zoskupenie si vytvorilo vlastný jazyk. Keďže skupinky hovorili z veľkej časti len medzi sebou, každá skupinka dosiahla samostatnú úspešnosť v hrách. Teda v rámci jednej skupinky bola komunikácia veľmi úspešná.

Napriek tomu si agenty ako celok nevytvorili jeden jazyk, ale jazyk pre každú skupinku zvlášť. Z toho plynie záver, že samotná úspešnosť komunikácie sa nedá zobrať ako ukazovateľ toho, že agenty majú spoločný jazyk.

V experimente sa po niekoľkých krokoch zrušil výber podľa vzdialenosti, agenty sa začali vyberať ľubovoľne. Ako vidno na [Obrázok 8 – úspešnosť hier v priestorových hrách], po tejto zmene nastal pokles úspešnej komunikácie, pretože agenty mali vytvorené slovníky iba v rámci svojej komunity.

Obrázok 8 – úspešnosť hier v priestorových hrách

Najprv prebiehali interakcie podľa vzdialenosti, v kroku 5000 začali globálne interakcie.

 Výsledky simulácie, ktorú sme podľa [7] realizovali v našom programe.

V slovníkoch agentov nastala zaujímavá situácia. Každý agent mal preferované slová podľa lokálneho jazyka skupiny. Ďalšie slová pre objekt boli slová ostatných skupín. Takže agent sa jednak vedel dorozumieť vo svojej skupine a tiež jeho slová poznali agenty v iných skupinách, aj keď ich nepoužívali. Takýmto spôsobom sa dá nasimulovať bilingvalizmus.

Situácia sa trochu zmenila, keď nastali globálne interakcie (vzdialenosť už nehrala rolu). Potom sa do popredia všetkých agentov začali dostávať rovnaké slová a lokálne jazyky zanikali.

V [31] bola priestorovosť využitá na klasifikáciu skupín objektov. Objekty, o ktorých sa agenty rozprávali, boli uložené na mriežku po skupinkách. Pravidlá jazykovej hry sa zmenili tak, že si pri výbere nového slova agent nevytváral nové slovo, ale preskúmal svoj slovník a použil slovo iného objektu podľa nejakej analogickej funkcie. V tomto prípade bola analógia podľa vzdialenosti, takže najbližšie objekty si boli navzájom najpodobnejšie. Takto bolo možné pomenovať jedným slovom celú skupinu objektov. A aby agent nepomenoval všetky objekty iba jedným slovom, bol naviac pridaný parameter pre minimum slov v slovníku, po ktorých môže začať analógia pri pomenovávaní objektov. Táto hra bola nazvaná analogická pomenovávacia jazyková hra.

Na [Obrázok 9 – globálny slovník po 10000 hrách] je výsledný slovník jedného z agentov po takejto hre. Slovník obsahuje asociácie pre 30 objektov a 5 slov. V matici je obsiahnutá pravdepodobnosť použitia slova pre daný objekt. Objekty tvoria 3 skupiny, C1 až C3 rozmiestnené podobne ako na obrázku 7. Z tabuľky vidno, že agent si vytvoril 5 tried pre skupiny objektov. W1 je trieda pre skupinu C1. Pre skupinu C2 má agent 2 triedy, W2 a W5. Tieto triedy sú rôzne!

V [31] je aj grafická reprezentácia danej tabuľky. Pre každú triedu je vypočítané ťažisko a priemer rozptylu. Potom sú na mriežke pre objekty nakreslené kružnice pre danú triedu s vypočítaným stredom a priemerom.

Ďalej sú v [31] popísané výsledky simulácií pri fluktuácii agentov (otvorený systém) a pri rôznych nastaveniach parametra pre veľkosť slovníka.

Obrázok 9 – globálny slovník po 10000 hrách

Obrázok je v [31]

2.4.5       Zložitosť jazyka

2.4.5.1  Holistické a primitívne jazyky

Pod primitívnymi jazykmi rozumieme jednoduché jazyky bez gramatickej štruktúry. Význam nadobúdajú iba samotné slová. Vo väčšine jazykových hier vznikajú primitívne jazyky. Primitívny jazyk môžeme reprezentovať jednoduchou asociačnou tabuľkou ako napríklad v [Tabuľka 1 – jednoduchý slovník].

Obrázok 10 – holistické a štruktúrované jazyky

Holistické jazyky [21,23,26] patria medzi primitívne. Tieto jazyky nemajú žiadnu štruktúru a teda ani nevedia zachovať štruktúru významov v prostredí a preniesť ju do jazyka. Znázornenie holistického jazyka je na [Obrázok 10 – holistické a štruktúrované jazyky] vľavo.

2.4.5.2  Štruktúrované jazyky

Štruktúrované jazyky oproti holistickým, prenášajú štruktúru priestoru významov do jazyka [21] (viď Obrázok 10 – holistické a štruktúrované jazyky vpravo). [21] popisuje rad článkov, ktoré sa zaoberali možnosťami simulácií, ktorých výsledkom sú štruktúrované jazyky.

Aby sa štruktúrované jazyky mohli vôbec vytvoriť, musí najprv existovať štruktúra v prostredí, ktorú má jazyk mapovať. S narastajúcou komplexnosťou jazyka narastá aj komplexnosť agenta. Obyčajná asociačná tabuľka by si s takýmto jazykom neporadila, pretože nemá možnosť uchovávať informácie o jeho štruktúre.

V niektorých experimentoch sa podarilo spraviť jednoduché štruktúrované jazyky pomocou rekurentných neurónových sietí [28].

2.4.5.3  Gramatika

Podľa Gärdenforsa [33] sa komunikačné systémy delia do 6 tried. Systémy sú vytvorené podľa mentálnych reprezentácií nutných k tomu, aby mohol vzniknúť jazyk – vyvolané a oddelené. Vyvolané reprezentácie sú závislé na situácii, ktorá vie reprezentáciu vyvolať – pripomenúť (napríklad bolesť pri popálení), zatiaľ čo oddelené reprezentácie môžu byť použité – vyvolané ľubovolne (napríklad spomienka). Z hľadiska možnosti skladania prvkov sa delia na: systémy so samostatnými prvkami, kompozičné systémy a systémy s gramatikou.

Obrázok 11 – typy jazykov

Obrázok je z [33]

Naše primitívne a holistické jazyky patria do skupiny typu 1 a 4. Kompozičné jazyk do skupiny typu 2 a 5.

Nasimulovať jazyk typu 6 je jedným z cieľov evolučnej lingvistiky. Jazyk typu 6 bude asi vyžadovať silné mentálne schopnosti agenta a taktiež veľkú zložitosť prostredia. Inými slovami, jednoduchosť doteraz popísaných experimentov neumožňuje ani emergenciu takéhoto jazyka, lebo prezentované agenty nemajú potrebné kognitívne vlastnosti na vytvorenie jazyka s gramatikou.

2.4.6       Reprezentácia významov

Pri jazykových hrách sa agenty "rozprávajú" o nejakom význame, ktorý existuje v ich prostredí, tým, že ho pomenuvávajú. Experimenty môžeme rozdeliť aj podľa toho, ako si agenty tento význam vnútorne reprezentujú (teda akým spôsobom je zapísaná relácia slovo – význam). Uvedené spôsoby reprezentácií nie sú jediné možné [27].

2.4.6.1  Objekty

Pod objektom v prostredí môžeme rozumieť samotné agenty, prípadne iné prvky, ktoré sme schopní zakomponovať do reprezentácie prostredia. Takto sa samotné agenty môžu stať predmetom komunikácie dvoch agentov pri jazykovej hre. Voľba objektu ako významu nie je najvhodnejšia v reálnejších simuláciách, ale pre jednoduché experimenty vyhovuje. Tento spôsob reprezentácie sa používa vo väčšine experimentov s jednoduchými jazykovými hrami.

Pri použití asociačnej tabuľky ako reprezentácie slovníka nám ako význam stačí použiť jednoznačné označenie objektu, napríklad meno agenta. Ďalšou výhodou je fakt, že všetky agenty majú reprezentáciu v "pamäti" rovnakú, keďže používajú ako významy rovnaké označenia pre objekty.

2.4.6.2  Diskriminačné stromy

Diskriminačné stromy [11,12,10,22,27] sa používajú na reprezentáciu významov, ktoré disponujú črtami. Takýto spôsob reprezentácie je bližší realite a je aplikovateľný aj v aplikáciách s reálnymi robotmi so senzorickými vstupmi [9,11,12,14,32]. Agent má niekoľko vstupov – kanálov z prostredia ohodnotených ako reálne čísla, najčastejšie od 0 do 1 (ale môže to byť aj iný rozsah) a každý význam (objekt v prostredí) je vnímateľný týmito kanálmi (teda vnímanie objektu je realizované prečítaním hodnôt na vstupoch).

Diskriminačné stromy slúžia na mapovanie reálnych hodnôt prostredia na diskrétne hodnoty. Ku každému kanálu je vytvorený jeden diskriminačný strom. Keď agent potrebuje rozlíšiť objekt spomedzi niekoľkých objektov (nazývame ich kontext), snaží sa ho odlíšiť pomocou vytvorených diskriminačných stromov. Ak objekt nevie rozlíšiť, môže napríklad rozdeliť niektorú vetvu diskriminačného stromu na dve časti. Úprava diskriminačného stromu ešte neznamená úspešné rozlíšenie objektu od ostatných. Či bola zmena užitočná, sa zistí až pri ďalšom rozlišovaní objektu. Takto vzniká diskriminačný strom pre kanál a jednotlivé rozdeľovanie prináša väčšiu presnosť v rozlišovaní objektov (viď Obrázok 12 – diskriminačný strom).

Obrázok 12 – diskriminačný strom

Diskriminačný strom jedného kanálu, ktorý bol rozdelený 2-krát [22].

Postup na rozlišovanie objektov, ktorý sme jednoducho popísali, je známy ako rozlišovacia hra (discrimination game) [10,11,27]. Diskriminačné hry hrajú agenty väčšinou pred samotnými jazykovými hrami a slúžia na konceptualizáciu prostredia – agenty sa učia  rozlišovať objekty existujúce v prostredí.

Z postupu vytvárania diskriminačných stromov nie je zaručené, že si agenty reprezentujú (rozlišujú) objekty rovnako. Agenty mávajú väčšinou diskriminačné stromy odlišné.

Pri samotných jazykových hrách sa na reprezentáciu významu používajú takzvané črty objektov, ktoré sa získavajú zo vzniknutých diskriminačných stromov. Črty objektov sú vrcholy diskriminačného stromu, ktoré jednoznačne odlišujú objekt od kontextu. Agent rozlíši objekt, ktorý je témou pre jazykovú hru, od kontextu pomocou čŕt, ktorým priradí slovo. Poslucháč si podľa počutého slova nájde črty s rovnakým pomenovaním a podľa nich sa snaží vybrať objekt z aktuálneho kontextu. Ak sa objekty zhodujú, hra bola úspešná.

2.4.6.3  Prototypy

V [30] sú na reprezentáciu významu použité prototypy. Agenty si pri tomto experimente konceptualizujú svet, ktorý pozostáva zo situácií (n – rozmerný vektor), pri  ktorých môže agent  zvoliť nejakú akciu (reálne číslo). Prototypy spočívajú v diskriminácii priestoru pre jednotlivé situácie a akcie. V aktuálnej situácii volí agent akciu podľa toho, aký prototyp k situácii nájde. Konceptualizácia sveta pre agenta znamená vytvorenie takých prototypov, aby v prostredí pri rôznych situáciach volil čo najoptimálnejšie akcie. Ku konceptualizácii prispieva vonkajšia spätná väzba prostredia, ktorá ohodnocuje zvolené akcie agenta.

Napríklad agent môže začínať s niekoľkými náhodnými prototypmi. V [30] boli na začiatku prototypy vytvorené genetickým procesom.

V samotnej jazykovej hre agent pomenováva akcie, ktoré je schopný zvoliť. Akciu, ktorú má rozprávač pomenovať v danej situácii, zistí podľa vytvorených prototypov. Poslucháč najskôr vyberie všetky svoje akcie zodpovedajúce počutému slovu. Potom určí, akú akciu by zvolil on podľa aktuálnej situácie. Ak sa táto akcia nachádza medzi vybratými akciami, hra bola úspešná.

Ďalší príklad použitia prototypov popisuje [27].

2.4.7       Reprezentácia slovníka v agentoch

Existujú aj iné spôsoby reprezentácií, ako sú uvedené. Napríklad reprezentácia jazyka gramatikou [24].

2.4.7.1  Asociačná tabuľka

Slovník môžeme reprezentovať jednoduchou asociačnou tabuľkou, ktorá uchováva asociácie medzi slovom a významom. Ku každému významu, ktorý agent pozná, existuje zoznam slov, ktoré pomenovávajú daný význam. V tabuľke sa môžu tiež uchovávať ďalšie informácie, napríklad počet použití páru slovo – význam, počet úspešných použití a pod.

 

Príklad slovníka:

obj1 

PUA, 20, 10;

LOPA, 19, 2

obj2

HATA, 1,1;

 

obj3

LET, 14, 3;

TOTE, 10, 4

Tabuľka 1 – jednoduchý slovník

Z tabuľky 1 napríklad zistíme, že pre význam obj1 existujú dve slová: PUA a LOPA, pričom slovo PUA bolo v jazykovej hre použité 20-krát, z toho 10-krát úspešne.

2.4.7.2  Neurónová sieť

Aby sme mohli prejsť k zložitejším jazykom, akými sú napríklad štrukturované jazyky, je potrebná aj zmena reprezentácie slovníka. Asociačná tabuľka pre zložitejšie jazyky nepostačuje. Môžeme však k tejto tabuľke priradiť iné pomocné mechanizmy, v ktorých by sme si pamätali štruktúru jazyka. Jednou z ďalších možných reprezentácií sú neurónové siete [25,28,40,41].

V [28] boli na rozpoznávanie aj generovanie slov použité rekurentné neurónové siete.

Obrázok 13 – model jazykovej hry pomocou neurónových sietí

Obrázok je uvedený v [28]

 

Na [Obrázok 13 – model jazykovej hry pomocou neurónových sietí] je znázornený model jazykovej hry, ktorý bol použitý v [28]. Rozprávač dostal ako vstup význam. Významy mali v tomto experimente preddefinovanú štruktúru. Agent zvolený význam pomocou rekurentnej neurónovej siete zakódoval do reťazca, teda pomenoval ho. Ďalší agent – poslucháč dostal reťazec od rozprávača a ten dal ho na vstup svojej rekurentnej neurónovej siete. V poslucháčovi prebehne učenie jeho neurónovej siete, ktoré  má za úlohu priblížiť rozpoznávanie reťazca, ktorý pomenúva význam k samotnému významu.

V jazyku, ktorý si vytvoria rekurentné neurónové siete, zostane zachovaná štruktúra významov. [Obrázok 14 – vytvorené slovníky modelu s neurónovými sieťami] vľavo predstavuje vytvárané slová neurónovou sieťou na začiatku simulácie a vpravo po prebehnutí simulácie. V [28] sa po analýze jazyka, ktorý vznikol pomocou neurónových sietí, ukázalo, že v jazyku ostala zachovaná štruktúra, s akou boli vytvorené významy pre komunikáciu agentov.

Obrázok 14 – vytvorené slovníky modelu s neurónovými sieťami

Obrázok je z [28]

Jednoduchú analýzu jazyka vytvoreného neurónovými sieťami zobrazuje [Obrázok 15 – analýza jazyka neurónových sietí]. Z analýzy vidno, že neurónové siete používali pre niektoré štruktúry významu rovnaké pomenovania (sufixy).

Obrázok 15 – analýza jazyka neurónových sietí

Významy boli skladané zo slov z prvého riadku a prvého stĺpca. Pre každý význam v

tabuľke je analýza jeho pomenovania. [28]

 

2.4.8       Spoľahlivosť komunikácie agentov

Pri experimentoch sa väčšinou neuvažuje strata alebo zašumenie komunikácie agentov pri jazykovej hre. Dôvodom býva jednoduchosť experimentu.

Zašumenie komunikácie agentov je jednou zo zaujímavých vlastností systému a približuje experiment k reálnym podmienkam. Pod zašumením komunikácie sa najčastejšie rozumie zmena prenášanej informácie medzi agentmi, keď hrajú jazykovú hru.

Mierny šum môže mať pozitívny prínos do dynamických systémov [13, 15]. Je zdrojom variácií tam, kde chýba genetická mutácia. Pri jazykových hrách sa ukázalo, že slovník emerguje aj v zašumenom prostredí, pri zašumení, ktoré predstavovalo až 10% komunikácie. Vzhľadom na tieto výsledky nie je až také nutné pri každom experimente používať v prostredí šum. Výsledky experimentov nebývajú veľmi rozdielne vzhľadom na kvalitu prenosu (samozrejme iba do určitej miery zašumenia).

2.5      Miery

Dôležitou časťou experimentov sú výsledky a ich korektná interpretácia. Nastavovaním parametrov sa dajú získať rôzne výsledky pri rovnakých simuláciách.

2.5.1       Úspešnosť hier

Jednou zo základných mier je percentuálna úspešnosť jazykových hier. Keďže jazykové hry prebiehajú v kolách a v jednom kole prebehne jedna jazyková hra (nemusí to byť ale pravidlo), treba sa pozerať na túto mieru po viacerých hrách, napr. 20. Tak sa dá získať percentuálna úspešnosť jazykových hier. Od veľkosti tohto okna bude závisieť, nakoľko presne budeme pozorovať výkyvy úspešnosti hier.

Vysokú úspešnosť hier môžeme špecifikovať ako bod, keď má populácia agentov vytvorený spoločný slovník. Ale nemusí to byť pravda [7,31]. Treba si uvedomiť, že agent môže mať k jednému významu viac slov a fakt, že s iným agentom úspešne komunikuje, ešte neznamená že ich preferované slová sú rovnaké. To znamená, že i napriek vysokej miere úspešnosti hier, sa medzi agentmi nemusel vytvoriť rovnaký slovník.

2.5.2       Koherencia a lokálna koherencia

Koherencia [31] je mierou, podľa ktorej môžeme povedať, či existuje medzi agentmi rovnaký jazyk – jednotný slovník.  Koherencia je tým väčšia, čím viac agentov používa tie isté slová pre významy. Preferované slová významov sa stávajú globálne v populácii agentov.

Koherenciu počítame tak, že pre každý význam vyberieme jeho najpreferovanejšie slovo spomedzi všetkých agentov a vyjadríme percentuálne zastúpenie tohto slova pre daný význam spomedzi ostatných slov. Takto dostaneme koherenciu pre jeden význam. Z priemeru všetkých koherencií pre jednotlivé významy dostaneme celkovú koherenciu.

Dôležitá miera podobná koherencii je lokálna koherencia. Pri priestorových experimentoch a lokálnych jazykových hrách, sa vytvárajú slovníky v malých komunitách, podľa rozloženia agentov v priestore. V takomto prípade je globálna koherencia veľmi nízka, ale lokálne koherencie pre jednotlivé skupiny sú vysoké. Taktiež úspešnosť hier môže byť vysoká. Agenty sa prispôsobia s viacjazyčnými slovníkmi (bilingvalizmus), ktoré obsahujú preferované slová v rámci komunity a slová, ktoré sa používajú pri dorozumievaní sa s agentom z inej komunity.

2.5.3       Zhoda slovníkov

V [7] bola použitá miera na sledovanie zhody slovníkov medzi skupinami agentov. V prípade, keď sa vytvárajú skupinky s vlastnými jazykmi, táto miera bola použitá na zistenie podobnosti slovníkov dvoch skupín. Podobnosť bola určovaná medzi dvoma skupinami a zisťovala, koľko preferovaných slov prvej skupiny sa vyskytuje u druhej skupiny a naopak.

2.5.4       Špecificita

Koherencia by mohla nastať aj v prípade, keď sa pre každý význam používa jedno slovo. Na sledovanie takéhoto správania sa používa miera špecifity [26] slovníka. Táto miera určuje rozmanitosť používaných slov pre jednotlivé významy. Keď pre každý význam existuje iné slovo, špecificita je 1 (alebo 100%). Špecificita sa dá vyjadriť ako jednoduchý pomer počtu preferovaných slov a počtu  významov. Pre každý agent môžeme spočítať jeho špecificitu slovníka. Priemer zo všetkých mier špecificity slovníkov je globálna špecificita.

2.5.5       Neistota klasifikovania

Neistota klasifikovania [26] je veľmi podobná koherencii. Sleduje, s akou pravdepodobnosťou bude agent v jazykovej hre úspešný pre daný význam. Miera vyjadruje, koľko iných agentov používa rovnaké slová. Keď je koherencia 1, neistota klasifikovania je 0; sú to doplňujúce sa pravdepodobnosti. Táto miera má však zmysel skôr lokálny než globálny.

2.6      Parametre

Popri samotných výsledkoch experimentu je dôležité vedieť, za akých nastavení daný experiment prebiehal. Pri simuláciách s rôznymi nastaveniami parametrov sa získavajú poznatky o závislosti výsledkov na parametroch a tiež o závislosti nastavení iných parametrov, aby bol experiment úspešný. Táto kapitola popisuje iba niektoré základné parametre z definície 1 a z jednoduchých experimentov.

2.6.1       Obmedzenie slov  slovníka

Tento parameter určuje, koľko slov si agent môže zapamätať. Pri niektorých simuláciách je potrebný aj parameter pre minimálny počet slov v slovníku. Kapacita slovníka ovplyvňuje výsledný jazyk agentov. Ak je slov veľmi málo (menej než významov), v slovníku sa vytvoria homonymá. Pri veľkom počte možných slov narastá čas konvergencie globálneho slovníka.

2.6.2       Počet krokov simulácie

Počet krokov simulácie je dôležitý pre jej úspešnosť. Tento parameter závisí napríklad na počte agentov v prostredí. Keďže sa v každom kroku udeje jedna jazyková hra, s narastajúcim počtom agentov je nutné robiť veľa krokov simulácií, aby sa dostavili požadované výsledky.

2.6.3       Vytvorenie a absorpcia nového slova

Ak agent pri jazykovej hre nemá, resp. nepozná použité slovo pre význam, môže si ho vytvoriť podľa pravdepodobnosti vytvárania slov, resp. prijať ho za svoje podľa pravdepodobnosti absorpcie slov. Pokiaľ sú oba parametre nízke, potrvá dlhšie, kým si agenty vyrobia slovníky. Ak je nízka iba pravdepodobnosť pre vytváranie nových slov, budú slovníky agentov oveľa viac podobné, lebo agenty budú mať tendenciu slová radšej prijať, než si vytvoriť nové. Ak je nízka pravdepodobnosť prijatia slov, spoločný slovník sa bude vytvárať ťažko a pomaly, lebo agenty nebudú mať tendenciu prijať cudzie slová.

2.6.4       Vstup nového agenta

Ak počas simulácie vstupujú agenty do prostredia a začleňujú sa do jazykovej hry, treba počítať so spomalením vytvárania globálneho jazyka. Každý nový agent má prázdny slovník, preto je komunikácia s ním spočiatku neúspešná a taktiež to negatívne prispieva ku globálnej koherencii.

Pravdepodobnosť vstupu agenta určuje možný prírastok v každom kroku simulácie. Ak agenty pribúdajú rýchlo, možnosť na vytvorenie spoločného slovníka klesá. Naopak, pri pomalom pribúdaní agentov sa nové agenty stihnú prispôsobiť existujúcej komunite a tak prispieť do formovania globálneho jazyka.

2.6.5       Odchod agenta

Pri odchode agenta je situácia trochu iná ako pri príchode, ale nie celkom opačná. Odchod agenta môže mať pozitívny vplyv na vytvorenie spoločného slovníka, keď patril medzi agenty, ktoré nepoužívali iba preferované slová – slová podľa globálneho slovníka. V prípade, že odíde agent, ktorý prispieval na formovanie globálneho jazyka v plnej miere a jeho slovník bol s globálnym rovnaký (čo sa preferovaných slov týka), spomalí to formovanie globálneho slovníka. Menší počet agentov však na druhej strane urýchli proces formovania tohto slovníka.


3        Prostredie pre jazykové hry

Táto kapitola opisujeme nami vytvorený program ELGE – jeho komponenty, štruktúru, beh. Vysvetľujeme, ako fungujú hlavné časti programu, ako sa v ňom dá realizovať experiment a tiež ako je možné  program rozšíriť pre ďalšie experimenty. Kapitola netvorí referenčnú príručku programu, predstavuje skôr rýchleho sprievodcu v oboznamovaní sa s programom a vo vytváraní experimentov. Podrobná príručka je[1] k dispozícii priamo s programom.

3.1      Motivácia

Pri experimentoch s agentmi, ktoré hrajú jazykové hry, sa dá postupovať rýchlo dopredu a je potrebné takémuto postupu prispôsobiť aj prostredie. Dobré prostredie by malo poskytovať veľkú variabilnosť a nastaviteľnosť experimentu na užívateľskej úrovni, zároveň by malo byť dostatočne otvorené, by sa dalo jednoducho rozširovať aj programátorskými prostriedkami. Existujúce produkty, ktoré boli priamo vytvorené na experimenty s jazykovými hrami, nie sú verejne dostupné. Dostupné existujúce prostredia zas nevyhovujú celkom našim potrebám. Preto jedným z cieľov tejto diplomovej práce bolo navrhnúť a naprogramovať prostredie s vyššie uvedenými vlastnosťami, ktoré bude slúžiť ako nástroj na realizáciu experimentov s jazykovými hrami.

3.2      Existujúce prostredia

Z inštitútu Sony Computer Science Laboratory Paris, priamo od priekopníkov experimentov s jazykovými hrami pochádza asi jedno z prvých prostredí nazývané BABEL. Hoci sa nám podarilo nadviazať internetovú komunikáciu priamo s autorom prostredia Angusom McIntyre [16], nedostali sme uvedené prostredie k dispozícii. Toto prostredie je napísané v programovacom jazyku LISP.

Ako alternatíva k BABELu vzniklo ďalšie prostredie LEMMinS, ktoré bolo implementované v programovacom jazyku Java. LEMMinS pochádza z laboratória vo Francúzsku, Laboratoire Dynamique Du Langage – Université Lumière Lyon 2. Žiaľ, ani k tomuto prostrediu sme sa nedostali.

Iné simulačné prostredia ako RePast [18], Swarm [19] a AScape [20] sú navzájom veľmi podobné. Umožňujú robiť ľubovoľné multi–agentové simulácie. RePast a Swarm sú open source projekty, pričom RePast a AScape sú vytvorené v Jave, Swarm v C++. Veľkou nevýhodou týchto prostredí je, že žiadne z nich neumožňuje uložiť simuláciu v ľubovoľnom simulačnom kroku a neskôr si ju z uložených dát nahrať a pokračovať v nej. Taktiež modely vytvorené v týchto prostrediach sú málo nastaviteľné, napríklad pridávanie a odoberanie agentov z modelu sa nedá realizovať jednoducho a väčšinou musí byť zakomponované priamo v modeli. V našom programe sme sa snažili uvedené nedostatky odstrániť.

3.3      Štruktúra prostredia

Prostredie sa skladá z troch samostatných častí, ktoré medzi sebou spolupracujú a z jednej hlavnej riadiacej časti.

Organization Chart

Obrázok 16 – základná štruktúra prostredia

Základné tri časti prostredia sú svet, monitorovanie a užívateľské rozhranie. Všetky zastrešuje hlavná riadiaca časť. Každá časť má svoju úlohu a je čo najviac oddelená od ostatných častí.

Svet je jadrom samotnej simulácie. Zahŕňa v sebe agenty, ktoré sa počas simulácie dostávajú k slovu. Jednotlivé agenty sú oživované v postupnosti, ktorá závisí od implementácie a nastavení parametrov sveta. Svet spolu s agentmi a ich obsahom tvorí stavový priestor. Jednotlivé kroky simulácií sa dajú vyjadriť presným stavom sveta a jeho komponentov.

Monitorovanie slúži na získavanie údajov z prostredia. Systém monitorovania sa skladá z troch samostatných častí: monitorov, grafov a ukladača. Ukladač má na starosti samotné uloženie dát. Podľa jeho implementácie sa dáta môžu ukladať do súborov, databáz a pod. Ukladač zodpovedá za to, ako sa majú dáta ukladať. Aké dáta sa majú ukladať, definujú monitory. Monitory sme navrhli ako samostatné prvky prostredia (čo najviac nezávislé od sveta), čím sme docielili vyššiu univerzálnosť prostredia. Monitory sú znovupoužiteľné, dajú sa použiť vo všetkých experimentoch, pri ktorých sa sleduje rovnaký obsah, na aký boli vytvorené. Grafy slúžia na prezeranie výsledkov, dáta čerpajú z ukladača, nie z monitorov.

Obrázok 17 – tok dát pri monitorovaní

Užívateľské rozhranie síce využíva všetky časti programu, ale zvyšok systému je od neho nezávislý. Samotný experiment by po nastavení mohol prebehnúť aj bez neho. Užívateľské rozhranie slúži na nastavenie parametrov experimentu, jeho komfortné spustenie a sledovanie.

3.4      Základy prostredia

Riadiaci program začleňuje v sebe jednotlivé experimenty ako projekty. Naraz môžeme vytvárať a spúšťať viac projektov. Každý projekt má vlastné nastavenia a bežiace simulácie sa navzájom neovplyvňujú. Jeden projekt môže byť v riadiacom programe otvorený len raz.

Projekt zahŕňa všetko potrebné pre beh simulácie. Jeho súčasťou je jeden svet (model), ktorý používateľ zvolí pri vytváraní projektu a nedá sa už zmeniť. Ak v prostredí neexistuje žiaden použiteľný svet (nebol vytvorený), nedá sa vytvoriť ani nový projekt.

Pred spustením simulácie je potrebné nastaviť nasledovné:

·        Agenty, ktoré sa stávajú súčasťou sveta

·        Monitory, ktoré čerpajú informácie z celého projektu a posúvajú dáta v každom kroku simulácie ukladaču

·        Grafy, ktoré umožňujú priebežné sledovanie dát

Treba pripomenúť, že monitory a grafy nie sú podstatné pre samotný beh simulácie, ale manipulujú s dátami, ktoré sú v každej simulácii veľmi dôležité.

Ak systém neobsahuje svet, prípadne agenty, či monitory, ktoré by vyhovovali nášmu experimentu, musíme si ich dorobiť. Tomu sa budeme venovať v kapitole 3.7 Rozšírenie prostredia pre jazykové hry.

Po nastavení parametrov experimentu môže používateľ prejsť k samotným simuláciám. Nová simulácia vznikne vždy, keď sa spustí beh simulácie po obnovení (resete) experimentu alebo pri prvom spustení. Obnovenie modelu znamená nastavenie dát na ich počiatočné hodnoty, ktoré sa v priebehu simulácie postupne menili.

Simuláciu je možné v ľubovoľnom kroku prerušiť a uložiť. Taktiež je možné zmeniť počas simulácie všetky nastavovateľné parametre a potom v nej pokračovať už so zmenami.

Pre každú simuláciu sú dáta ukladané samostatne pod novým menom. Dáta jednotlivých simulácií sa dajú prezerať a exportovať, aby mohli byť použité v iných programoch.

Prostredie je pripravované na prírastok nových svetov, agentov a monitorov. Z tohoto dôvodu je nutné, aby prostredie vedelo vždy ponúknuť používateľovi pri výbere všetky prítomné implementácie uvedených entít. To zabezpečujú zberne. Zberne slúžia na uchovávanie všetkých doposiaľ implementovaných entít (svetov, agentov a monitorov). Pre každý typ entity je vyhradená samostatná zberňa.

3.5      Inštalácia a počiatočná konfigurácia prostredia

Skôr, ako začneme robiť konkrétne experimenty, je nutné, aby sme mali pripravené prostredie. Inštrukcie na inštaláciu a spustenie je možné nájsť aj v súbore priloženom spolu s programom.

Pri inštalácii postupujeme nasledovne:

a)      Adresár s programom nakopírujeme na zvolené miesto alebo program rozbalíme do zvoleného adresára.

b)      Pokiaľ nemáme v systéme k dispozícii interpreter javy[2] alebo je starší ako minimálne potrebná verzia, treba ho nainštalovať. Najnižšia podporovaná verzia je 1.4.

c)      Po úspešnom nainštalovaní interpretra  javy je možné spustiť prostredie dávkovým súborom. Podľa operačného systému treba zvoliť pre OS Windows run.bat alebo pre UNIX systémy run.sh z adresára, do ktorého sme nakopírovali prostredie.

d)      Ak prostredie nenabehne, treba skontrolovať body inštalácie a) a b).

e)      Pri prvom spustení si prostredie vypýta adresár, kde sa budú ukladať vytvárané projekty. Je potrebné zadať existujúci adresár.

Okno úspešne spusteného programu zobrazuje Obrázok 18 – hlavné okno programu.

Obrázok 18 – hlavné okno programu

Ďalším krokom pri prvom spustení programu je nastavenie zberní. Zberne treba nastaviť zvlášť pre svety, agenty a monitory. V menu hlavného programu Konfigurácia si treba vyvolať konfigurácie pre jednotlivé zberne (viď Obrázok 19 – zberňa agentov).

Obrázok 19 – zberňa agentov

Pokiaľ zberne ešte neboli nastavené, mali by byť prázdne. Rýchlu konfiguráciu prevedieme stlačením tlačidla Vyhľadaj. Štandardne by program po vyhľadaní mal v zberni pre svet obsahovať položku s názvom SimpleWorld, v zberni pre agenty by sa mali nachádzať položky s názvami SimpleAgent, AgentGenerator a AgentRemover a v zberni pre monitory položky s názvami WorldMonitor, WorldRatioMonitor, CoherenceMonitor a GroupCoherenceMonitor.

3.6      Experimenty

Táto časť popisuje postup, ako si nastaviť a spustiť niekoľko predpripravených experimentov. Experimenty sme zámerne zvolili tak, aby demonštrovali niektoré príznaky jazykovej hry popísané v kapitole 2.4 Príznaky experimentov.

3.6.1       Editor projektu

Obrázok 20 - editor projektu

 

Pre experimentovanie si musíme vytvoriť nový projekt alebo načítať do prostredia už existujúci projekt.

Vytvorenie projektu vyvoláme z hlavného okna programu cez menu Projekt/Nový. Program si vypýta názov projektu, ktorý zadáme, napríklad "Prvy projekt". Ďalším dialógom určíme svet, ktorý bude projekt používať. Pri výbere sveta zvolíme z dialógu položku s názvom SimpleWorld.

Po úspešnom vytvorení projektu sa zobrazí editor projektu (viď Obrázok 20 - editor projektu).

 

Editor projektu je hlavné okno pre experiment a jeho beh. Skladá sa z dvoch hlavných častí:

Prvú tvoria záložky, v ktorých je možné nastavovať parametre potrebné pre beh experimentu. Sú to zoznamy agentov, monitorov, grafov, dát simulácií, parametrov sveta a parametrov projektu. Každá záložka disponuje vlastnými prvkami na ovládanie.

Druhou časťou editora projektu sú prvky na ovládanie a sledovanie simulácie. Položka Krok zobrazuje, v ktorom kroku sa simulácia momentálne nachádza a v zátvorke sa počas behu simulácie zobrazuje, koľko krokov ešte simulácia pobeží. Simuláciu je možné odštartovať, prípadne v nej pokračovať stlačením tlačidla. Systém si vypýta počet krokov, ktoré má simulácia vykonať. Ak zadáme hodnotu –1, simulácia bude bežať bez obmedzenia, až kým ju neukončíme tlačidlom . (Počas behu simulácie sa tlačidlo mení na tlačidlo .) Tlačidlo  umožňuje postupovať v simulácii po jednom kroku. Tlačidlo  slúži na obnovu (reset) simulácie. Všetky nastavenia, ktoré sa počas simulácie zmenili, by sa mali dostať do pôvodného stavu. Avšak záleží od konkrétnej implementácie sveta, agenta či monitoru, ako sa bude správať v prípade obnovy simulácie. Preto si v prípade potreby prečítajte dokumentáciu k používanej implementácii sveta, agenta či monitora.

V menu editora projektu môžeme projekt uložiť, uložiť pod novým menom alebo zatvoriť.

3.6.2       Pridávanie agentov

Pri konfigurácii experimentu potrebujeme vedieť, ako pridávať do sveta agenty. Pridávanie môžeme realizovať viacerými spôsobmi. Agenty môžeme pridávať manuálne pomocou kontrolných prvkov zoznamu v záložke Agenty editora projektu. Druhou možnosťou je použitie generátorov. Generátory sú špecializované agenty, ktoré v prostredí plnia špeciálne funkcie a nepodieľajú sa na jazykových hrách. V prostredí sú dva pripravené generátory. Jeden slúži na pridávanie nových agentov do sveta, druhý na ich vyhadzovanie. Pri simulácii sa generátormi pridané resp. odobraté agenty pridajú resp. odoberú vždy na začiatku ďalšieho kroku simulácie.

Najprv si popíšeme vlastnosti generátora, ktorý pridáva agenty. V zberni agentov existuje pod položkou s názvom AgentGenerator. Popis jeho parametrov:

·        AgentTemplatetu treba nastaviť agent, ktorý bude generátor pridávať do sveta. Agent sa vyberá zo zberne.

·        GenCycleTypeurčuje, ako často bude generátor počas simulácie generovať nových agentov. Parameter môže nadobúdať jednu z hodnôt:

o              Tick period – generovanie prebehne v každom GenPeriod kroku

o              Every tick – generovanie prebehne v každom kroku simulácie

o              First tick – generovanie prebehne iba na začiatku simulácie, v 1. kroku

o              Exact tick – generovanie prebehne iba raz, v kroku GenPeriod

o              No gen. – neprebehne žiadne generovanie

·        GenPeriodslúži na určenie periódy alebo presného kroku generovania

·        GenProbpravdepodobnosť vygenerovania agenta, hodnota z intervalu <0,1>

·        InOneStepoznačuje, koľko agentov sa má generovať v jednom generovacom kroku. Skutočný počet agentov, ktoré pribudnú do sveta, závisí od pravdepodobnosti GenProb.

·        MaxAgentsurčuje, koľko agentov môže daný generátor v priebehu celej simulácie vygenerovať. Pre hodnotu –1 nie je počet agentov obmedzený.

Nasledujúce dva parametre majú význam iba pre svety, ktoré podporujejú rozmiestnenie agentov v priestore. V takom prípade si generátor od svetu vyžiada náhodnú pozíciu pre pridávaný agent.

·        RndPosition určuje typ generovania náhodnej pozície, nadobúda jednu z hodnôt:

o              around agent – vygeneruje náhodnú pozíciu v okolí samotného generátora v maximálnej vzdialenosti RndRadius

o              rnd on map – vygeneruje pozíciu náhodne v celom priestore

o              fix position – nastaví pozíciu agenta zhodnú s pozíciou generátora. Pokiaľ to svet umožňuje, všetky agenty budú v jednom bode.

·        RndRadius – určuje maximálnu vzdialenosť agenta od generátora

Keďže generátor je tiež agent, v prostredí s ním manipulujeme rovnako ako s agentmi, t.j. musíme ho vložiť do zberne agentov a patrične nastaviť.

3.6.3       Nastavovanie grafov

Ďalej si ukážeme, ako nastavovať grafy. Pridávanie, mazanie, editovanie a zobrazovanie grafov sa deje pomocou kontrolných prvkov v editore projektu v záložke Grafy. Pri pridávaní a editovaní grafu je potrebné sa oboznámiť s možnosťami nastavenia, ktoré poskytuje editor grafu (viď Obrázok 23 – konfigurácia grafu).

Pri nastavovaní grafu treba určiť:

·        hodnoty, ktoré chceme zobrazovať

·        typ grafu

·        názov grafu a osí X,Y

·        okno pre zobrazovanie dát

Implementovali sme štyri typy grafov.

Prvý typ je čiarový graf. Os Y predstavuje rozsah hodnôt zobrazovaných dát. V prípade, že graf bude zobrazovať viac dát, mali by mať približne rovnaký rozsah hodnôt. Os X grafu predstavuje počet krokov simulácie. Jeden graf môže zobrazovať viac dát súčasne. Pre každé dáta je vykreslená jedna čiara. Čiary sú navzájom odlíšené farebne (napr. viď Obrázok 28 – koherencia a úspešnosť hier v spoločenstvách).

Druhý typ grafu (DA – dual axis) je tiež čiarový graf. Tento graf slúži na zobrazovanie viacerých dát, ktoré nemajú rovnaký rozsah hodnôt. Graf  vytvorí os Y na oboch stranách grafu, pričom na jednu nanesie rozsah hodnôt prvých dát a na druhú rozsah hodnôt ostatných dát (napr. viď Obrázok 4 – úspešnosť hier a veľkosť populácie).

Obrázok 21 – ukážka koláčového grafu

Obrázok 22 – ukážka stĺpcového grafu

Koláčový graf a sĺpcový graf zobrazujú hodnoty dát v poslednom kroku simulácie. Oba grafy majú význam iba pri porovnávaní na sebe závislých alebo podobných dátach (viď Obrázok 21 – ukážka koláčového grafu a Obrázok 22 – ukážka stĺpcového grafu).


Okno je hodnota, ktorá určuje, po koľkých krokoch sa majú zobrazovať hodnoty dát. Napríklad, pre hodnotu 1 bude zobrazený každý krok simulácie. Hodnota 10 znamená, že bude zobrazený každý desiaty krok simulácie. Pre koláčový a stĺpcový graf nemá tento parameter význam.

Obrázok 23 – konfigurácia grafu

Samotný graf vyvoláme z editora projektu v záložke Grafy jeho označením v zozname grafov stlačením tlačidla U/S (Ukáž/Skry). Ako názov napovedá, rovnakým tlačidlom môžeme okno grafu skryť.

Obrázok 24 – ukážka grafu a jeho menu[3]

Výzor grafu môžeme upravovať z jeho vlastného menu, ktoré vyvoláme stlačením pravého tlačidla myši[4] v okne grafu (viď Obrázok 24 – ukážka grafu a jeho menu). Graf ponúka možnosti ako tlač, uloženie do súboru, zmenu farieb, nadpisov a podobne.

3.6.4       Prvý experiment

Po stručnom oboznámení sa s ovládaním programu, prejdime k prvému experimentu. Pripravený svet SimpleWorld a agent SimpleAgent spĺňajú definíciu 1. Pomocou tejto implementácie si prejdeme niektoré simulácie, ktorých výsledky sme mali možnosť vidieť pri popisoch vlastností experimentov.

V zberni agentov si pre položku SimpleAgent vytvoríme jednu šablónu, ktorej môžeme zmeniť meno podľa uváženia. V editore zvolíme záložku Agenty  a pridáme do zoznamu agentov zo zberne agentov jeden AgentGenerator. Pre pridaný generátor nastavíme parametre nasledovne:

·        AgentTemplate – zo zberne zvolíme našu preddefinovanú šablónu SimpleAgent

·        GenCycleType – nastavíme na First tick– agentov chceme generovať iba na začiatku simulácie

·        GenProb – nastavíme na 1 (100% pravdepodobnosť, že sa agent vytvorí)

·        InOneStep – zadáme 20 (toľko agentov chceme mať v simulácii)

Ostatné položky nás teraz nezaujímajú. Ak sme vyplnili všetko v poriadku, môžeme vyskúšať spustiť simuláciu. Spustíme ju na 300 rokov. Ak bol generátor nastavený správne, do zoznamu agentov pribudlo ďalších 20 agentov. Každý s rovnakým menom, ale rôznym ID. Môžeme si prezrieť ich slovníky (v zozname agentov treba označiť ľubovoľný agent, editovať ho a potom editovať jeho parameter Lexikon). Keďže už prebehli jazykové hry, niektoré slovníky by už nemali byť prázdne.

Dáme obnoviť simuláciu a vymažeme vygenerovaných agentov. (V nastaveniach pre svet je parameter RemoveAgent. Ak je nastavený na remove generated, tak pri obnove sa zo zoznamu agentov vymažú všetky agenty, ktoré boli vygenerované).

Predošlá simulácia prebehla "nasucho", lebo žiadne dáta sme neukladali a ani žiadne nezobrazovali, a tak sme nemohli sledovať jej priebeh. Teraz nastavíme monitory a grafy tak, aby sme mohli priebeh simulácie pozorovať.

Ako prvé musíme nastaviť zberňu pre monitory, ak ešte nie je (viď 3.5 Inštalácia a počiatočná konfigurácia prostredia). Zberňa monitorov by mala obsahovať položku s názvom WorldRatioMonitor. Tento monitor sleduje dva ľubovoľné parametre sveta a dáva ich do pomeru po X krokoch. To znamená že pre parametre monitoru MonitoredProperty (MP), RatioProperty (RP) a Window (X) je v krokových intervaloch po X pre interval (K,K+X) hodnota vrátená monitorom vypočítaná ako:

            výsledok =

Monitor nastavíme tak, aby sme sledovali mieru úspešnosti hier (viď 2.5.1 Úspešnosť hier). Keďže v každom kroku prebehne len jedna hra medzi dvoma agentmi, na graf by sa táto udalosť nanášala takmer zbytočne, lebo skoky medzi 0 a 1 nie sú až také zaujímavé. Preto tento monitor dáva parametre do pomeru podľa zvoleného počtu krokov. Svet poskytuje na zistenie úspešnosti a počtu hier dva parametre: lastGameCount a lastSucGameCount.

V editore projektu v záložke Monitory pridáme do zberne monitorov WorldRatioMonitor, ktorému nastavíme parametre podľa [Obrázok 25 – nastavenie monitoru WorldRatioMonitor pre mieru úspešnosť hier].

Obrázok 25 – nastavenie monitoru WorldRatioMonitor pre mieru úspešnosť hier

Tu si treba dať pozor, lebo ak zadáme názvy položiek nesprávne, monitor nebude správne fungovať a dáta sa nebudú zberať. Pri názve položky treba zachovať veľké a malé písmená. Náš pridaný monitor sleduje úspešnosť jazykových hier pre každých 20 krokov simulácie.

Ďalším krokom je nastavenie grafu. V záložke Grafy editora projektu pridáme graf pomocou tlačidla Pridaj. Zobrazí sa nám editor grafu. Graf nazveme "Úspešnosť hier". Do zoznamu Zdroje dát vložíme položku s názvom lastSucGameCountRlastGameCount, ktorú by nám systém mal dať k dispozícii potom, čo sme pridali monitor. (Každá implementácia monitoru zodpovedá za to, ako budú pomenované zdroje dát, ktoré daný monitor bude dávať k dispozícii. V tomto prípade si monitor vytvoril názov podľa oboch parametrov, ktoré monitoruje a oddelil ich písmenom 'R'.)

Po nastavení monitoru a grafu môžeme spustiť druhú simuláciu. Tentoraz ale budeme mať k dispozícii aj jej priebežné výsledky – počas behu simulácie by sme mali vidieť zmeny v dátach. Výsledný graf by mal po 10000 krokoch simulácie vyzerať ako [Obrázok 3 – úspešnosť hier]. Graf na obrázku používa grafové okno o veľkosti 10, zobrazované údaje nie sú nahusto. Môžeme tak nastaviť aj náš graf a v editore grafu zmeniť položku Okno na 10. Zmeny sa po potvrdení editovaného grafu prejavia hneď. (Pokiaľ nenastane obnovenie simulácie, nazbierané dáta zostanú grafom prístupné.)

Simuláciu môžeme opakovať pre rôzne počty agentov, prípadne môžeme vyskúšať niektorým agentom nastaviť rôzne parametre, a tak sledovať závislosť úspešnosti hier na zmenených parametroch.

3.6.5       Druhý experiment – otvorenosť systému

Druhý experiment je pokračovaním prvého. V predošlom experimente bola jazyková hra uzavretá. Do systému neprichádzali a ani z neho neodchádzali agenty (nerátame fakt, že sme si ich v prvom kroku simulácie dali vygenerovať).

Aby sme si vyskúšali jazykovú hru v otvorenom prostredí (viď kapitolu 2.4.3.2 Otvorené systémy), stačí spraviť len pár zmien. Do zoznamu agentov v editore projektu pridáme ďalší generátor agentov, ale nastavíme ho trochu inak:

·        AgentTemplate – zo zberne zvolíme preddefinovanú šablónu SimpleAgent.

·        GenCycleType – nastavíme na Every tick. Budeme generovať agentov v každom kroku.

·        GenProb – zvolíme 0,00025. Nechceme, aby agenty pribúdali príliš rýchlo.

·        InOneStep – zvolíme 1. V každom kroku sa vygeneruje maximálne jeden agent.

Aby sme mohli sledovať vývoj miery úspešnosti hier v závislosti na pribúdaní agentov, budeme musieť do systému pridať ďalší monitor. Tentoraz nám poslúži preddefinovaný monitor s názvom WorldMonitor, ktorý by sa mal tiež nachádzať v zberni monitorov.

V záložke Monitory editora projektu pridáme nový monitor, ktorý má v zberni názov WorldMonitor. Tento monitor sme navrhli tak, aby zaznamenával ľubovolný parameter sveta. Zoznam parametrov sveta s ich aktuálnymi hodnotami sa nachádza v záložke Par.sveta editora projektu. V našom príklade chceme sledovať počet agentov, preto parameter MonitoredProperty nastavíme na agentCount (viď Obrázok 26 nastavenie monitoru WorldMonitor).

Obrázok 26 nastavenie monitoru WorldMonitor

Ďalej treba upraviť graf. Do pôvodného grafu z prvého experimentu pridáme do zoznamu Zdroje dát ďalšiu položku s názvom agentCount. Rozsah hodnôt, ktoré chceme zobrazovať bude ale dosť odlišný. Zatiaľ, čo počet agentov môže narásť na veľké prirodzené číslo, úspešnosť hier sa pohybuje medzi hodnotami 0 a 1 (resp. 0 až 100%). Na zobrazenie výsledkov bude preto vhodnejší typ grafu DA[5] čiarový graf.

Prírastok nových agentov by sme chceli vyskúšať až potom, čo miera úspešnosti hier dosiahne okolie maxima. Preto najprv nastavíme nový generátor, aby negeneroval agenty (parametru GenCycleType  priradíme hodnotu No gen.). Spustíme simuláciu a počkáme, kým sa miera úspešnosti hier neustáli v okolí 100%. Potom prestavíme generátor tak, aby začal generovať nové agenty a necháme bežať simuláciu na ďalších rádovo 40000 krokov.

Výsledok simulácie by mal byť porovnateľný s výsledkom na [Obrázok 4 – úspešnosť hier a veľkosť populácie]. Graf na obrázku bol ešte trochu upravený – pre agentCount sme nastavili rozsah hodnôt manuálne s maximom na 50.

Pre ďalšiu simuláciu zmeníme len parameter GenProb nového generátora – zvýšime pravdepodobnosť vygenerovania nového agenta z hodnoty 0,00025 na 0,001. Experiment obnovíme a spustíme na 50000 krokov. Výsledky by sa mali priblížiť k [Obrázok 5 – úspešnosť hier a veľkosť populácie 2].

Na simuláciu ďalších výsledkov z kapitoly 2.4.3.2 Otvorené systémy budeme potrebovať ďalší generátor – AgentRemover. Tento generátor bude zodpovedný za vyhadzovanie agentov zo sveta. V editore projektu pridáme do zoznamu agentov AgentRemover, ktorý má niekoľko analogických parametrov ako AgentGenerator. Rozdielne parametre sú:

·        MinAgents – koľko agentov musí minimálne zostať vo svete. AgentRemover vyhodí agent, iba ak svet obsahuje viac agentov než je stanovené minimum.

·        ToRemove – koľko agentov môže generátor vyhodiť počas celej simulácie. Hodnota –1 znamená neobmedzený počet agentov.

AgentRemover nevyhadzuje systémové agenty, medzi ktoré patria aj generátory.

Nastavíme prvý generátor, ktorý vygeneruje na začiatku simulácie 20 agentov. Druhý generátor, ktorý v predchádzajúcej simulácii generoval v každom kroku nové agenty, vypneme. A napokon, novému generátoru AgentRemover nastavíme tieto hodnoty:

·        MinAgents – 6. (3 agenty – generátory + minimálne 3 agenty hrajúce jazykovú hru)

·        ToRemove – necháme –1

·        GenCycleType – nastavíme na Every tick.

·        GenProb – nastavíme dosť veľkú pravdepodobnosť – okolo 0,002.

Nastavenie grafu nebudeme meniť. Obnovíme a spustíme ďalšiu simuláciu. Tentoraz bude stačiť omnoho menej krokov, aby sa úspešnosť hier ustálila na maxime 100%. Ak však chceme získať podobné výsledky ako [Obrázok 6 – úspešnosť hier a veľkosť populácie 3], musíme nechať simuláciu bežať 25000 krokov.

3.6.6       Tretí experiment – spoločenstvá

Posledný ukážkový experiment je podobný priestorovej hre z kapitoly [2.4.4.2 Priestorové hry]. Agenty vygenerujeme tak, aby boli rozmiestnené v priestore po skupinkách. Na to ale budeme potrebovať viac šablón v zberni agentov. Vytvoríme si preto tri šablóny položky SimpleAgent a v každej šablóne nastavíme v parametri Group inú skupinu pre agenta. Skupiny pomenujeme a, b a c.

Pre každú skupinu pridáme do zoznamu agentov jeden generátor – AgentGenerator, ktorému nastavíme tieto vlastnosti:

·        AgentTemplatepre jednotlivé generátory nastavíme pripravené šablóny zo zberne agentov so skupinou a, b a c.

·        GenCycleTypenastavíme na First tick, – agenty sa vygenerujú na začiatku

·        InOneStepnastavíme na 10, v každej skupine chceme 10 agentov.

·        GenProbnastavíme na 1 (100% pravdepodobnosť).

·        Positionkaždému generátoru nastavíme inú pozíciu. V našom prípade je svet dvojrozmerný, môžeme preto použiť napr. pozície [20,20], [50,80] a [80,40].

·        RndPosition – nastavíme na around agent –generovanie agentov okolo generátora.

·        RndRadius nastavíme 30 – maximálna vzdialenosť agentov od generátora.

Obrázok 27 – agenty v priestore po skupinkách

30 agentov v priestore v 3 skupinkách

Ak budeme simuláciu krokovať, po druhom kroku by mala reprezentácia sveta vyzerať podobne ako [Obrázok 27 – agenty v priestore po skupinkách].

V takto pripravenom svete je možné hrať priestorové hry, pokiaľ je nato svet pripravený. SimpleWorld v každom kroku podľa definície jazykovej hry vyberie dvoch hráčov a medzi nimi prebehne jazyková hra. Na ovplyvnenie výberu hráčov svet poskytuje parameter s názvom SAgentChoose (v záložke editora projektu Par. sveta). Parameter SAgentChoose určuje, ako sa bude vyberať druhý hráč. Zatiaľ, čo prvý hráč je vybraný vždy náhodne, druhý hráč sa môže vybrať:

  1. randomtiež náhodne
  2. by groupnáhodne, ale z rovnakej skupiny (s rovnakým parametrom Group)

Pre experiment si teraz nastavíme SAgentChoose na by group. Keďže každá skupinka agentov je vygenerovaná jedným generátorom, ktorý používa jednu šablónu, agenty budú komunikovať spolu len v rámci skupín, čo má veľmi podobný dopad na priebeh simulácie ako komunikovanie podľa vzdialenosti.

Vo svete by mala nastať známa situácia popísaná v kapitole [2.4.4.2 Priestorové hry]. Môžeme skontrolovať slovníky agentov z dvoch rôznych skupín. Situáciu tiež môžeme podrobnejšie sledovať pridaním monitoru koherencie. Tento monitor netreba nijak zvlášť nastavovať, stačí ho pridať do zoznamu monitorov.

Obnovíme simuláciu a spustíme ďalší beh. Na pozorovanie vývoja hry si vytvoríme graf s koherenciou a úspešnosťou hier. Výsledky priebehu zobrazuje [Obrázok 28 – koherencia a úspešnosť hier v spoločenstvách]. Ako na obrázku vidno, úspešnosť hier je vysoká, ale globálna koherencia nie je, lebo agenty komunikujú len v rámci spoločenstva, a tak jazyky každého zo spoločenstiev sú odlišné.

Obrázok 28 – koherencia a úspešnosť hier v spoločenstvách

Spodnejšia čiara v grafe je koherencia.

Prestavíme parameter SAgentChoose na random. Odteraz budú medzi sebou komunikovať všetky agenty bez rozdielu. Simuláciu neobnovujeme, ale pokračujeme v nej ďalších 30000 krokov. Na výsledkoch (viď Obrázok 29 – koherencia a úspešnosť hier v spoločenstvách 2) je zjavne vidieť zmenu, ktorá nastala v komunikácii medzi agentmi. Koherencia začala stúpať, čo spôsobili globálne interakcie.

 

Obrázok 29 – koherencia a úspešnosť hier v spoločenstvách 2

Spodnejšia čiara v grafe je koherencia. V kroku 10000 začali prebiehať

globálne interakcie medzi agentmi.

Na sledovanie priebehu experimentu pridáme monitory koherencie pre každé spoločenstvo agentov. Monitor nájdeme pod názvom GroupCoherenceMonitor v zberni monitorov. Výsledky simulácie sú znázornené na [Obrázok 30 – koherencia a lokálne koherencie spoločenstiev].

Obrázok 30 – koherencia a lokálne koherencie spoločenstiev

Najspodnejšia čiara je globálna koherencia. Čiara s najväčším zlomom v kroku

5000 je úspešnosť hier. Ostatné predstavujú lokálne koherencie spoločenstiev.

V bode 5000 krokoch začali globálne interakcie medzi agentmi.


3.7      Rozšírenie prostredia pre jazykové hry

Táto kapitola sa zaoberá rozšírením programu pre ďalšie experimenty. Nepopisujeme možnosti rozširovania užívateľského rozhrania alebo systémových častí programu, ale rozširovanie svetov, agentov a monitorov, ktoré musí používateľ zmeniť, ak chce realizovať iné typy experimentov.

 

3.7.1       Potrebné znalosti

Na rozširovanie prostredia je nutné ovládať aspoň základy objektového programovania. Taktiež je potrebné oboznámiť sa s programovacím jazykom Java [42] (jeho technológiou JavaBeans) a jeho prostredím na tvorbu aplikácií. Rozširovateľ by mal taktiež vedieť niečo o problematike jazykových hier a podrobnejšie sa oboznámiť s našim prostredím pre jazykové hry.

Skôr, ako prejdeme ku konkrétnym postupom a zásadám rozširovania prostredia, oboznámime sa s objektovým modelom základných častí programu (viď Obrázok 31 – objektový model rozšíriteľných častí programu)

 

Organization Chart

Obrázok 31 – objektový model rozšíriteľných častí programu

 

Základnou triedou je trieda Agent. Metódy triedy Agent sme navrhli vychádzajúc z predpokladu, že inštancie triedy Agent majú byť použité v multi-agentovom prostredí.. Trieda definuje metódu life, pomocou ktorej sú inštancie triedy v multi-agentovom prostredí obsluhované. Metóda life volá tri ďalšie metódy, ktoré predstavujú životný cyklus agenta. Sú to metódy sense, memorize a chooseAction volané v tomto poradí.

Trieda AgentContainer[6] rozširuje triedu Agent. Inštancia triedy AgentContainer predstavuje multi-agentové prostredie, lebo môže obsahovať v sebe agenty (objekty triedy Agent) a v cykle ich obsluhovať. AgentContainer obsluhuje agenty v metóde agentsLife, ktorú volá zo svojej metódy life. Takže krok simulácie v inštancii AgentContainer predstavuje jedno volanie metódy life. Postupnosť obsluhy jednotlivých agentov závisí na konkrétnej implementácii. Štandardne sú agenty obsluhované v postupnosti, v akej boli do AgentContainer-a pridané. Na udržovanie zoznamu agentov používa AgentContainer inštanciu triedy AgentRepresentation[7].

Obrázok 32 – komunikácia agentov

Aby sme zachovali ideu multi–agentového prostredia, agenty by medzi sebou nemali komunikovať priamo ale prostredníctvom samotného prostredia. Preto má trieda Agent podporu pre komunikáciu cez agentúry – inštancie triedy Agency (viď Obrázok 32 – komunikácia agentov). Komunikáciu cez agentúry používajú agenty aj na komunikáciu so svetom. AgentContainer zaručuje, že všetky agenty obsiahnuté v ňom majú rovnakú agentúru, a tak sa môžu cez ňu dorozumievať.

Pri komunikácii agentov cez agentúru sa na prenos informácií používa objekt triedy Situation. Táto trieda je jednoduchá asociačná tabuľka a má za úlohu uchovávať dvojice kľúč – hodnota. Komunikujúce agenty musia vedieť, aké kľúče môžu očakávať a aké typy hodnôt uchovávajú.

Triedy WorldAgent a World sú podtriedy AgentContainer-a. Hoci sú obe odvodené z rovnakej triedy, každá plní inú funkciu. Projekt (viď 3.4 Základy prostredia) pracuje s inštanciou triedy World, ktorú používa ako multi-agentové prostredie na simuláciu agentov. Trieda World pracuje s objektmi triedy WorldAgent.

Na vytváranie nových experimentov potrebujeme nové svety a nové agenty, ktoré definujeme ako podtriedy tried WorldAgent a World.

Na vytváranie nového monitora definujeme podtrediu triedy AbstractMonitor.

V práci boli pre simulácie použité implementácie SimpleAgent a SimpleWorld, ktoré sme vytvorili podľa definície 1.

3.7.2       Pravidlá rožširovania

Pre agenty, svety a monitory platia pri rozširovaní určité zásady a mechanizmy, ktoré treba dodržiavať a ktoré si popíšeme. Pri každom pravidle je popísané, pre ktoré entity platí.

Obnova (reset) – platí pre agenty, svety a monitory

Pri obnove simulácie (viď 3.4 Základy prostredia) je volaná metóda restart. Ak pribudli nejaké nastavenia do objektu, ktoré treba pri obnove simulácie nastaviť na pôvodné hodnoty, treba predefinovať túto metódu a urobiť v nej patričné nastavenia. V metóde restart je dobré volať aj jej rodičovskú verziu.

Nastavovateľné parametre – platí pre agenty, svety a monitory

Ak chceme, aby mal agent, svet alebo monitor nejaký parameter nastaviteľný z užívateľského rozhrania, je potrebné definovať dve metódy. Jednu na získanie parametru, druhú na jeho nastavenie. Deklarácia metódy slúžiacej na získavanie parametra musí vyzerať takto:

public <TypParametra> get<MenoParametra>()

Pre nastavovanie parametra je deklarácia metódy nasledovná:

public void set<MenoParametra>(<TypParametra> param)

<MenoParametra> nahradíme zvoleným menom parametra a <TypParametra> nahradíme zvoleným typom parametra. Ak  má byť parameter určený iba na čítanie, netreba vytvárať metódu na zapisovanie.

Komunikácia – platí pre svety a agenty

Ak chceme vytvoriť slušnú komunikáciu medzi agentmi a medzi agentom a svetom, musíme zadefinovať príslušné metódy. V komunikácii agentov prvý agent kladie otázku a druhý agent odpovedá. Hlavným parametrom komunikácie je názov otázky. Metódy na kladenie otázky sú už definované v triede Agent a netreba ich implementovať. Sú to tri metódy ask, každá s inými parametrami. Pri kladení otázky môže prvý agent použiť tieto formy:

       ask( "mojaotazka" );

ask( "mojaotazka", mojeparametrekotazke );

ask( cielovy_agent, "mojaotazka", mojeparametrekotazke );

Aby agent vedel odpovedať napríklad na otázku mojaotazka musí deklarovať metódu v tvare:

public Situation getAnswer_mojaotazka(Agent agent, Object params).

Metóda je povinná vrátiť objekt triedy Situation. Je to jednoduchý ukladač párov hodnôt. Každý, kto chce komunikovať, musí vedieť, aké parametre môže pri otázke poslať a čo môže očakávať vo vrátenej situácii.

Informácie o tom, aké parametre otázka očakáva a aké hodnoty vie vrátiť by mali byť pripísané pri každej implementácií takejto metódy. Napríklad, trieda World vie odpovedať na otázky sense, addAgent, delAgent a iné. Ku každej otázke očakáva určité parametre a dáva určité odpovede (viď dokumentáciu API na CD).

Životný cyklus – len svety a agenty

Ak chceme zmeniť správanie sa agenta alebo sveta počas simulácie, musíme predefinovať jednu z metód jeho životného cyklu (viď 3.7.1 Potrebné znalosti).  Môžme predefinovať hlavnú metódu life (čo sa neodporúča), alebo niektorú z troch metód sense, memorize a chooseAction. Názvy metód napovedajú, za aké akcie metódy zodpovedajú. Metóda sense má aj štandartnú implementáciu, v ktorej zisťuje aktuálny stav prostredia pomocou otázkovej metódy ask("sense") a získané informácie o stave prostredia ukladá do premenej actualSituation, ktorá je prístupná aj podtriedam.

Zmena reprezentácie priestoru – len svety

AgentContainer si udržuje zoznam agentov v inštancii triedy AgentRepresentation. Táto trieda sa tiež používa ako reprezentácia priestoru, v ktorom sú agenty uložené. Podľa implementácie to môže byť napríklad mriežka, kocka, orientovaný graf a iné. Definované sú dve reprezentácie priestoru: VectorRepresentation a MatrixRepresentation ako potomkovia triedy AgentRepresentation. Prvá trieda nedefinuje žiadny priestor, agenty sú akoby nahádzané v taške, zatiaľ čo druhá trieda definuje dvojrozmerný priestor. Trieda World používa inštanciu triedy VectorRepresentation.

Ak chceme zmeniť triedu pre reprezentáciu priestoru, zavoláme v konštruktore[8] sveta metódu setRepresentation. Napríklad:

      

setRepresentation(new MatrixRepresentation(200, 200));

Zmena zobrazovania reprezentácie priestoru – len svety

Reprezentáciu priestoru je možné zobrazovať na obrazovku. Ku každej triede predstavujúcej reprezentáciu prostredia si musíme vytvoriť jej zobrazovač. Napríklad k triede MatrixRepresentation existuje zobrazovač s názvom Display2DWorld. Zobrazovač musí byť podtriedou triedy WorldDisplay.

Podobne ako reprezentáciu prostredia, aj zobrazovač nastavíme v konštruktore sveta, tentoraz pomocou metódy setDisplay. Napríklad:

 

setDisplay(new Display2DWorld());

Príklad zobrazovača, ktorý vykresľuje reprezentáciu triedy MatrixRepresentation na obrazovku možno vidieť na [Obrázok 27 – agenty v priestore po skupinkách].

Inicializácia – len svety

Metóda init triedy World sa volá po vytvorení nového projektu a má slúžiť na počiatočnú inicializáciu sveta. Nie je volaná pri otvorení uloženého projektu. Ak potrebujeme pri inicializácii spraviť vlastné nastavenia, môžeme túto metódu predefinovať. V metóde init je dobrým zvykom volať rodičovskú verziu metódy.

Vytvorenie aktuálnej situácie prostredia – len svety

Trieda World má predefinovanú komunikačnú metódu s názvom getAnswer_sense. Pomocou tejto metódy vie odpovedať agentom, ktorí sa pýtajú na aktuálnu situáciu. V tejto metóde svet volá metódu createSituationForAgent(Agent agent, Params params), ktorá má vytvoriť aktuálnu situáciu, v akej sa agent nachádza. Táto metóda dostane dva parametre: agenta, ktorý si pýta stav prostredia a parametre, ktoré posiela. Pre vytvorenie vlastných situácií stačí predefinovať danú metódu. Odporúča sa zachovať situáciu vytvorenú predkom a iba ju rozšíriť.

Meno a popis – len monitory

Pre meno monitora treba predefinovať metódu getMonitorName a getFullName. Prvá metóda by mala vrátiť jednoduché meno monitora, napríklad MonitorVzdialenosti, zatiaľ čo druhá metóda by mala vrátiť obšírnejšie pomenovanie. Napríklad rozšírené o názov zdroja dát, kam sa budú monitorované hodnoty ukladať – MonitorVzdialenosti_vzdialenost. Taktiež je dobré predefinovať metódu getDescription, ktorá by mala vrátiť stručný popis monitora.

Získavanie hodnôt z monitora – len monitory

Aby plnil monitor svoju funkciu, je potrebné predefinovať dve metódy. Pri simulácii si ukladač od monitora vypýta názvy zdrojov dát, kam chce ukladať hodnoty pomocou metódy  getIdentifiers. Metóda musí vracať pole identifikátorov, názvov zdrojov dát. Potom si ukladač vypýta od monitora dáta pomocou metódy  getValues, ktorá vracia pole objektov. Každá položka v poli objektov by mala prislúchať jednému identifikátoru z poľa identifikátorov.

Obnova štruktúr – len monitory

Pre rozširovanie monitora sa odporúča použiť triedu AbstractMonitor, ktorá definuje užitočné metódy. Napríklad, ak si potrebujeme uchovávať vypočítané dáta, ktoré závisia na agentoch vo svete, môžeme použiť metódu updateVectors, ktorá je volaná vždy, keď do systému príde agent alebo z neho odíde.

3.7.3       Príklad rozšírenia

Urobíme si jednoduchý príklad rozšírenia  prostredia, pričom využijeme už existujúcu implementáciu jazykovej hry. V našom rozšírení sa budú agenty vo svete pohybovať a jazykovú hru budú môcť hrať iba agenty ktoré budú vedľa seba dosť blízko. Nebudeme uvádzať kompletný kód príkladu, iba niektoré jeho časti. Celý príklad je priložený na CD diplomovej práce.

Na písanie programu v jave môžeme použiť jedno z existujúcich prostredí s užívateľským rozhraním [44,45], alebo si môžeme vystačiť s obyčajným textovým editorom a kompilátorom javy.

Vytvoríme si adresár, kde si uložíme náš príklad. Napríklad adresár work. Objekty, ktoré budeme editovať by sme radi umiestnili do balíka[9] org.fmfiuk.elge.extended a preto si v adresári work musíme vytvoriť podadresárovú štruktúru  org/fmfiuk/elge/extended. 

V súbore MoveWorld.java začneme definíciou balíka a hlavičky triedy MoveWorld.

 

package org.fmfiuk.elge.extended;

/** hlavné importy[10] */

public class MoveWorld extends SimpleWorld {

       /** tu pride telo programu */

}

Aby sme rozšírili možnosti výberu druhého agenta pri jazykovej hre, rozšírime definíciu z triedy SimpleWorld. SimpleWorld používa na zistenie druhého agenta metódu chooseSecondAgent. V tejto metóde používa parameter agentChoose, aby zistil akým spôsobom má agent vybrať. Premenná agentChoose je typu ComboInteger, čo umožňuje do nej vložiť preddefinované dvojice názov – hodnota. Preto si pridáme v konštruktori triedy MoveWorld do tejto premennej náš typ výberu druhého agenta a predefinujeme metódu chooseSecondAgent:

 

/** Creates a new instance of MoveWorld */

public MoveWorld() {

    agentChoose.add(BY_RADIUS); //BY_RADIUS == "by radius";

}

 

public GameAgent chooseSecondAgent(GameAgent first) {

    if (agentChoose.toString().equals(BY_RADIUS)) {

        return chooseAgentByRadius(first);

    } else return super.chooseSecondAgent(first);

}

Naša metóda chooseAgentByRadius vyberá agenta podľa nastavenia maximálnej vzdialenosti. Ak chceme aby bol tento parameter nastavovateľný v užívateľskom rozhraní, vytvoríme dvojicu metód podľa pravidiel:

 

public double getMaxAgentDistance() { return maxD; }

public void setMaxAgentDistance(double max) { maxD = max; }

Takto pribudne v editore projektu v záložke Par. sveta parameter s názvom  MaxAgentDistance. Pre pohyb agentov vytvoríme komunikačnú metódu, s názvom relativeMove:

 

public Situation getAnswer_relativeMove(Agent agent, Object params) {

   ...

   if (agent instanceof MoveableAgent && params instanceof Point) {

//tuto treba zmenit poziciu agenta

   }

   //vrat situaciu agentovi

   ...

}

Z hľadiska tvorby multi–agentového prostredia nie je dobré, aby si agent menil pozíciu sám. Preto sme vytvorili komunikačnú metódu relativeMove a zariadili, že agent si môže meniť polohu kladením otázky ask s menom otázky relativeMove a s parametrom typu Point. Príklad ukazuje volanie metódy relativeMove s parametrom typu Point, ktorý hovorí že sa chcem pohnúť o jeden bod doľava a o jeden bod hore.

 

ask("relativeMove", new Point(-1,1));

Ak bude možné agent presunúť na požadovanú pozíciu, presunie sa tam. Posunutie agenta zabezpečuje trieda reprezentácie priestoru, v tomto prípade MatrixRepresentation. Samotný agent je už prispôsobený na pohyb.

V súbore MoveAgent.java (podobne ako pri definovaní sveta) začneme s balíkom a deklaráciou triedy.

 

package org.fmfiuk.elge.extended;

/** hlavné importy */

public class MoveAgent extends SimpleAgent {

       /** tu pride telo programu */

}

Agent chceme rozšíriť o dva nastaviteľné parametre: pravdepodobnosť pohybu a maximálny možný krok pohybu. Pre oba parametre vytvoríme požadovanú dvojicu metód:

 

public void setMaxMoveStep(int step) { this.maxMoveStep = step; }

public int getMaxMoveStep() { return maxMoveStep; }

 

public void setMoveProb(double prob) { this.moveProb = prob; }

public double getMoveProb() { return moveProb; }

Ešte musíme definovať, kedy sa má agent pohybovať. To zabezpečíme pomocou životného cyklu agenta. Nebudeme predefinovávať metódu life, ale metódu chooseAction, v ktorej pomocou opytovacej metódy a otázky typu relativeMove zariadime, aby agent spravil pohyb (pokiaľ to svet dovolí):

   

public void chooseAction() {

   if (Math.random() <= moveProb) {

       ask(MoveWorld.ASK_TO_MOVE,

           new Point(Engine.getRandomNumber(–maxMoveStep, maxMoveStep),

                     Engine.getRandomNumber(–maxMoveStep, maxMoveStep)));

   }

}

Pohyb agenta je naozaj jednoduchý. Najprv si podľa pravdepodobnosti zistíme, či sa  chceme pohybovať. Potom povieme svetu, že sa chceme pohnúť. Zavoláme teda metódu ask s typom otázky na pohybu (konštanta pre názov otázky je zadefinovaná v triede  MoveWorld) a potrebným parametrom. Vytvoríme náhodné relatívne súradnice podľa nastaveného maximálneho kroku do ľubovoľnej strany.

Vytvorené triedy skompilujeme a celú adresárovú štruktúru počnúc adresárom org skopírujeme do adresára extends, ktorý sa nachádza v inštalačnom adresári prostredia. Takto zaručíme, že prostredie bude mať k nášmu rozšíreniu prístup.

V programe vyvoláme okno pre nastavenie zberne svetov z menu Nastavenia/Zberna svetov. Náše nové rozšírenie program asi automaticky nenájde a tak musíme pomocou tlačidla Pridať (viď Obrázok 19 – zberňa agentov) zadať celú cestu k svetu MoveWorldorg.fmfiuk.elge.extended.MoveWorld. Tlačidlom Načítať by sa v stĺpci Nahrané mala pre náš svet MoveWorld nastaviť potvrdzujúca hodnota (fajka). Ak sa tak nestane, znamená to, že implementácia triedy MoveWorld nebola nájdená. Buď sme zadali zlé meno, alebo sme nezaradili správne súbory implementácie nášho príkladu do adresára extends. Ak sa svet podarilo načítať, treba ešte nastaviť zberňu agentov (teraz by už automatické hľadanie malo fungovať). V zberni agentov pridáme položku org.fmfiuk.elge.extended.MoveAgent.

Po nastavení zberní môžeme vytvoriť nový projekt. Ako svet určíme MoveWorld. Do zoznamu agentov pridáme generátor, ktorý bude generovať agenty typu MoveAgent. V záložke editora projektu Par. sveta nastavíme parameter chooseSAgent na hodnotu by radius. Pohyb agentov počas simulácie môžeme sledovať na zobrazovači reprezentácie priestoru, ktorý zobrazíme pomocou tlačidla U/S.

 


Záver

Cieľom diplomovej práce bolo informovať o výskume evolúcie jazyka pomocou jazykových hier a naprogramovať prostredie pre experimentovanie v tejto oblasti.

Veríme, že prehľad, ktorý sme v práci vytvorili, umožní čitateľom jednoducho a rýchlo preniknúť do problematiky jazykových hier a vzbudí v nich záujem o experimentovanie v tejto oblasti. Dúfame, že k experimentom ich bude motivovať aj náš implementovaný program. Poskytnutý prehľad by taktiež mohol byť dobrou základňou pre jeho elektronickú verziu, ktorá by sa s postupom času mohla rozširovať o nové experimenty a referencie na články v tejto oblasti. Nebolo našim zámerom podať vyčerpávajúci prehľad všetkých existujúcich prác, ale túto vlastnosť by mohla mať navrhnutá elektronická verzia prehľadu.

Druhým cieľom bola implementácia prostredia pre experimenty s jazykovými hrami a návody na jeho použitie a rozšírenie. Prostredie sa nám podarilo implementovať podľa našich predstáv a požiadaviek. Či je prostredie dostatočne prepracované, sa ukáže až pri jeho používaní inými záujemcami, ktorí môžu pozitívne prispieť svojimi pripomienkami a návrhmi. Prostredie plánujeme ďalej udržiavať a rozširovať pre nové experimenty, z tohoto dôvodu sme program sprístupnili pod open–source[11] licenciou a dávame si za cieľ mimo diplomovej práce udržiavať elektronický portál k tomuto prostrediu ako i samotné prostredie na adrese http://elge.sourceforge.net.


Literatúra

 

          1          Wittgenstein, L.: Philosophical Investigations. New York, The Macmillan Company, 1965.

          2          Shawver, L.: On Wittgenstein's Concept of a  Language Game, http://www.california.com/~rathbone/word.htm

          3          Shawver, L.: Commentary on Wittgenstein's Philosophical Investigations,
http://users.rcn.com/rathbone/lwtocc.htm

          4          Nowak, M. A., Komarova, N. L., Niyogi, P.: Computational and evolutionary aspects of language, http://www.ptb.ias.edu/nowak

          5          Nowak, M.  A., Krakauer, D. C.: The evolution of language, Proc. Natl. Acad. Sci. USA, Vol. 96, pp. 8028–8033, July 1999, Evolution

          6          Steels, L.: The spontaneous self–organization of an adaptive language, In Muggleton, S., editor, Machine Intelligence 15, Oxford University Press. Oxford, 1997

          7          Steels, L., McIntyre, A.: Spatially Distributed Naming Games, Advances in complex systems, 1(4), January 1999

          8          Steels, L.: The synthetic modeling of language origins, Evolution of Communication Journal, 1(1):1–34 1997

          9          Steels, L.: Synthesising the origins of language and meaning using co–evolution, self–organization and level formation, In Hurford, J. and Knight, C. and Studdert–Kennedy, M., editor, Approaches to the Evolution of Language: Social and Cognitive bases, Edinburgh University Press. Edinburgh, 1997

        10        Steels, L.:  Constructing and Sharing Perceptual Distinctions. In: van Someren, M. and G. Widmer (eds.), 1997

        11        Steels, L.: Perceptually grounded meaning creation, 1996

        12        Steels, L.: The Talking Heads Experiment, Volume I. Words and Meanings. Antwerpen, 1999

        13        Steels, L., Kaplan, F.: Stochasticity as a source of innovation in language games. In C. Adami, R. Belew, H. Kitano, and C. Taylor, editors, Proceedings of Artificial Life VI, Los Angeles, June. MIT Press, 1998

        14        Steels, L., Kaplan, F.: AIBO's first words: The social learning of language and meaning. Evolution of Communication, 2002

        15        Steels, L., et al.: Crucial factors in the origins of word-meaning, in A. Wray, ed., The Transition to Language. Oxford (UK): Oxford University Press, 2002

        16        McIntyre, A.: Babel: a testbed for research in origins of language, Proceedings of COLING-ACL 98, Montreal, 1998

        17        Marsico, E., Coupé, C., Pellegrino, F.: Evaluating the influence of language contact on lexical changes, http://www.infres.enst.fr/confs/evolang/actes/_actes46.html

        18        The University of Chicago's Social Science Research Computing, RePast, http://repast.sourceforge.net,

        19        Santa Fe Institute, Swarm, http://www.swarm.org,

        20        AScape,  http://www.brook.edu/dybdocroot/es/dynamics/models/ascape/

        21        Smith, K.,  Brighton, H., Kirby, S.: Language Evolution in a Multi–agent Model: the cultural emergence of compositional structure, 2002

        22        Smith, A.D.M.: Establishing Communication Systems without Explicit Meaning Transmission. In J. Kelemen and P. Sosík, Prague: Springer, 2001

        23        Kirby, S.: Natural Language from Artificial Life, in Artificial Life, 2002

        24        Kirby, S.:  Learning, Bottlenecks and the Evolution of Recursive Syntax., in Linguistic Evolution through Language Acquisition: Formal and Computational Models edited by Ted Briscoe. Cambridge University Press, in Press, 1999

        25        Hurford, J. R: Expression/induction models of language evolution: dimensions and issues, in Briscoe, Ted, Eds. Linguistic Evolution through Language Acquisition: Formal and Computational Models. Cambridge University Press., 2002

        26        De Jong, E. D.: Autonomous Formation of Concepts and Communication, PhD thesis, Vrije Universiteit Brussel, Brussels, Belgium, 2000.

        27        De Jong, E. D., Vogt, P.: How should a robot discriminate between objects? A comparison between two methods, in Proceedings of the Fifth International Conference on Simulation of Adaptive Behavior SAB '98. Cambridge (MA): MIT Press, 1998

        28        Batali, J.: Computational simulations of the emergence of grammar. In Hurford, J. R., Studdert–Kennedy, M. and Knight C., editors, Approaches to the Evolution of Language – Social and Cognitive Bases, 1998

        29        Takáč, M.: Emergencia lingvistických fenoménov v jazykových hrách, Internet Distance Education Program Cognitive Sciences, 2001.

        30        Takáč, M.: Model prototypovej konceptualizácie sveta s komunikáciou, internal technical report UI FMFI UK, 2000.

        31        Kaplan, F.: A New Approach to Class Formation in Multi–Agent Simulations of Language Evolution., in Demazeau, Y., editor, Proceedings of the third international conference on multi–agent systems (ICMAS 98), Los Alamitos, CA, 1998.

        32        Kaplan, F.: Talking AIBO: First experimentation of verbal interactions with an autonomous four-legged robot, in: A. Nijholt, D. Heylen, K. Jokinen, eds., Learning to Behave: Interacting agents CELE-TWENTE Workshop on Language Technology. 2000

        33        Gärdenfors, P.: Language and the Evolution of Cognition, in: V. Rialle and D. Fisette (eds.): Penser l'esprit: Des sciences de la cognition? une philosophie cognitive, Presses Universitaires de Grenoble, Grenoble, 1996.

        34        Chomsky, N.: Rules and Representations. Columbia University Press, 1980.

        35        Chomsky, N.: Knowledge of Language: its Nature, Origin and Use. Praeger, 1986.

        36        Pinker, S.: The Language Instinct: How the Mind Creates Language. New York: HarperCollins, 1994

        37        Oliphant, M., Batali. J.: Learning and the emergence of coordinated communication. The newsletter of the Center for Research in Language, 11(1), 1997

        38        Prigogine, I, Stengers, I.: Order Out Of Chaos. Bantam Books, New York, 1984

        39        Brighton, H.: Compositional Syntax from Cultural Transmission. Artificial Life, 8(1), 2002

        40        Cangelosi, A. and Parisi, D.: The emergence of a language in an evolving population of neural networks. Connection Science, 1998

        41        Berthouze, L., Pic M.: Emergence of language in interactive systems, in Proceedings of IEEE International Conference on Systems, Man, and Cybernetics, Tucson (USA), 2001

        42        Sun Microsystems, Inc. The Java Tutorial – A practical guide for programmers, http://java.sun.com/docs/books/tutorial/index.html

        43        Umelý život, http://alife.tuke.sk

        44        Netbeans, http://www.netbeans.org

        45        Eclipse, http://www.eclipse.org



[1] referenčná príručka k programu je pri zverejňovaní tohto textu ešte v štádiu vývoja

[2] java je registrovaná obchodná značka firmy Sun Microsystems, Inc v Spojených štátoch a v ostatných krajinách. http://java.sun.com

[3] Dokumentáciu ku knižnici JFreeChart môžete nájsť na http://www.jfree.org/jfreechart/

[4] Rôzne OS môžu používať iné tlačidlá, prípadne iné mechanizmy na vyvolanie takzvaného popup menu.

[5] Dual Axis

[6] Triedy, ktoré zahrňujú správu iných objektov sa často nazývajú kontajnery.

[7] Keďže v Jave je jednoduché dedenie, teda objekt môže mať iba jedného rodiča, existuje v nej rozhranie (interface). Rozhranie je len definíciou, niečo ako abstraktná trieda, neobsahuje žiadnu implementáciu. Triedy v javy môžu implementovať ľubovoľný počet rozhraní. AgentRepresentation je v skutočnosti rozhranie.

[8] konštruktor objektu sa zavolá vždy pri vytvorení objektu.

[9] balík (package) v jave rozdeľuje triedy do logickejších štruktúr. Pri programovaní by súbory mali byť uložené v potadresároch zodpovedajúcim názvu balíku. Napríklad pre balík elge.engine má všetky definované triedy uložené v adresári /elge/engine/

[10] netreba zabudnúť, že pre každú triedu, ktorú chceme použiť, musíme špecifikovať, kde ju má kompilátor hľadať. Buď v programe budeme písať celú cestu k triede, napríklad elge.examples.simple.SimpleWorld, alebo použijeme kľúčové slovo import a zadáme cesty, ktoré má kompilátor prehľadávať. Napríklad import elge.examples.simple.*;

[11] http://www.opensource.org


This site was built with the NetObjects Fusion MX Trial
Download your FREE trial today!