\chapter{Agentní systémy}
Decentralizované řízení staví na principu multiagentních systémů. Ten spočívá v~nasazení několika autonomních jednotek (agentů) do dané oblasti, kteří se snaží společně řídit jistý systém, o~němž mají úplné nebo alespoň částečné informace.
\section{Inteligentní agent}
Pokud mluvíme o~agentních systémech, je nutné si nejprve 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 uvádí Michael Wooldrige v~\cite{weiss1}:  „\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é na prostředí. To můžeme klasifikovat z~několika pohledů, např. zda lze či nelze získat úplné informace o~jeho současném stavu, jestli je deterministické nebo nedeterministické (zda stejná akce povede vždy ke stejnému konečnému stavu). Dále je možné rozlišovat statické a~dynamické prostředí: Ve statickém prostředí jsou veškeré změny stavu výhradně dílem agenta, zatímco dynamické prostředí se mění bez zřetele na to, zda agent jedná nebo ne. Podobných rozdělení existuje mnoho, ale toto je pro názornost postačující. Nejlépe řiditelné je prostředí, které je plně popsatelné, deterministické a~statické -- řízení dopravy je, bohužel, případem přesně opačným.

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 zkoumá, zda je teplota v~prostředí nižší než teplota požadovaná, a~provádí 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 může být považován za agenta, ale pravděpodobně málokdo by ho označil za agenta inteligentního. Definice inteligence je však problém s~přesahem do dalších vědních disciplín% (např. psychologie)
a~je mimo rámec této práce. Proto budeme za inteligentního agenta považovat takového, 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ě, proto je třeba mezi oběma najít vyvážený poměr. Extrémně reaktivní agent totiž na základě neustále přijímaných podmětů nepřetržitě koná nějakou akci. Tímto způsobem se ovšem může dostat do stavu, kdy podně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 omezí 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 správnou míru tedy není snadné.

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 obě role. Aby to 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{weiss2} 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 být binární či n-ární. Binární umožňuje komunikaci vždy jen mezi dvěma agenty, n-ární dovoluje jednomu agentovi rozesílat zprávy několika příjemcům zároveň. Protokol je dle \cite{weiss2} 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}

Po připojení ke společné komunikační síti pak agenti mohou díky dohodnutém komunikačnímu protokolu koordinovat svou činnost a~plnit tak své cíle ve sdíleném prostředí.