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 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.
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
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
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 . Š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 .
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
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 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:
·
AgentTemplate – tu treba nastaviť agent, ktorý bude
generátor pridávať do sveta. Agent sa vyberá zo zberne.
·
GenCycleType – urč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
·
GenPeriod – slúži na určenie periódy alebo
presného kroku generovania
·
GenProb – pravdepodobnosť vygenerovania
agenta, hodnota z intervalu <0,1>
·
InOneStep – označ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.
·
MaxAgents – urč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 .
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).
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 jeho označením
v zozname grafov stlačením tlačidla (Ukáž/Skry). Ako názov
napovedá, rovnakým tlačidlom môžeme okno grafu skryť.
Obrázok
24 – ukážka grafu a jeho menu
Výzor grafu môžeme upravovať z jeho vlastného menu, ktoré
vyvoláme stlačením pravého tlačidla myši
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
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 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 editora
projektu pridáme graf pomocou tlačidla .
Zobrazí sa nám editor grafu. Graf nazveme "Úspešnosť hier". Do
zoznamu
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 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 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 ď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 č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:
·
AgentTemplate – pre jednotlivé generátory nastavíme
pripravené šablóny zo zberne agentov so skupinou a, b
a c.
·
GenCycleType – nastavíme na First tick, – agenty sa vygenerujú na začiatku
·
InOneStep – nastavíme na 10, v každej skupine
chceme 10 agentov.
·
GenProb – nastavíme na 1 (100%
pravdepodobnosť).
·
Position – kaž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. 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ť:
- random – tiež náhodne
- by
group – ná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)
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
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.
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 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
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 */
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 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 .
Náše nové rozšírenie program asi automaticky nenájde a tak musíme pomocou
tlačidla (viď
Obrázok 19 – zberňa agentov) zadať celú cestu k svetu MoveWorld – org.fmfiuk.elge.extended.MoveWorld. Tlačidlom by sa v stĺpci 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
nastavíme parameter
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 .
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
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