3APL
Author
Albert Flores3APL (An Abstract Agent Programming Language) je programovací jazyk (a platforma) pro tvorbu agentů a multiagentních systémů.
Jazyk 3APL byl navržen na univerzitě v Utrechtu za účelem ověření konceptu programovacího jazyka, který by umožňoval rychle tvořit softwarové agenty založené na BDI (belief-desire-intention) architektuře. Vývoj v této oblasti v současnosti pokračuje jazykem 2APL (A Practical Agent Programming Language), cílem je dosáhnout jediného univerzálního jazyka pro tvorbu agentů - jazyka 1APL (Single Agent Programming Language).
Běh programu
Jazyk je vzhledem k tomu, o jaký typ jazyka se jedná, interpretovaný. V současné době existují 3 oficiální možnosti, jak spustit program v jazyce 3APL:
* Platforma 3APL postavená na Javě - považována za relativně stabilní, používá se při výuce multiagentních systému na univerzitě v Utrechtu, * Haskell interpret jazyka 3APL - prototyp s nepatrnými odlišnostmi - používá se při výuce na MFF UK, * 3APL-M (Toymaker) - platforma určena pro mobilní zařízení.
Struktura programu v 3APL
Základní struktura
Jazyk v některých principech vychází z Prologu, jeho vlastnosti se liší v závislosti na platformě. Jazyk není case-sensitive až na následující výjimky:
* akce a proměnná začíná velkým písmenem * predikát začíná malým písmenem
Program v jazyce 3APL sestává z následujících částí (toto je struktura pro Java verzi, ostatní se mohou v detailech lišit).
Program by každopádně měl začínat určením názvu agenta:
PROGRAM "nazev_programu"
Pro zpřehlednění programu je možno načíst do BELIEFBASE (viz níže) externí soubor s Prolog predikáty:
LOAD "prolog_soubor.pl"
Dále lze v programu specifikovat počáteční belief-bázi, tedy to, co agent na začátku ví o prostředí, ve kterém bude operovat. Jednotlivé znalosti jsou přitom Prologovské predikáty. +more Obsah belief-báze se během činnosti agenta mění, protože agent prováděním akcí mění prostředí a je si toho vědom.
Následující příklad ukládá do belief-báze predikát, který říká, že agent je na začátku (před spuštěním programu) unavený.
BELIEFBASE { unaveny. }
Další součástí programu je specifikace možných akcí a jejich důsledků na BELIEFBASE agenta. Jedná se pouze o vyčtení možných akcí, podmínek, které musí být splněny, aby se mohly provést, a jejich efektů. +more Nedefinuje se zde žádné schéma uvažování.
Následující kód například popisuje, co to znamená "jít spát": když je agent unavený, může jít spát a když se vyspí, tak už není unavený a cítí se dobře. Dále je v kódu uvedena druhá akce: "dát si pivo". +more Když si agent (kdykoli) dá pivo, cítí se dobře, ale na jeho únavu to (zde se jedná možná o příliš velké zjednodušení) nemá vliv.
CAPABILITIES { { unaveny } VyspiSe { NOT unaveny, dobryPocit } { true } DejPivo { dobryPocit } }
Každý agent je navržen za nějakým účelem a tento účel je shrnut do sekce GOALBASE. Jedná se opět o sekci tvořenou Prologovskými predikáty. +more Cíl je považován za splněný, pokud v něj agent věří (je uložen v BELIEFBASE), potom se cíl odstraní z GOALBASE. V příkladu se náš agent snaží cítit se dobře.
GOALBASE { dobryPocit. }
Je možno také specifikovat počáteční plán agenta, to znamená akce, které má agent naplánovány pro provedení bezprostředně po spuštění programu.
PLANBASE { }
Specifikace pravidel popisující způsob dosažení cíle (a pravidla revize plánů) je další důležitou části programu v jazyce 3APL. Má vždy následující syntax:
cíl
Cíl může být navíc prázdný, podmínka může být true, akce může být složená/jednoduchá/vestavěná...
Příklad pravidel specifikující způsob dosažení cíle (pg-rules) - když se agent necítí dobře, měl by s tím něco dělat (aby se cítil dobře):
PG-RULES { dobryPocit
Dále je možno určit pravidla pro revizi plánu (pr-rules). Ta umožňují definovat chování agenta v případě, že byla zneplatněna některá z podmínek, která vedla ke stanovení současného plánu, případně je zde možno definovat složené akce pomocí akcí elementárních (tj. +more těch definovaných v CAPABILITIES) a vestavěných (viz níže).
Příklad - když se agent necítí dobře, tak aby s tím něco dělal, musí se napřed rozhodnout, jaká je příčina a podle toho se buď vyspat, nebo si dát pivo:
PR-RULES { DelejSTimNeco
Řízení běhu, podmínky, další syntax jazyka
Formální specifikaci jazyka 3APL lze nalézt na oficiálních stránkách. Pro základní použití jazyka pravděpodobně stačí následující seznam programátorských konstruktů, které lze v 3APL použít:
IF predikat_uspeje THEN { Akce1; ...; AkceN; } ELSE { ... }
* Cyklus:
WHILE predikat_plati DO { Akce1; ...; AkceN; }
* Konjunkce, disjunkce, negace Prologovských predikátů:
predikat1 AND predikat2 predikat1 OR predikat2 NOT predikat
Vestavěné akce jazyka 3APL
Komunikace agentů
Jazyk 3APL byl od začátku vyvíjen jako jazyk, ve kterém je možno tvořit multiagentní systémy. Proto jazyk nutně musí obsahovat prostředky pro komunikaci mezi agenty. +more Je tedy k dispozici funkce Send(agent, typ_zpravy, obsah_zpravy). Pakliže agent A pošle agentovi B zprávu voláním akce Send(B, X, Y), uloží se do BELIEFBASE agenta a predikát sent(B,X,Y) a do BELIEFBASE agenta B se uloží received(A,X,Y). Takto agenti mohou - samozřejmě mají-li definovaná příslušná pravidla v PG-RULES (nebo PR-RULES) - na zprávy (jak přijaté, tak odeslané) reagovat.
Prostředí
Krom toho, co je "uvnitř" agenta, je možno v 3APL pracovat s externím prostředím. To je možno vytvořit např. +more ve formě Java programu (požadovaný interface je definován v příručce k jazyku). Platforma 3APL postavená na Javě obsahuje standardní prostředí vhodné například pro výuku - prostředí BlockWorld (svět ze čtverečků obsahující stěny, bomby a díru, kde se agent může pohybovat).
Java implementace platformy 3APL má za účelem komunikace s libovolným prostředím k dispozici příkaz Java(nazev_prostredi, akce, navrat) - například ve zmíněném prostředí BlockWorld je možno zjistit bomby v okolí agenta takto: Java("BlockWorld", senseBombs, BOMBS), kde BOMBS se po provedení akce naplní seznamem dvojic (se souřadnicemi bomb).
Literatura
Mehdi Dastani, B. van Riemsdijk, F. Dignum, J.J. Meyer: [url=http://www.cs.uu.nl/3apl/publication/goal.pdf]A Programming Language for Cognitive Agents: Goal Directed 3APL[/url] , 2003
Externí odkazy
[url=http://www. cs. +moreuu. nl/3apl/]Oficiální stránky 3APL[/url] * [url=http://www. cs. uu. nl/3apl-m/]Oficiální stránky 3APL-M[/url] * [url=https://web. archive. org/web/20081015102144/http://joshis. iprofil. cz/clanky-teoreticka-informatika]Seriál o programování agentů v jazyce 3APL[/url] * [url=http://www. cs. uu. nl/3apl/download/java/userguide. pdf]Programátorský manuál jazyka 3APL (Java Verze)[/url] * [url=http://www. cs. uu. nl/3apl/bnf. pdf]EBNF Specifikace Syntaxe 3APL[/url] * [url=http://www. cs. uu. nl/3apl/publications. html]3APL Publikace - seznam[/url].