3APL

Z Multimediaexpo.cz

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

Externí odkazy