<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=3APL</id>
		<title>3APL - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=3APL"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=3APL&amp;action=history"/>
		<updated>2026-04-27T13:12:07Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=3APL&amp;diff=120837&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=3APL&amp;diff=120837&amp;oldid=prev"/>
				<updated>2013-05-06T09:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 6. 5. 2013, 09:33&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=3APL&amp;diff=120836&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=3APL&amp;diff=120836&amp;oldid=prev"/>
				<updated>2010-10-21T17:20:13Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
'''3APL (An Abstract Agent Programming Language)''' je [[programovací jazyk]] (a [[Počítačová platforma|platforma]]) pro tvorbu agentů a multi-agentních systémů.&lt;br /&gt;
&lt;br /&gt;
Jazyk 3APL byl navržen na [http://www.uu.nl 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).&lt;br /&gt;
&lt;br /&gt;
== Běh programu ==&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
* Platforma 3APL postavená na [[Java (platforma)|Javě]] – považována za relativně stabilní, používá se při výuce multi-agentních systému na univerzitě v Utrechtu,&lt;br /&gt;
* [[Haskell]] interpret jazyka 3APL – prototyp s nepatrnými odlišnostmi – používá se při výuce na MFF UK,&lt;br /&gt;
* 3APL-M (Toymaker) – platforma určena pro mobilní zařízení.&lt;br /&gt;
&lt;br /&gt;
== Struktura programu v 3APL ==&lt;br /&gt;
=== Základní struktura ===&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
* akce a proměnná začíná velkým písmenem&lt;br /&gt;
* predikát začíná malým písmenem&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
Program by každopádně měl začínat určením názvu agenta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PROGRAM &amp;quot;nazev_programu&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pro zpřehlednění programu je možno načíst do BELIEFBASE (viz níže) externí soubor s [[Prolog (programovací jazyk)|Prolog]] [[Predikát (logika)|predikáty]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LOAD &amp;quot;prolog_soubor.pl&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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ý.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BELIEFBASE {&lt;br /&gt;
  unaveny().&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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í.&lt;br /&gt;
&lt;br /&gt;
Následující kód například popisuje co to znamená &amp;quot;jít spát&amp;quot;: 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 &amp;quot;dát si pivo&amp;quot;. 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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CAPABILITIES {&lt;br /&gt;
  { unaveny() } VyspiSe() { NOT unaveny(), dobryPocit() }&lt;br /&gt;
  { true }      DejPivo() { dobryPocit() }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GOALBASE {&lt;br /&gt;
  dobryPocit().&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PLANBASE {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cíl &amp;lt;- strážná_podmínka | { akce }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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á...&lt;br /&gt;
&lt;br /&gt;
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):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PG-RULES {&lt;br /&gt;
  dobryPocit() &amp;lt;- NOT dobryPocit() | { DelejSTimNeco(); }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PR-RULES {&lt;br /&gt;
  DelejSTimNeco() &amp;lt;- NOT dobryPocit() | {&lt;br /&gt;
    IF (NOT unaveny()) THEN {&lt;br /&gt;
      DejPivo();&lt;br /&gt;
    } ELSE {&lt;br /&gt;
      VyspiSe();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Řízení běhu, podmínky, další syntax jazyka ===&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
* Podmíněný příkaz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;IF predikat_uspeje THEN { Akce1(); ...; AkceN(); } ELSE { ... }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Cyklus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;WHILE predikat_plati DO { Akce1(); ...; AkceN(); }&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Konjunkce, disjunkce, negace Prologovských predikátů:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
predikat1() AND predikat2()&lt;br /&gt;
predikat1() OR predikat2()&lt;br /&gt;
NOT predikat()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vestavěné akce jazyka 3APL ===&lt;br /&gt;
==== Komunikace agentů ====&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;code&amp;gt;Send(agent, typ_zpravy, obsah_zpravy)&amp;lt;/code&amp;gt;. Pakliže agent A pošle agentovi B zprávu voláním akce &amp;lt;code&amp;gt;Send(B, X, Y)&amp;lt;/code&amp;gt;, uloží se do BELIEFBASE agenta a predikát &amp;lt;code&amp;gt;sent(B,X,Y)&amp;lt;/code&amp;gt; a do BELIEFBASE agenta B se uloží &amp;lt;code&amp;gt;received(A,X,Y)&amp;lt;/code&amp;gt;. 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.&lt;br /&gt;
&lt;br /&gt;
==== Prostředí ====&lt;br /&gt;
Krom toho, co je &amp;quot;uvnitř&amp;quot; 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).&lt;br /&gt;
&lt;br /&gt;
Java implementace platformy 3APL má za účelem komunikace s libovolným prosředím k dispozici příkaz &amp;lt;code&amp;gt;Java(nazev_prostredi, akce, navrat)&amp;lt;/code&amp;gt; - například ve zmíněným prostředím BlockWorld je možno zjistit bomby v okolí agenta takto: &amp;lt;code&amp;gt;Java(&amp;quot;BlockWorld&amp;quot;, senseBombs, BOMBS)&amp;lt;/code&amp;gt;, kde BOMBS se po provedení akce naplní seznamem dvojic (se souřadnicemi bomb).&lt;br /&gt;
&lt;br /&gt;
== Stáhněte si ==&lt;br /&gt;
* [http://www.cs.uu.nl/3apl/download.html 3APL Download page]&lt;br /&gt;
* [http://www.cs.uu.nl/3apl-m/download.html 3APL-M Download page]&lt;br /&gt;
&lt;br /&gt;
== Literatura ==&lt;br /&gt;
* Mehdi Dastani, B. van Riemsdijk, F. Dignum, J.J. Meyer: [http://www.cs.uu.nl/3apl/publication/goal.pdf A Programming Language for Cognitive Agents: Goal Directed 3APL], 2003&lt;br /&gt;
&lt;br /&gt;
== Externí odkazy ==&lt;br /&gt;
* [http://www.cs.uu.nl/3apl/ Oficiální stránky 3APL]&lt;br /&gt;
* [http://www.cs.uu.nl/3apl-m/ Oficiální stránky 3APL-M]&lt;br /&gt;
* [http://joshis.iprofil.cz/clanky-teoreticka-informatika Seriál o programování agentů v jazyce 3APL]&lt;br /&gt;
* [http://www.cs.uu.nl/3apl/download/java/userguide.pdf Programátorský manuál jazyka 3APL (Java Verze)]&lt;br /&gt;
* [http://www.cs.uu.nl/3apl/bnf.pdf EBNF Specifikace Syntaxe 3APL]&lt;br /&gt;
* [http://www.cs.uu.nl/3apl/publications.html 3APL Publikace - seznam]&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}}&lt;br /&gt;
[[Kategorie:Počítačové jazyky]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>