\chapter{Agentní systémy}
\section{Inteligentní agent}
Pokud mluvíme o~agentních systémech, je nutné předem si vyjasnit základní pojem agent. Bohužel neexistuje přesná obecně přijímaná definice. Pro účely této práce můžeme použít například tu, kterou používá Michael Wooldrige v~\cite[kap. 1]{weiss}:  „\emph{Agent} je počítačový program, který je \emph{umístěn} v~nějakém \emph{prostředí} a~který je schopen \emph{autonomního jednání} v~tomto prostředí za účelem dosažení určených cílů.“ Autonomií se zde myslí schopnost samostatného jednání bez zásahu člověka nebo jiných programů. Tato definice se zatím vyhýbá pojmu \emph{inteligentní}, tomu se budeme věnovat později.

Agent z~definice má tedy určitý druh čidel, kterými může získat některé údaje o~svém okolí, omezený seznam akcí, které může provádět a~jistý algoritmus, který určuje jakou z~akcí (pokud vůbec nějakou) v~aktuálním čase za zjištěných podmínek provést.

Komplexnost rozhodovacího procesu závisí mimo jiné i~na prostředí. To můžeme klasifikovat z~mnoha pohledů. Zda lze či nelze získat úplné informace o~jeho současném stavu, jestli je deterministické nebo nedeterministické, tedy jestli stejná akce povede vždy ke stejnému konečnému stavu. Dále je možné rozlišit mezi statickým a~dynamickým prostředí. Ve statickém prostředí jsou veškeré změny stavu dílem pouze agenta, zatímco dynamické okolí se mění ať agent jedná nebo ne. Podobných rozdělení existuje mnoho, ale toto pro představu postačí. Nejlépe řiditelné je samozřejmě prostředí, které je plně popsatelné, deterministické a~statické, bohužel řízení dopravy je případem přesně opačným.

Naprosto typickým příkladem jednoduchého agenta umístěného v~prostředí je termostat ovládající topení za účelem udržení stále teploty v~místnosti. Tento agent má jedno čidlo, kterým určuje jestli je teplota nižší než nastavená požadovaná, a~dvě možné akce: zapnutí a~vypnutí vytápění. Rozhodovací proces se pak skládá ze dvou pravidel:
%\begin{equation*}
\begin{align*}
\text{nízká teplota} & \longrightarrow \text{zapnout vytápění} \\
\text{správná teplota} & \longrightarrow \text{vypnout vytápění}
\end{align*}
%\end{equation*}

Takto postavený program se dá považovat za agenta, ale pravděpodobně jen málokdo by ho označil za agenta inteligentního. Problém je už samotná definice inteligence. Proto se omezíme na to, že inteligentní agent je takový, který dokáže flexibilně reagovat. Flexibilita znamená tři vlastnosti:
\begin{description}
	\item[reaktivita] -- inteligentní agent vnímá své okolí a~dle takto získaných údajů reaguje na jeho změny tak, aby splnil své nastavené cíle;
	\item[proaktivita] -- inteligentní agent je schopný předvídat chování systému a~na základě těchto předpovědí aktivně jednat tak, aby splnil své nastavené cíle;
	\item[sociální schopnosti] -- inteligentní agenti na sebe mohou vzájemně působit tak, aby splnili své nastavené cíle.
\end{description}

Požadavky na vysokou reaktivitu a~proaktivitu jdou proti sobě. Je třeba najít vyvážený poměr mezi oběma. Extrémně reaktivní agent totiž na základě neustále přijímaných podmětů stále koná nějakou akci. Ovšem tímto způsobem se může dostat do stavu, kdy podměty způsobují střídavé zaměření agenta na různé cíle, kterou nejsou slučitelné a~tím pádem ani jeden z~cílů nemůže být nikdy uskutečněn. Na druhou stranu příliš proaktivní agent se zaměří na jeden cíl a~kvůli tomu ignoruje, že počáteční podmínky, které ho k~plnění cíle dovedly, už nejsou platné. Najít proto tu správnou míru je obtížná úloha.

Mezi sociální schopnosti nepatří jen rutinní výměna informací, kterou dnešní počítače provádějí prakticky neustále, ale především schopnost vyjednávat a~spolupracovat při plnění společných nebo individuálních cílů. Mezi běžné akce tak patří navrhování změn spolu s~přínosem, které by tato změna přinesla, jejich zvažování a~následné přijetí, odmítnutí či sestavení protinávrhu vedoucího ke kompromisu.

\section{Komunikace mezi agenty}

Agenti mezi kterými probíhá komunikace musí být schopní zastávat v~dialogu aktivní, pasivní nebo případně obě role. Aby toto bylo možné, budeme předpokládat, že agenti mohou přijímat a~zasílat zprávy jistou komunikační sítí. 

Michale N. Huhns a~Larry M. Stephens v~\cite[kap. 2]{weiss} uvádějí, že zprávy zasílané agenty lze dělit na dva základní typy: \emph{prohlášení} a~\emph{dotazy}. Každý agent by měl být schopen přijímat informace. Agent zastávající pasivní roli v~dialogu je navíc schopen odpovídat na otázky, to znamená umět přijmout a~zpracovat dotaz a~odpovědět na něj odesílateli nějakým prohlášením. Aktivní agent je pak takový, který sestavuje a~odesílá dotazy a~prohlášení přijímá. Díky tomu aktivní agenti mohou mít jistou formu kontroly nad pasivními. 

V~případě rovnocenných agentů je nutné, aby všichni zvládali jak aktivní, tak pasivní roli v~dialogu.

Pro umožnění komunikace mezi agenty se definuje společný komunikační protokol. Ten může mít binární či n-ární. Binární umožňuje komunikaci vždy jen mezi dvěma agenty, n-ární dovoluje jednomu agentovi rozeslat zprávu několika příjemcům zároveň. Protokol je určen datovou strukturou skládající se z~pěti položek
\begin{enumerate}
	\item odesílatel
	\item příjemce (příjemci)
	\item jazyk v~protokolu
	\item kódovací a~dekódovací funkce
	\item akce, která by měla být vykonána příjemcem
\end{enumerate}

