Multimediaexpo.cz je již 18 let na českém internetu !!
3APL
Z Multimediaexpo.cz
m (1 revizi) |
m (1 revizi) |
Aktuální verze z 6. 5. 2013, 09:33
3APL (An Abstract Agent Programming Language) je programovací jazyk (a platforma) pro tvorbu agentů a multi-agentních systémů.
Jazyk 3APL byl navržen na univerzitě v Utrechtu za účelem ověření konceptu programovacího jazyku, 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).
Obsah |
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 multi-agentní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 se 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. 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ů. 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 - akce "dát si pivo". 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 - tento účel je shrnut do sekce GOALBASE. Jedná se opět o sekci tvořenou Prologovskými predikáty. 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 <- strážná_podmínka | { akce }
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() <- NOT dobryPocit() | { DelejSTimNeco(); } }
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. 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() <- NOT dobryPocit() | { IF (NOT unaveny()) THEN { DejPivo(); } ELSE { VyspiSe(); } } }
Ří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:
- Podmíněný příkaz:
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 odzačátku vyvíjen jako jazyk, ve kterém je možno tvořit multi-agentí systémy. Proto jazyk nutně musí obsahovat prostředky pro komunikaci mezi agenty. 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ř. 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 prosředím k dispozici příkaz Java(nazev_prostredi, akce, navrat)
- například ve zmíněným prostředím 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).
Stáhněte si
Literatura
- Mehdi Dastani, B. van Riemsdijk, F. Dignum, J.J. Meyer: A Programming Language for Cognitive Agents: Goal Directed 3APL, 2003
Externí odkazy
- Oficiální stránky 3APL
- Oficiální stránky 3APL-M
- Seriál o programování agentů v jazyce 3APL
- Programátorský manuál jazyka 3APL (Java Verze)
- EBNF Specifikace Syntaxe 3APL
- 3APL Publikace - seznam
Náklady na energie a provoz naší encyklopedie prudce vzrostly. Potřebujeme vaši podporu... Kolik ?? To je na Vás. Náš FIO účet — 2500575897 / 2010 |
---|
Informace o článku.
Článek je převzat z Wikipedie, otevřené encyklopedie, do které přispívají dobrovolníci z celého světa. |