3APL

3APL (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[kdy?] 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ě[kdy?] 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:

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. 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: "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 a 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:

IF predikat_uspeje THEN { Akce1(); ...; AkceN(); } ELSE { ... }
WHILE predikat_plati DO { Akce1(); ...; AkceN(); }
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. 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 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

Externí odkazy

Zdroj