Notice: Undefined index: print in /home/ftpsite/joshis.iprofil.cz/articles.php on line 61
Programování inteligentních agentů - 2. díl - joshis.iprofil.cz
 
[ Webhosting profitux.cz ]
Nové osobní stránky Petra Dvořáka

Moje články

hertpl: Undefined index: page_title(template line: 251) in templates/articles.html on line 145

Verze pro tisk (ladí se...) >>

Programování inteligentních agentů - 2. díl

Úvod do 3APL

V minulém díle jsme si řekli obecná fakta o inteligentních agentech. Dnes se podíváme na to, jak vypadá paradigma jazyku 3APL ("tripple-ej-pí-el"), ukážeme si, jaká je základní struktura programu a napíšeme si jednoduchého "agenta-sekretářku".

Paradigma APL

To, co jakýkoli program (v libovolném jazyce) obecně provádí představuje v podstatě jistou změnu stavu (proměnné, objektu, stroje, ...) a podobně je tomu i při programování agentů. Program se dá jednoduše chápat jako "popis změn stavu mysli" agenta. Poněkud konkrétněji se často uvádí cyklus "sense-reason-act", tím můžeme stručně začít i my. Získáme tak dobrou počáteční představu o obecném tvaru programu.

Během fáze "sense" agent přijímá události z prostředí. Následně - ve fázi "reason" - aktualizuje svojí "belief" bázi, tedy to, jaké má znalosti o světě a na základě schémat uvažování upravuje svoji databázi cílů ("goals") a reviduje plán toho, jak těchto cílů může dosáhnout. Na základě výstupu předchozí fáze potom agent jedná - provádí nějakou akci (fáze "act").

Pakliže přijmeme toto schéma - a vidíme, že je zcela obecné, platné pro jekéhokoli agenta - můžeme jej uvažovat jako základní konstrukt jazyka, který už nemusíme jako programátoři specifikovat. To, co potom musíme udělat při tvorbě agenta je:

  • specifikovat počáteční "belief" databázi - neboji stav prostředí, v jakém se agent nachází
  • specifikovat počáteční cíle agenta - čili určit, co chceme aby agent dělal
  • vyjmenovat schopnosti daného agenta - aneb akce, které je agent v dané situaci schopný udělat a následky těchto akcí na prostředí (resp. "belief" bázi agenta)
  • určit schémata pro uvažování o tvorbě plánu vedoucího ke splnění daného cíle a pro revizi plánu v případě, že dojde k zneplatnění některého z předpokladů

Ano, je to opravdu až tak "jednoduché".

Popis jazyka 3APL

Zde uvedu schéma toho, jak probíhá deliberativní proces agentů na platformě 3APL:

Z obrázku je zároveň vidět, jaké části programu je nutné specifikovat.

Program v 3APL se tedy skládá z následujících částí:

  • PROGRAM "název programu/agenta".
  • LOAD "prolog soubor" - nepovinně, načte data pro "belief" bázi z Prolog souboru
  • BELIEFBASE {...} - specifikace iniciální "belief" báze, tedy toho, v jaké stavu se agent na začátku nachází
  • CAPABILITIES {...} - popis akcí, které je agent schopný v daném stavu vykonat a efektů, které tyto akce mají
  • GOALBASE {...} - specifikace počátečních cílů agenta - aneb toho, co od agenta očekáváme, že udělá
  • PLANBASE {...} - specifikace počátečních plánů agenta
  • PG-RULES {...} - "planning goal" pravidla - určují, jakou akcí je možno dosáhnout daného cíle
  • PR-RULES {...} - popis pravidel pro revize plánů (PR = plan revision) v případě, že dojde ke zneplatnění nějakého z předpokladů

Napíšeme si teď slibovaný program "agenta-sekretářku" a postupně si jej budeme analyzovat. Napřed stáhneme platformu 3APL a rozbalíme archiv. Přečtěte si také prvních pár kapitol dokumentace (je též na stránkách). Spusťte program, v úvodním miniokénku zvolte "server" (viz obrázek - plaforma může běžet i distribuovaně, ale to nás teď nezajímá) a seznamte se s prostředím programu - je relativně intuitivní. Otevřete si nějaký příjemnější textový editor, třeba PSPad (zde se hodí celkem dobře mód "UNIX Shell Script") - platforma 3APL sice obsahuje jakýsi editor, ale ten je natkolik jednoduchý, že se hodí pouze na velice malé úpravy (navíc podle mého mínění neumí správně pracovat s konci řádku).

První řádka našeho programu bude vypadat takto:

PROGRAM "sekretarka"

Zde se ještě nic zajímavého neděje. Nyní přistoupíme k definici schopností agenta:

CAPABILITIES {
  {room(a)} MoveRight() {NOT room(a), room(b)}
  {room(b)} MoveLeft()  {NOT room(b), room(a)}
  {true} TakeADeepBreath() {calm()}
}

Podívejme se na jednotlivé řádky uvedené v klauzuli CAPABILITIES. První nám říká, že pokud je "agent-sekretářka" v místnosti "a" (room(a)) a provede akci MoveRight(), tak potom není v místnosti "a" (NOT room(a)) , ale přesunula se do místnosti "b" (room(b)). Druhá řádka je zcela analogická v opačném smyslu. Poslední řádek definuje, že když se sekretářka za jakékoli situace (true) vydýchá (akce TakeADeepBreath()), tak se uklidní (calm()). Takže jsme specifikovali "agenta-sekretářku", který(á) umí běhat mezi místnostmi "a" a "b" a také se dokáže zklidnit tím, že se vydýchá. Nespecifikovali jsme zatím žádné chování, pouze akce, kterých je naše sekretářka schopna, situace, kdy může dané akce provést a následky těchto akcí!

Nyní přistoupíme k tvorbě "belief" báze. Jednotlivé řádky "belief" báze jsou vlastně Prologovské klauzule:

BELIEFBASE {
  room(a).
}

Umístili jsme si našeho "agenta-sekretářku" do místnosti "a".

Nyní přikročíme k definici cílů sekretářky. Protože naše sekretářka je pořádný zmatkář, chce se jednak nějak uklidnit, ale také - zcela panicky a zcela v duchu řadových sekretářek - být na dvou místech současně. Ten druhý cíl se nikdy nesplní, proto nebude naší sekretářkou nikdy dosažen (my to víme, naše sekretářka - jak jinak - ne...).

GOALBASE {
  room(a) AND room(b),
  calm()
}

V dalších, složitějších programech budeme specifikovat také počáteční plány a pravidla pro revize plánů, to by však pro úvodní příklad bylo poměrně nadbytečné. Proto další klauzule necháme prázdné:

PLANBASE {}
PR-RULES {}

Nyní přejdeme k hybné síle našeho programu - k tvorbě pravidel pro tvorbu cílů (planning goal rules):

PG-RULES {
  room(a) AND room(b) <- room(a) | MoveRight(),
  room(b) AND room(a) <- room(b) | MoveLeft(),
  calm() <- room(b) AND room(a) | TakeADeepBreath()
}

Opět analyzujeme jednotlivě řádky. Ke splnění prvního cíle - být v obou místnostech zároveň - musí naše sekretářka, je-li v místnosti "a" přeběhnout do místnosti "b". Druhý řádek je opět analogií. Třetí rádek říká (zhruba!) toto: ke splnění cíle "zklidnění se" je potřeba, aby se naše se naše sekretářka vydýchala, ale protože je přehnaně horlivá, tak si prostě nevydechne, dokud se neroztrhá a nebude v obou místnostech. Čili přesněji: je-li sekretářka v obou místnostech, pak se může vydýchat a docílí tím svého cíle, že se uklidní (což doma děti jistě ocení).

Celý program tedy vypadá následovně:

PROGRAM "sekretarka"
 
CAPABILITIES {
  {room(a)} MoveRight() {NOT room(a), room(b)}
  {room(b)} MoveLeft()  {NOT room(b), room(a)}
  {true} TakeADeepBreath() {calm()}
}
 
BELIEFBASE {
  room(a).
}
 
GOALBASE {
  room(a) AND room(b), calm()
}
 
PLANBASE {}
PR-RULES {}
 
PG-RULES {
  room(a) AND room(b) <- room(a) | MoveRight(),
  room(b) AND room(a) <- room(b) | MoveLeft(),
  calm() <- room(b) AND room(a) | TakeADeepBreath()
}

Uložíme soubor pod libovolným jménem s příponou "3apl". Nyní můžeme program v platformě otevřít - "File >> Open File" + najít a vybrat soubor. Poté co se nám program otevře v levém sloupečku vybereme agenta "sekretarka" a v hlavním okně přejdeme na záložku "Agent properties". Zde vidíme jednotlivé parametry agenta - jeho "belief" a "goal" báze, schopnosti, pravidla revize plánů atd. Klikneme na tlačítko "Run this agent" (šedá šipka ve "Play") a pozorujeme chaotické chování sekretářky, resp. změnu jejích plánů a její "belief" báze. Pro detaily můžeme studovat i "Inference log" (log uvažování).

Get Flash to see this player.

To bychom pro dnešek měli všechno. Doufám, že se Vám článek líbil a že vše fungovalo tak jak mělo... V příštím díle si ukážeme o něco (ne o moc) složitější příklady.

Související články:


Nový komentář k článku "Programování inteligentních agentů - 2. díl"

Podpis (smí obsahovat url ve tvaru "http://domeny")
Zde napište slovo "člověk" (malá písmena, smí být bez diakritiky)
Text příspěvku (Texy markup)

Komentáře čtenářů

hertpl: Undefined index: comments(template line: 478) in templates/articles.html on line 219