<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.simulace.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xdynl00</id>
	<title>Simulace.info - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.simulace.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xdynl00"/>
	<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php/Special:Contributions/Xdynl00"/>
	<updated>2026-07-27T16:41:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1508</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1508"/>
		<updated>2012-06-20T22:59:08Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Vytvoření referencí na ostatní pojmy na této WIKI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako [[Game theory/cs |teorie her]]. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti [[One-shot game/cs |her jednorázových (statických)]]. &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové [[Games/cs |hry]], při kterých je [[One-shot game/cs |jednorázová]] či vícekolová hra stejnými [[Player/cs |hráči]] řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných [[Strategy/cs |strategií]], které mohou nejen reagovat na tahy soupeře ([[Learning/cs |učení se]]), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou [[Utility/cs |výplatu (užitek)]]. V kapitole se budeme zabývat jevy jako jsou [[Cooperation in game theory/cs |kooperace]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplata]].&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování [[Real world/cs |reálného světa]] tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený [[Meta strategy/cs |plán hry]], který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají [[Meta strategy/cs |meta-strategie]]. Aby byla strategie [[Equilibrium strategy/cs |rovnovážná]], musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech [[Utility maximalization/cs |nemaximalizují svůj užitek]], tedy že jednají [[Irataional behavior/cs |iracionálně]]. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v [[Long-term horizon/cs |dlouhodobém horizontu]].&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry [[Infinite and indefinite games/cs |nekonečné]] a [[Finite games/cs |konečné]], přičemž konečně opakované hry dále dělíme na [[Indefinite/cs |konečné s neznámým koncem]] a [[Finite games/cs |konečné se známým koncem]] &amp;lt;ref name=&amp;quot;gibbons&amp;quot; /&amp;gt;. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s [[Probability/cs |pravděpodobností]], že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie [[Equilibrium strategy/cs |rovnovážnou strategií]], musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom [[Subgame/cs |podhrou (subgame)]] celé hry, je tedy zřejmé, že budeme hledat [[Subgame Perfect Nash Equilibrium/cs |Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE)]] &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít [[Backward induction/cs |zpětné indukce]].&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným [[Prisonners Dilemma/cs |vězňovo dilematem]]. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je ''{P,P}'' (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice [[Nash Equilibrium/cs |Nashovi rovnováhy]]). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie ''{P,P}'' bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno [[Backward Induction paradox/cs |paradoxem zpětné indukce]].&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie ''{P,P}'' (ve skutečnosti se jedná o [[Strategy set/cs |vektor strategií jednotlivých hráčů]], kde první ''&amp;quot;P&amp;quot;'' znázorňuje volbu prvního hráče a druhé ''&amp;quot;P&amp;quot;'' druhého hráče, pro snažší pochopení budeme [[Vector/cs |vektor]] takovýchto strategií nazývat souhrně ''&amp;quot;strategií [hry]&amp;quot;'') [[Dominant strategy/cs |dominantní strategií]], kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt ''NE'' a to zahrát, zvolí tedy ''{P,P}''. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají ''{P,P}'' a proto nemají důvod ani nyní kooperovat, tedy zahrát ''{N,N}''. Budou tedy opět volit strategii ''{P,P}''. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají ''{P,P}''. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají ''{P,P}'' a budou tedy i v prvním kole volit strategii ''{P,P}''. ''SPNE'' všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
[[Pay-off/cs |Výplata]] pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10 krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho [[Rational behavior/cs |racionality]] nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií ''{N,N}'' se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché, jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako [[Folk Theorem/cs |''&amp;quot;folk theorem&amp;quot;'']] &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. ''&amp;quot;folk teorém&amp;quot;'' tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý ''&amp;quot;folk teorém&amp;quot;'' říká, že dosažitelný výplatní vektor, který [[Pareto domination/cs |Paretovsky dominuje]] jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou [[Reward in game theory/cs |odměny]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplaty]].&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v [[#Konečně opakované hry se známým koncem |této kapitole] možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt; a později si jednu i podrobněji popíšeme:&lt;br /&gt;
*[[Always Defect Strategy/cs |Vždy podvádět (Always Defect)]]&lt;br /&gt;
*[[Always Cooperate Strategy/cs |Vždy spolupracovat (Always Cooperate)]]&lt;br /&gt;
*[[Naive Grim Trigger Strategy/cs |Naivní Grim Trigger]]&lt;br /&gt;
*[[Grim Trigger Strategy/cs |Grim Trigger]]&lt;br /&gt;
*[[Tit for Tat Strategy/cs |Oko za ok, zub za zub (Tit for Tat)]]&lt;br /&gt;
*[[Limited Retaliation Strategy/cs |Omezená odplata (Limited Retaliation)]]&lt;br /&gt;
*[[WS-LS Strategy/cs |Strategie Win-Stay, Lose-Shift (WS-LS)]]&lt;br /&gt;
*[[Deviate Once Strategy/cs |Jednou se odchýlit (Deviate Once)]]&lt;br /&gt;
*[[Grim Deviate Once Strategy/cs |Grim Deviate Once]]&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci [[Grim Trigger Strategy/cs |Grim Trigger]] strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole [[Cooperation in Game Theory/cs |kooperuje]] a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude ''3'' a další ''3'' získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P^2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P^3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě ''4'' a poté již samé ''1''. Petrova očekávaná výplata z porušení spolupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než &amp;lt;math&amp;gt;\frac{1}{3}&amp;lt;/math&amp;gt;. Postup výpočtu je uveden níže:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě ''&amp;quot;a&amp;quot;''. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši ''&amp;quot;c&amp;quot;'' a dále už jen ''&amp;quot;d&amp;quot;''. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v[[#Představení konečně opakované hry s neznámým koncem pomocí příkladu |sekci výše]] určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat [[Disconted future value/cs |diskontovanou současnou hodnotu]] budoucích výplat. Současná hodnota budoucí výplaty ''&amp;quot;X&amp;quot;'' získané za ''&amp;quot;n&amp;quot;'' období se spočítá jako jako &amp;lt;math&amp;gt;\frac{X}{(1+r)^n}&amp;lt;/math&amp;gt;, přičemž ''&amp;quot;r&amp;quot;'' označuje úrokovou míru a &amp;lt;math&amp;gt;\frac{1}{1+r}&amp;lt;/math&amp;gt; je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny [[Economics/cs |ekonomie]], kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
'''Očekávaný výnos ze spolupráce vypočítáme jako:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Při porušení spolupráce získáváme obdobné:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, neboli:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Což můžeme zjednodušit na:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že ''&amp;quot;spolupracovat&amp;quot;'' je nejlepší odpovědí na strategii ''&amp;quot;spolupracovat&amp;quot;'' druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie ''&amp;quot;nespolupracovat&amp;quot;'' nejlepší odpovědí na strategii ''&amp;quot;nespolupracovat&amp;quot;''? Pokud by tato hrozba nebyla [[Credible threats in game theory/cs |kredibilní]], nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie ''&amp;quot;nespolupracovat&amp;quot;'' opravdu nejlepší odpovědí na strategii ''&amp;quot;nespolupracovat&amp;quot;''. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezměme si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na [[#Strategie |začátku této kapitoly]], Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie [[Tit for Tat Strategy/cs |''&amp;quot;Oko za oko, zub za zub&amp;quot;'']], která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jediným [[Subgame perfect equilibrium/cs |subgame rovnovážným řešením]].&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize ''“An introduction to Game Theory”'' &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie ''“Oko za oko, zub za zub”'' (Tit-for-tat). Konkrétní zprávy je možné přečíst v: &amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971 &amp;lt;ref name=&amp;quot;Trivers&amp;quot; /&amp;gt;. Při pokusu provedeným s rybami (konkrétně [http://cs.wikipedia.org/wiki/Koljuška_tř%C3%ADostná koljuškami]), pozoroval, že ty také využívají strategie ''&amp;quot;Tit-for-tat&amp;quot;''. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) &amp;lt;ref name=&amp;quot;Lazarus&amp;quot; /&amp;gt; a Milinski (1993) &amp;lt;ref name=&amp;quot;Milinski&amp;quot; /&amp;gt;, který tvrdí, že koljušky nenásledují strategii ''“Oko za oko, zub za zub”'', nýbrž strategii zvanou [[Pavlov Game Strategy/cs |''&amp;quot;Pavlov&amp;quot;'']].&lt;br /&gt;
&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991) &amp;lt;ref name=&amp;quot;Mason&amp;quot; /&amp;gt;, kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002) &amp;lt;ref name=&amp;quot;Sabater&amp;quot; /&amp;gt;, kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední &amp;lt;ref name=&amp;quot;roth&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci [[#Strategie |Strategie]] provedl Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Konkrétně se jedná o: [[Grim Trigger Strategy/cs |''“Grim trigger strategies”'']], [[Limited Retaliation Strategy/cs |“Limited punishment”]] a [[Tit for Tat Strategy/cs |''“Tit-for-tat”'']]. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) &amp;lt;ref name=&amp;quot;kreps&amp;quot; /&amp;gt;. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt; zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci [[Folk theorem/cs |Folk theorem]]. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt; Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce [[Multistage games/cs |Vícekolové hry]].&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného typu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: ''&amp;quot;vysoké&amp;quot;'' a ''&amp;quot;nízké&amp;quot;''.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v [[#Příklad 1: Kartel |příkladu 1]], pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že hra se bude opakovat i následující den (nedojde tedy k otevření trhu). Oba podniky jsou vyznavači [[Grim Trigger strategy/cs |Grim trigger strategií]]. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude ''{nízké ceny, nízké ceny}''. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí ''{nízké ceny, nízké ceny}'', trest pro ně tedy není hrozbou a proto opět zvolí NE ''{nízké ceny, nízké ceny}''. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE ''{nízké ceny, nízké ceny}''.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly [[#Představení konečně opakované hry s neznámým koncem pomocí příkladu |konečně opakované hry s neznámým koncem]] získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1-5}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1-P} &amp;gt; 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2-10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gibbons&amp;quot;&amp;gt;Gibbons, R. (2006) &amp;quot;A Primer in Game Theory&amp;quot;, Financial Times, str. 82-114&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;slamova&amp;quot;&amp;gt;Skálová, A. (2007) &amp;quot;Opakované hry&amp;quot;, diplomová práce, obhájeno na Vysoké škole ekonomické v Praze&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osbornenew&amp;quot;&amp;gt;Osborne, M. J. (2004) &amp;quot;An Introduction to Game Theory&amp;quot;, Oxford University Press, str. 389-420&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;car&amp;quot;&amp;gt;Carmichael, F. (2005) &amp;quot;A Guide to Game Theory&amp;quot;, Financial Times, str. 197-234&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osborneold&amp;quot;&amp;gt;Osborne, M. J., Rubinstein, A. (1998) &amp;quot;A Course in Game Theory&amp;quot;, The MIT Press, páté vydání, str. 113-162&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;roth&amp;quot;&amp;gt;Roth, A. E., Murnigham, J. K. (1978) &amp;quot;Equilibrium behaviour and repeated play of the prisoners’ dilemma&amp;quot;, Journal of Mathematical Psychology, str. 189–98&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;kreps&amp;quot;&amp;gt;Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) &amp;quot;Rational cooperation in the finitely repeated prisoners’ dilemma&amp;quot;, Journal of Economic Theory, 27, pp. 245–52.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot;&amp;gt;Axelrod, R. (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 3–25.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot;&amp;gt; Axelrod, R. (1980b), &amp;quot;More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 379–403.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot;&amp;gt;Axelrod, R. (1984), &amp;quot;The evolution of cooperation&amp;quot;. New York: Basic Books.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Trivers&amp;quot;&amp;gt;Trivers, R. L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, str. 35–57.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Lazarus&amp;quot;&amp;gt;Lazarus, J., Metcalfe, N. B. (1990), &amp;quot;Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, str. 987–988.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Milinski&amp;quot;&amp;gt;Milinski, Manfred (1993), &amp;quot;Cooperation wins and stays”, Nature 364, str. 12–13.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Mason&amp;quot;&amp;gt;Mason, C. F., Phillips, O. R., Redington, D. B. (1991) &amp;quot;The role of gender in a non-cooperative game&amp;quot;, Journal of Economic Behaviour and Organisation, 15, str. 215–35.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Sabater&amp;quot;&amp;gt;Sabater-Grande, G., Georgantzis, N. (2002) &amp;quot;Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test&amp;quot;, Journal of Economic Behaviour and Organization, 48, str. 37–50.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1506</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1506"/>
		<updated>2012-06-20T21:58:33Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako [[Game theory/cs |teorie her]]. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti [[One-shot game/cs |her jednorázových (statických)]]. &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové [[Games/cs |hry]], při kterých je [[One-shot game/cs |jednorázová]] či vícekolová hra stejnými [[Player/cs |hráči]] řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných [[Strategy/cs |strategií]], které mohou nejen reagovat na tahy soupeře ([[Learning/cs |učení se]]), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou [[Utility/cs |výplatu (užitek)]]. V kapitole se budeme zabývat jevy jako jsou [[Cooperation in game theory/cs |kooperace]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplata]].&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování [[Real world/cs |reálného světa]] tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený [[Meta strategy/cs |plán hry]], který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají [[Meta strategy/cs |meta-strategie]]. Aby byla strategie [[Equilibrium strategy/cs |rovnovážná]], musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech [[Utility maximalization/cs |nemaximalizují svůj užitek]], tedy že jednají [[Irataional behavior/cs |iracionálně]]. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v [[Long-term horizon/cs |dlouhodobém horizontu]].&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry [[Infinite and indefinite games/cs |nekonečné]] a [[Finite games/cs |konečné]], přičemž konečně opakované hry dále dělíme na [[Indefinite/cs |konečné s neznámým koncem]] a [[Finite games/cs |konečné se známým koncem]] &amp;lt;ref name=&amp;quot;gibbons&amp;quot; /&amp;gt;. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s [[Probability/cs |pravděpodobností]], že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt; a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971 &amp;lt;ref name=&amp;quot;Trivers&amp;quot; /&amp;gt;. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) &amp;lt;ref name=&amp;quot;Lazarus&amp;quot; /&amp;gt; a Milinski (1993) &amp;lt;ref name=&amp;quot;Milinski&amp;quot; /&amp;gt;, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou [[Pavlov Game Strategy/cs |&amp;quot;Pavlov&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991) &amp;lt;ref name=&amp;quot;Mason&amp;quot; /&amp;gt;, kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002) &amp;lt;ref name=&amp;quot;Sabater&amp;quot; /&amp;gt;, kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední &amp;lt;ref name=&amp;quot;roth&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) &amp;lt;ref name=&amp;quot;kreps&amp;quot; /&amp;gt;. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt; zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1-5}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1-P} &amp;gt; 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2-10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gibbons&amp;quot;&amp;gt;Gibbons, R. (2006) &amp;quot;A Primer in Game Theory&amp;quot;, Financial Times, str. 82-114&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;slamova&amp;quot;&amp;gt;Skálová, A. (2007) &amp;quot;Opakované hry&amp;quot;, diplomová práce, obhájeno na Vysoké škole ekonomické v Praze&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osbornenew&amp;quot;&amp;gt;Osborne, M. J. (2004) &amp;quot;An Introduction to Game Theory&amp;quot;, Oxford University Press, str. 389-420&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;car&amp;quot;&amp;gt;Carmichael, F. (2005) &amp;quot;A Guide to Game Theory&amp;quot;, Financial Times, str. 197-234&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osborneold&amp;quot;&amp;gt;Osborne, M. J., Rubinstein, A. (1998) &amp;quot;A Course in Game Theory&amp;quot;, The MIT Press, páté vydání, str. 113-162&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;roth&amp;quot;&amp;gt;Roth, A. E., Murnigham, J. K. (1978) &amp;quot;Equilibrium behaviour and repeated play of the prisoners’ dilemma&amp;quot;, Journal of Mathematical Psychology, str. 189–98&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;kreps&amp;quot;&amp;gt;Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) &amp;quot;Rational cooperation in the finitely repeated prisoners’ dilemma&amp;quot;, Journal of Economic Theory, 27, pp. 245–52.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot;&amp;gt;Axelrod, R. (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 3–25.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot;&amp;gt; Axelrod, R. (1980b), &amp;quot;More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 379–403.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot;&amp;gt;Axelrod, R. (1984), &amp;quot;The evolution of cooperation&amp;quot;. New York: Basic Books.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Trivers&amp;quot;&amp;gt;Trivers, R. L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, str. 35–57.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Lazarus&amp;quot;&amp;gt;Lazarus, J., Metcalfe, N. B. (1990), &amp;quot;Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, str. 987–988.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Milinski&amp;quot;&amp;gt;Milinski, Manfred (1993), &amp;quot;Cooperation wins and stays”, Nature 364, str. 12–13.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Mason&amp;quot;&amp;gt;Mason, C. F., Phillips, O. R., Redington, D. B. (1991) &amp;quot;The role of gender in a non-cooperative game&amp;quot;, Journal of Economic Behaviour and Organisation, 15, str. 215–35.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Sabater&amp;quot;&amp;gt;Sabater-Grande, G., Georgantzis, N. (2002) &amp;quot;Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test&amp;quot;, Journal of Economic Behaviour and Organization, 48, str. 37–50.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1505</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1505"/>
		<updated>2012-06-20T21:57:04Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Zdroje */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako [[Game theory/cs |teorie her]]. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti [[One-shot game/cs |her jednorázových (statických)]]. &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové [[Games/cs |hry]], při kterých je [[One-shot game/cs |jednorázová]] či vícekolová hra stejnými [[Player/cs |hráči]] řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných [[Strategy/cs |strategií]], které mohou nejen reagovat na tahy soupeře ([[Learning/cs |učení se]]), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou [[Utility/cs |výplatu (užitek)]]. V kapitole se budeme zabývat jevy jako jsou [[Cooperation in game theory/cs |kooperace]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplata]].&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování [[Real world/cs |reálného světa]] tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený [[Meta strategy/cs |plán hry]], který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají [[Meta strategy/cs |meta-strategie]]. Aby byla strategie [[Equilibrium strategy/cs |rovnovážná]], musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech [[Utility maximalization/cs |nemaximalizují svůj užitek]], tedy že jednají [[Irataional behavior/cs |iracionálně]]. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v [[Long-term horizon/cs |dlouhodobém horizontu]].&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry [[Infinite and indefinite games/cs |nekonečné]] a [[Finite games/cs |konečné]], přičemž konečně opakované hry dále dělíme na [[Indefinite/cs |konečné s neznámým koncem]] a [[Finite games/cs |konečné se známým koncem]] &amp;lt;ref name=&amp;quot;gibbons&amp;quot; /&amp;gt;. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s [[Probability/cs |pravděpodobností]], že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt; a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971 &amp;lt;ref name=&amp;quot;Trivers&amp;quot; /&amp;gt;. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) &amp;lt;ref name=&amp;quot;Lazarus&amp;quot; /&amp;gt; a Milinski (1993) &amp;lt;ref name=&amp;quot;Milinski&amp;quot; /&amp;gt;, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991) &amp;lt;ref name=&amp;quot;Mason&amp;quot; /&amp;gt;, kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002) &amp;lt;ref name=&amp;quot;Sabater&amp;quot; /&amp;gt;, kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední &amp;lt;ref name=&amp;quot;roth&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) &amp;lt;ref name=&amp;quot;kreps&amp;quot; /&amp;gt;. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt; zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1-5}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1-P} &amp;gt; 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2-10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gibbons&amp;quot;&amp;gt;Gibbons, R. (2006) &amp;quot;A Primer in Game Theory&amp;quot;, Financial Times, str. 82-114&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;slamova&amp;quot;&amp;gt;Skálová, A. (2007) &amp;quot;Opakované hry&amp;quot;, diplomová práce, obhájeno na Vysoké škole ekonomické v Praze&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osbornenew&amp;quot;&amp;gt;Osborne, M. J. (2004) &amp;quot;An Introduction to Game Theory&amp;quot;, Oxford University Press, str. 389-420&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;car&amp;quot;&amp;gt;Carmichael, F. (2005) &amp;quot;A Guide to Game Theory&amp;quot;, Financial Times, str. 197-234&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osborneold&amp;quot;&amp;gt;Osborne, M. J., Rubinstein, A. (1998) &amp;quot;A Course in Game Theory&amp;quot;, The MIT Press, páté vydání, str. 113-162&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;roth&amp;quot;&amp;gt;Roth, A. E., Murnigham, J. K. (1978) &amp;quot;Equilibrium behaviour and repeated play of the prisoners’ dilemma&amp;quot;, Journal of Mathematical Psychology, str. 189–98&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;kreps&amp;quot;&amp;gt;Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) &amp;quot;Rational cooperation in the finitely repeated prisoners’ dilemma&amp;quot;, Journal of Economic Theory, 27, pp. 245–52.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot;&amp;gt;Axelrod, R. (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 3–25.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot;&amp;gt; Axelrod, R. (1980b), &amp;quot;More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 379–403.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot;&amp;gt;Axelrod, R. (1984), &amp;quot;The evolution of cooperation&amp;quot;. New York: Basic Books.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Trivers&amp;quot;&amp;gt;Trivers, R. L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, str. 35–57.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Lazarus&amp;quot;&amp;gt;Lazarus, J., Metcalfe, N. B. (1990), &amp;quot;Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, str. 987–988.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Milinski&amp;quot;&amp;gt;Milinski, Manfred (1993), &amp;quot;Cooperation wins and stays”, Nature 364, str. 12–13.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Mason&amp;quot;&amp;gt;Mason, C. F., Phillips, O. R., Redington, D. B. (1991) &amp;quot;The role of gender in a non-cooperative game&amp;quot;, Journal of Economic Behaviour and Organisation, 15, str. 215–35.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Sabater&amp;quot;&amp;gt;Sabater-Grande, G., Georgantzis, N. (2002) &amp;quot;Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test&amp;quot;, Journal of Economic Behaviour and Organization, 48, str. 37–50.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1504</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1504"/>
		<updated>2012-06-20T21:56:50Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Řešení příkladu 2: Otevření trhu v nedohlednu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako [[Game theory/cs |teorie her]]. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti [[One-shot game/cs |her jednorázových (statických)]]. &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové [[Games/cs |hry]], při kterých je [[One-shot game/cs |jednorázová]] či vícekolová hra stejnými [[Player/cs |hráči]] řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných [[Strategy/cs |strategií]], které mohou nejen reagovat na tahy soupeře ([[Learning/cs |učení se]]), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou [[Utility/cs |výplatu (užitek)]]. V kapitole se budeme zabývat jevy jako jsou [[Cooperation in game theory/cs |kooperace]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplata]].&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování [[Real world/cs |reálného světa]] tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený [[Meta strategy/cs |plán hry]], který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají [[Meta strategy/cs |meta-strategie]]. Aby byla strategie [[Equilibrium strategy/cs |rovnovážná]], musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech [[Utility maximalization/cs |nemaximalizují svůj užitek]], tedy že jednají [[Irataional behavior/cs |iracionálně]]. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v [[Long-term horizon/cs |dlouhodobém horizontu]].&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry [[Infinite and indefinite games/cs |nekonečné]] a [[Finite games/cs |konečné]], přičemž konečně opakované hry dále dělíme na [[Indefinite/cs |konečné s neznámým koncem]] a [[Finite games/cs |konečné se známým koncem]] &amp;lt;ref name=&amp;quot;gibbons&amp;quot; /&amp;gt;. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s [[Probability/cs |pravděpodobností]], že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt; a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971 &amp;lt;ref name=&amp;quot;Trivers&amp;quot; /&amp;gt;. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) &amp;lt;ref name=&amp;quot;Lazarus&amp;quot; /&amp;gt; a Milinski (1993) &amp;lt;ref name=&amp;quot;Milinski&amp;quot; /&amp;gt;, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991) &amp;lt;ref name=&amp;quot;Mason&amp;quot; /&amp;gt;, kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002) &amp;lt;ref name=&amp;quot;Sabater&amp;quot; /&amp;gt;, kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední &amp;lt;ref name=&amp;quot;roth&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) &amp;lt;ref name=&amp;quot;kreps&amp;quot; /&amp;gt;. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt; zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1-5}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1-P} &amp;gt; 10 + \frac{2P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2-10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gibbons&amp;quot;&amp;gt;Gibbons, R. (2006) &amp;quot;A Primer in Game Theory&amp;quot;, Financial Times, str. 82-114&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;slamova&amp;quot;&amp;gt;Skálová, A. (2007) &amp;quot;Opakované hry&amp;quot;, diplomová práce, obhájeno na Vysoké škole ekonomické v Praze&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osbornenew&amp;quot;&amp;gt;Osborne, M. J. (2004) &amp;quot;An Introduction to Game Theory&amp;quot;, Oxford University Press, str. 389-420&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;car&amp;quot;&amp;gt;Carmichael, F. (2005) &amp;quot;A Guide to Game Theory&amp;quot;, Financial Times, str. 197-234&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osborneold&amp;quot;&amp;gt;Osborne, M. J., Rubinstein, A. (1998) &amp;quot;A Course in Game Theory&amp;quot;, The MIT Press, páté vydání, str. 113-162&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;roth&amp;quot;&amp;gt;Roth, A. E., Murnigham, J. K. (1978) &amp;quot;Equilibrium behaviour and repeated play of the prisoners’ dilemma&amp;quot;, Journal of Mathematical Psychology, str. 189–98&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;kreps&amp;quot;&amp;gt;Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) &amp;quot;Rational cooperation in the finitely repeated prisoners’ dilemma&amp;quot;, Journal of Economic Theory, 27, pp. 245–52.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot;&amp;gt;Axelrod, R. (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 3–25.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot;&amp;gt; Axelrod, R. (1980b), &amp;quot;More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 379–403.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot;&amp;gt;Axelrod, R. (1984), &amp;quot;The evolution of cooperation&amp;quot;. New York: Basic Books.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Trivers&amp;quot;&amp;gt;Trivers, R. L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, str. 35–57.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Dugatkin&amp;quot;&amp;gt;Dugatkin, L. A. (1991), &amp;quot;Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, str. 127–132.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Lazarus&amp;quot;&amp;gt;Lazarus, J., Metcalfe, N. B. (1990), &amp;quot;Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, str. 987–988.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Milinski&amp;quot;&amp;gt;Milinski, Manfred (1993), &amp;quot;Cooperation wins and stays”, Nature 364, str. 12–13.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Mason&amp;quot;&amp;gt;Mason, C. F., Phillips, O. R., Redington, D. B. (1991) &amp;quot;The role of gender in a non-cooperative game&amp;quot;, Journal of Economic Behaviour and Organisation, 15, str. 215–35.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Sabater&amp;quot;&amp;gt;Sabater-Grande, G., Georgantzis, N. (2002) &amp;quot;Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test&amp;quot;, Journal of Economic Behaviour and Organization, 48, str. 37–50.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1498</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1498"/>
		<updated>2012-06-20T21:53:11Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako [[Game theory/cs |teorie her]]. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti [[One-shot game/cs |her jednorázových (statických)]]. &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové [[Games/cs |hry]], při kterých je [[One-shot game/cs |jednorázová]] či vícekolová hra stejnými [[Player/cs |hráči]] řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných [[Strategy/cs |strategií]], které mohou nejen reagovat na tahy soupeře ([[Learning/cs |učení se]]), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou [[Utility/cs |výplatu (užitek)]]. V kapitole se budeme zabývat jevy jako jsou [[Cooperation in game theory/cs |kooperace]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplata]].&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování [[Real world/cs |reálného světa]] tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený [[Meta strategy/cs |plán hry]], který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají [[Meta strategy/cs |meta-strategie]]. Aby byla strategie [[Equilibrium strategy/cs |rovnovážná]], musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech [[Utility maximalization/cs |nemaximalizují svůj užitek]], tedy že jednají [[Irataional behavior/cs |iracionálně]]. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v [[Long-term horizon/cs |dlouhodobém horizontu]].&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry [[Infinite and indefinite games/cs |nekonečné]] a [[Finite games/cs |konečné]], přičemž konečně opakované hry dále dělíme na [[Indefinite/cs |konečné s neznámým koncem]] a [[Finite games/cs |konečné se známým koncem]] &amp;lt;ref name=&amp;quot;gibbons&amp;quot; /&amp;gt;. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s [[Probability/cs |pravděpodobností]], že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt; a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry &amp;lt;ref name=&amp;quot;car&amp;quot; /&amp;gt;. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot; /&amp;gt;&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971 &amp;lt;ref name=&amp;quot;Trivers&amp;quot; /&amp;gt;. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) &amp;lt;ref name=&amp;quot;Lazarus&amp;quot; /&amp;gt; a Milinski (1993) &amp;lt;ref name=&amp;quot;Milinski&amp;quot; /&amp;gt;, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991) &amp;lt;ref name=&amp;quot;Mason&amp;quot; /&amp;gt;, kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002) &amp;lt;ref name=&amp;quot;Sabater&amp;quot; /&amp;gt;, kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední &amp;lt;ref name=&amp;quot;roth&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” &amp;lt;ref name=&amp;quot;osbornenew&amp;quot; /&amp;gt;. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” &amp;lt;ref name=&amp;quot;slamova&amp;quot; /&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) &amp;lt;ref name=&amp;quot;kreps&amp;quot; /&amp;gt;. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” &amp;lt;ref name=&amp;quot;osborneold&amp;quot; /&amp;gt; zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1 – P} &amp;gt; 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2 – 10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
&amp;lt;references&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;gibbons&amp;quot;&amp;gt;Gibbons, R. (2006) &amp;quot;A Primer in Game Theory&amp;quot;, Financial Times, str. 82-114&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;slamova&amp;quot;&amp;gt;Skálová, A. (2007) &amp;quot;Opakované hry&amp;quot;, diplomová práce, obhájeno na Vysoké škole ekonomické v Praze&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osbornenew&amp;quot;&amp;gt;Osborne, M. J. (2004) &amp;quot;An Introduction to Game Theory&amp;quot;, Oxford University Press, str. 389-420&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;car&amp;quot;&amp;gt;Carmichael, F. (2005) &amp;quot;A Guide to Game Theory&amp;quot;, Financial Times, str. 197-234&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;osborneold&amp;quot;&amp;gt;Osborne, M. J., Rubinstein, A. (1998) &amp;quot;A Course in Game Theory&amp;quot;, The MIT Press, páté vydání, str. 113-162&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;roth&amp;quot;&amp;gt;Roth, A. E., Murnigham, J. K. (1978) &amp;quot;Equilibrium behaviour and repeated play of the prisoners’ dilemma&amp;quot;, Journal of Mathematical Psychology, str. 189–98&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;kreps&amp;quot;&amp;gt;Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) &amp;quot;Rational cooperation in the finitely repeated prisoners’ dilemma&amp;quot;, Journal of Economic Theory, 27, pp. 245–52.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980a&amp;quot;&amp;gt;Axelrod, R. (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 3–25.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1980b&amp;quot;&amp;gt; Axelrod, R. (1980b), &amp;quot;More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, str. 379–403.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Axelrod1984&amp;quot;&amp;gt;Axelrod, R. (1984), &amp;quot;The evolution of cooperation&amp;quot;. New York: Basic Books.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Trivers&amp;quot;&amp;gt;Trivers, R. L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, str. 35–57.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Dugatkin&amp;quot;&amp;gt;Dugatkin, L. A. (1991), &amp;quot;Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, str. 127–132.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Lazarus&amp;quot;&amp;gt;Lazarus, J., Metcalfe, N. B. (1990), &amp;quot;Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, str. 987–988.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Milinski&amp;quot;&amp;gt;Milinski, Manfred (1993), &amp;quot;Cooperation wins and stays”, Nature 364, str. 12–13.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Mason&amp;quot;&amp;gt;Mason, C. F., Phillips, O. R., Redington, D. B. (1991) &amp;quot;The role of gender in a non-cooperative game&amp;quot;, Journal of Economic Behaviour and Organisation, 15, str. 215–35.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;ref name=&amp;quot;Sabater&amp;quot;&amp;gt;Sabater-Grande, G., Georgantzis, N. (2002) &amp;quot;Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test&amp;quot;, Journal of Economic Behaviour and Organization, 48, str. 37–50.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/references&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1478</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1478"/>
		<updated>2012-06-20T21:14:43Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako [[Game theory/cs |teorie her]]. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti [[One-shot game/cs |her jednorázových (statických)]]. &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové [[Games/cs |hry]], při kterých je [[One-shot game/cs |jednorázová]] či vícekolová hra stejnými [[Player/cs |hráči]] řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných [[Strategy/cs |strategií]], které mohou nejen reagovat na tahy soupeře ([[Learning/cs |učení se]]), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou [[Utility/cs |výplatu (užitek)]]. V kapitole se budeme zabývat jevy jako jsou [[Cooperation in game theory/cs |kooperace]], [[Threats in game theory/cs |výhružky]] či [[Revenge in game theory/cs |odplata]].&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování [[Real world/cs |reálného světa]] tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený [[Meta strategy/cs |plán hry]], který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají [[Meta strategy/cs |meta-strategie]]. Aby byla strategie [[Equilibrium strategy/cs |rovnovážná]], musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech [[Utility maximalization/cs |nemaximalizují svůj užitek]], tedy že jednají [[Irataional behavior/cs |iracionálně]]. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v [[Long-term horizon/cs |dlouhodobém horizontu]].&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1 – P} &amp;gt; 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2 – 10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1474</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1474"/>
		<updated>2012-06-20T21:03:49Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Řešení příkladu 2: Otevření trhu v nedohlednu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1 – P} &amp;gt; 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2 – 10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1472</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1472"/>
		<updated>2012-06-20T21:02:20Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Řešení příkladu 2: Otevření trhu v nedohlednu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = \frac{5}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1 – P} &amp;gt; 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2 – 10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1471</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1471"/>
		<updated>2012-06-20T21:00:26Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + a\frac{1}{1-r} + a\frac{1}{(1-r)^2} + a\frac{1}{(1-r)^3} + a\frac{1}{(1-r)^4} + ... a\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aF + aF^2 + aF^3 + aF^4 + ... aF^N = \sum_{n=0}^{n = \infty} aF^n = \frac{a}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + d\frac{1}{1-r} + d\frac{1}{(1-r)^2} + d\frac{1}{(1-r)^3} + d\frac{1}{(1-r)^4} + ... d\frac{1}{(1-r)^N} ...&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Nahrazením \frac{1}{1-r} diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; poté získáme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = c + dF + dF^2 + dF^3 + dF^4 + ... dF^N = \sum_{n=0}^{n = \infty} dF^n = c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a}{1 - F} &amp;gt; c + \frac{dF}{1 - F} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Což můžeme zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{a - c}{d - c} &amp;lt; F &amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 5/(1 – P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 10 + 2P/(1 – P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5}{1 – P} &amp;gt; 10 + \frac{2P}{1 – P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{5-10}{2 – 10} &amp;lt; P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt; je tedy &amp;lt;math&amp;gt;\frac{5}{8}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1468</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1468"/>
		<updated>2012-06-20T20:47:58Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, tedy pravděpodobnost dalšího pokračování hry, vyšši než \frac{1}{3}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{3}{1-P} &amp;gt; 4 + \frac{1P}{1-P}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 &amp;gt; 4(1-P) + 1P&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;3 - 4 &amp;gt; P(1-4)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{1}{3} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že &amp;lt;math&amp;gt;c &amp;gt; a &amp;gt; d &amp;gt; b&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = a + aP + aP^2 + aP^3 + aP^4 + ... aP^n = \sum_{n=0}^{n = \infty} aP^n = \frac{a}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = c + dP + dP^2 + dP^3 + dP^4 + ... dP^n = c + \sum_{n=0}^{n = \infty} dP^n = c + \frac{dP}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\frac{a}{1-P} &amp;amp; &amp;gt; c + \frac{dP}{1-P} \\&lt;br /&gt;
\\&lt;br /&gt;
a &amp;amp; &amp;gt; c(1-P) + dP = c - cP + dP \\&lt;br /&gt;
\\&lt;br /&gt;
a - c &amp;amp; &amp;gt; P(d-c) \\&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A protože víme, že &amp;lt;math&amp;gt;a - c  &amp;lt; 0 &amp;lt;/math&amp;gt; a že &amp;lt;math&amp;gt;d - c &amp;lt; 0&amp;lt;/math&amp;gt;, můžeme rovnici zjednodušit na:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{a-c}{d-c} &amp;lt; P &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tato podmínka je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, u které platí, že je-li &amp;lt;math&amp;gt;P &amp;gt;\frac{a-c}{d-c} = P^*&amp;lt;/math&amp;gt;, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
 &lt;br /&gt;
Nahrazením 1/(1+r) diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; = 5/(1 – P)&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; = 10 + 2P/(1 – P)&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
5/(1 – P) &amp;gt; 10 + 2 P /(1 – P)&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
(5 – 10)/(2 – 10) &amp;lt; P&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než 5/8, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota P* je tedy 5/8.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1460</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1460"/>
		<updated>2012-06-20T20:15:54Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; znázorňuje volbu prvního hráče a druhé &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;P \in (0, 1)&amp;lt;/math&amp;gt;, která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je &amp;lt;math&amp;gt;P2&amp;lt;/math&amp;gt;, čtvrtým &amp;lt;math&amp;gt;P3&amp;lt;/math&amp;gt; atd. Petrova očekávaná výplata ze spolupráce (&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt;) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace} = 3 + 3P + 3P^2 + 3P^3 + 3P^4 + ... 3P^n = \sum_{n=0}^{n = \infty} 3P^n = \frac{3}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace} = 4 + P + P^2 + P^3 + P^4 + ... P^n = 4 + \sum_{n=0}^{n = \infty} P^n = 4 + \frac{P}{1 - P} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně P, tedy pravděpodobnost dalšího pokračování hry, vyšši než 1/3.&lt;br /&gt;
&lt;br /&gt;
[POSTUP VÝPOČTU 1/3]&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že c&amp;gt;a&amp;gt;d&amp;gt;b&lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále P. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; je tedy:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby &amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; bylo vyšší než &amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt;, tedy:&lt;br /&gt;
&lt;br /&gt;
 (8.6)&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu P, P*, u které platí, že je-li P&amp;gt;(a-c/d-c) = P*, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Podmínka (8.6) je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností P, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
 &lt;br /&gt;
Nahrazením 1/(1+r) diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; získáme:&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, P, s diskontním faktorem &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;F \in (0,1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; (či &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; a &amp;lt;math&amp;gt;P^*&amp;lt;/math&amp;gt;, kde&amp;lt;math&amp;gt;P&amp;gt;P^*&amp;lt;/math&amp;gt;, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{spoluprace}&amp;lt;/math&amp;gt; = 5/(1 – P)&lt;br /&gt;
&amp;lt;math&amp;gt;OV_{nespoluprace}&amp;lt;/math&amp;gt; = 10 + 2P/(1 – P)&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
5/(1 – P) &amp;gt; 10 + 2 P /(1 – P)&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
(5 – 10)/(2 – 10) &amp;lt; P&lt;br /&gt;
&lt;br /&gt;
Pokud tedy &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; dosahuje hodnoty vyšší než 5/8, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota P* je tedy 5/8.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1448</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1448"/>
		<updated>2012-06-20T19:29:38Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Plán */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první P znázorňuje volbu prvního hráče a druhé P druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost P, P NA INTERVALU (0,1), která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je P2, čtvrtým P3 atd. Petrova očekávaná výplata ze spolupráce (OVspolupráce) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
 =  &lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (OVnespolupráce) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně P, tedy pravděpodobnost dalšího pokračování hry, vyšši než 1/3.&lt;br /&gt;
&lt;br /&gt;
[POSTUP VÝPOČTU 1/3]&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že c&amp;gt;a&amp;gt;d&amp;gt;b&lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále P. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. OVspolupráce je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. OVnespolupráce je tedy:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby OVspolupráce bylo vyšší než OVnespolupráce, tedy:&lt;br /&gt;
&lt;br /&gt;
 (8.6)&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu P, P*, u které platí, že je-li P&amp;gt;(a-c/d-c) = P*, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota P dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Podmínka (8.6) je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností P, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
 &lt;br /&gt;
Nahrazením 1/(1+r) diskontním faktorem F získáme:&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, P, s diskontním faktorem F, F NA INTERVALU (0,1).&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy F dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je P (či F) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme P jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu P a P*, kde P&amp;gt;P*, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
OVspolupráce = 5/(1 – P)&lt;br /&gt;
OVnespolupráce = 10 + 2P/(1 – P)&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
5/(1 – P) &amp;gt; 10 + 2 P /(1 – P)&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
(5 – 10)/(2 – 10) &amp;lt; P&lt;br /&gt;
&lt;br /&gt;
Pokud tedy P dosahuje hodnoty vyšší než 5/8, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota P* je tedy 5/8.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1447</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1447"/>
		<updated>2012-06-20T19:29:06Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
Pay-off&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první P znázorňuje volbu prvního hráče a druhé P druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
*Vždy podvádět (Always Defect)&lt;br /&gt;
*Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
*Naivní Grim Trigger&lt;br /&gt;
*Grim Trigger&lt;br /&gt;
*Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
*Omezená odplata (Limited Retaliation)&lt;br /&gt;
*Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
*Jednou se odchýlit (Deviate Once)&lt;br /&gt;
*Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost P, P NA INTERVALU (0,1), která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je P2, čtvrtým P3 atd. Petrova očekávaná výplata ze spolupráce (OVspolupráce) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
 =  &lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (OVnespolupráce) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně P, tedy pravděpodobnost dalšího pokračování hry, vyšši než 1/3.&lt;br /&gt;
&lt;br /&gt;
[POSTUP VÝPOČTU 1/3]&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že c&amp;gt;a&amp;gt;d&amp;gt;b&lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále P. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. OVspolupráce je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. OVnespolupráce je tedy:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby OVspolupráce bylo vyšší než OVnespolupráce, tedy:&lt;br /&gt;
&lt;br /&gt;
 (8.6)&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu P, P*, u které platí, že je-li P&amp;gt;(a-c/d-c) = P*, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota P dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Podmínka (8.6) je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností P, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
 &lt;br /&gt;
Nahrazením 1/(1+r) diskontním faktorem F získáme:&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, P, s diskontním faktorem F, F NA INTERVALU (0,1).&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy F dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je P (či F) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme P jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu P a P*, kde P&amp;gt;P*, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
OVspolupráce = 5/(1 – P)&lt;br /&gt;
OVnespolupráce = 10 + 2P/(1 – P)&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
5/(1 – P) &amp;gt; 10 + 2 P /(1 – P)&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
(5 – 10)/(2 – 10) &amp;lt; P&lt;br /&gt;
&lt;br /&gt;
Pokud tedy P dosahuje hodnoty vyšší než 5/8, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota P* je tedy 5/8.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1443</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1443"/>
		<updated>2012-06-20T19:21:37Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Opakované hry}}&lt;br /&gt;
*'''typ práce:''' kapitola učebnice&lt;br /&gt;
*'''autor:''' Ladislav Dyntar&lt;br /&gt;
*'''předmět:''' 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
Pay-off&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Vězeň 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Vězeň 2&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první P znázorňuje volbu prvního hráče a druhé P druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
•	Vždy podvádět (Always Defect)&lt;br /&gt;
•	Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
•	Naivní Grim Trigger&lt;br /&gt;
•	Grim Trigger&lt;br /&gt;
•	Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
•	Omezená odplata (Limited Retaliation)&lt;br /&gt;
•	Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
•	Jednou se odchýlit (Deviate Once)&lt;br /&gt;
•	Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Petr&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||N||P&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Martin&lt;br /&gt;
|N||3, 3||0, 4&lt;br /&gt;
|-&lt;br /&gt;
|P||4, 0||1, 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost P, P NA INTERVALU (0,1), která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je P2, čtvrtým P3 atd. Petrova očekávaná výplata ze spolupráce (OVspolupráce) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
 =  &lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (OVnespolupráce) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně P, tedy pravděpodobnost dalšího pokračování hry, vyšši než 1/3.&lt;br /&gt;
&lt;br /&gt;
[POSTUP VÝPOČTU 1/3]&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 3''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Hráč 1&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||spolupracovat||nespolupracovat&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Hráč 2&lt;br /&gt;
|spolupracovat||a, a||b, c&lt;br /&gt;
|-&lt;br /&gt;
|nespolupracovat||c, b||d, d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
přičemž platí, že c&amp;gt;a&amp;gt;d&amp;gt;b&lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále P. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. OVspolupráce je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. OVnespolupráce je tedy:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby OVspolupráce bylo vyšší než OVnespolupráce, tedy:&lt;br /&gt;
&lt;br /&gt;
 (8.6)&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu P, P*, u které platí, že je-li P&amp;gt;(a-c/d-c) = P*, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota P dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Podmínka (8.6) je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností P, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
 &lt;br /&gt;
Nahrazením 1/(1+r) diskontním faktorem F získáme:&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, P, s diskontním faktorem F, F NA INTERVALU (0,1).&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy F dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je P (či F) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 4 - příklad 1''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Tabulka 5 - příklad 2''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| || ||colspan=&amp;quot;2&amp;quot;|Černý podnik&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| &lt;br /&gt;
| ||Nízké ceny||Vysoké ceny&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;; rowspan=&amp;quot;2&amp;quot; |Bílý podnik&lt;br /&gt;
|Nízké ceny||2, 2||10, 0&lt;br /&gt;
|-&lt;br /&gt;
|Vysoké ceny||0, 10||5, 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Mějme P jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu P a P*, kde P&amp;gt;P*, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
OVspolupráce = 5/(1 – P)&lt;br /&gt;
OVnespolupráce = 10 + 2P/(1 – P)&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
5/(1 – P) &amp;gt; 10 + 2 P /(1 – P)&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
(5 – 10)/(2 – 10) &amp;lt; P&lt;br /&gt;
&lt;br /&gt;
Pokud tedy P dosahuje hodnoty vyšší než 5/8, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota P* je tedy 5/8.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1440</id>
		<title>Repeated games/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Repeated_games/cs&amp;diff=1440"/>
		<updated>2012-06-20T18:59:38Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: první vložení předpřipraveného textu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Opakované hry&lt;br /&gt;
typ práce: kapitola učebnice&lt;br /&gt;
autor: Ladislav Dyntar&lt;br /&gt;
předmět: 4IT495 Simulace systémů&lt;br /&gt;
&lt;br /&gt;
Opakované hry jsou součástí mnohem širší problematiky nazývané jako teorie her. Nenechme se ovšem zmýlit - s hraním her mají jen pramálo společného. Pro pochopení opakovaných her je nezbytné osvojit si znalosti her jednorázových (statických). &lt;br /&gt;
&lt;br /&gt;
=Úvod=&lt;br /&gt;
Opakované hry jsou takové hry, při kterých je jednorázová či vícekolová hra stejnými hráči řešena opakovaně. Tito hráči mají přístup k výsledkům předcházejících her a mají možnost rozvrhnout si své tahy dopředu. Vzniká zde tedy široký prostor pro plánování všemožných strategií, které mohou nejen reagovat na tahy soupeře (učení se), ale hráč má zároveň možnost vytvářet strategie, kterými může svého soka přelstít a maximalizovat tak svou výplatu (užitek). V kapitole se budeme zabývat jevy jako jsou kooperace, výhružky či odplata.&lt;br /&gt;
&lt;br /&gt;
Opakované hry mají tedy mnohem blíže k fungování reálného světa tak, jak ho známe, kde spolu jednotlivé strany často soupeří více než jen jednou. Každá ze stran si je přitom vědoma vlivu svého rozhodnutí na chování svého protihráče.&lt;br /&gt;
&lt;br /&gt;
=Plán=&lt;br /&gt;
Každý hráč musí mít předem stanovený plán hry, který bude jasně definovat, jak se zachová v konkrétních situacích, jež mohou během hry nastat. Tyto strategie se nazývají meta-strategie. Aby byla strategie rovnovážná, musí být nejlepší odpovědí na všechny možné tahy ostatních hráčů ve hře.&lt;br /&gt;
&lt;br /&gt;
Pozorovateli takové hry by mohlo připadat, že hráči v opakované hře v jednotlivých kolech nemaximalizují svůj užitek, tedy že jednají iracionálně. To je důsledkem toho, že maximalizace vlastního užitku v jednom kole nutně nemusí vést k maximalizaci užitku v dlouhodobém horizontu.&lt;br /&gt;
&lt;br /&gt;
Pay-off&lt;br /&gt;
&lt;br /&gt;
=Základní dělení=&lt;br /&gt;
Opakované hry jsou dle délky trvání děleny na hry nekonečné a konečné, přičemž konečně opakované hry dále dělíme na konečné s neznámým koncem a konečné se známým koncem [1]. Pokud je hra opakována nekonečněkrát, hráči se domnívají, že konec hry nenastane a své strategie přizpůsobují této informaci. Pokud je však předem znám počet opakování hry, jedná se o hru konečnou se známým, předem stanoveným koncem. Takovéto hry se pak řeší pomocí zpětné indukce. Mezi těmito dvěma variantami pak leží konečně opakované hry s neznámým koncem, kde si jsou hráči vědomi toho, že hra je konečná, nemají však informaci o tom, kdy doopravdy skončí. Operují tak pouze s pravděpodobností, že hra bude mít ještě další kolo. Konečně opakované hry s neznámým koncem proto řadíme do kategorie nekonečných her.&lt;br /&gt;
&lt;br /&gt;
=Konečně opakované hry se známým koncem=&lt;br /&gt;
Aby byla hráčem zvolená strategie rovnovážnou strategií, musí být nejlepší možnou odpovědí na zvolené strategie druhého hráče v každém opakování hry. Každé jednotlivé opakování hry je přitom podhrou (subgame) celé hry, je tedy zřejmé, že budeme hledat Nashovo rovnovážné řešení podrhy (subgame perfect Nash equilibrium; SPNE) [2]. Protože posledním kolem konečně opakované hry je konkrétní podhra, je možné za cílem nalezení SPNE využít zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
Mnozí z vás se již jistě setkali s takzvaným vězňovo dilematem. Jen krátké přípomenutí: mějme dva od sebe oddělené vězně obviněné ze spáchání společného zločinu. Každý z nich má stejné možnosti volby strategií - přiznat se, tedy nekooperovat (P) a nepřiznat se, tedy kooperovat (N). Jednotlivé výplaty jsou znázorněny v matici níže (čím vyšší číslo, tím větší osobní užitek pro daného vězně).&lt;br /&gt;
&lt;br /&gt;
	Vězeň 1&lt;br /&gt;
Vězeň 2		N	P&lt;br /&gt;
	N	3,3	0,4&lt;br /&gt;
	P	4,0	1,1&lt;br /&gt;
&lt;br /&gt;
Jak už jistě víte, Nashovým rovnovážným řešením statického jednokolového vězňova dilematu je {P,P} (pokud vám není jasné, jak jsme na toto přišli, doporučuji vrátit se zpět k problematice Nashovi rovnováhy). V konečně opakované verzi této hry nás zpětná indukce zavede ke stejnému výsledku, tedy  že strategie {P,P} bude strategií obou hráčů ve všech kolech konečně opakované hry. Toto na první pohled nelogické řešení je často nazýváno paradoxem zpětné indukce.&lt;br /&gt;
&lt;br /&gt;
==Důkaz zpětné indukce==&lt;br /&gt;
Ve statické verzi vězňova dilematu je strategie {P,P} (ve skutečnosti se jedná o vektor strategií jednotlivých hráčů, kde první P znázorňuje volbu prvního hráče a druhé P druhého hráče, pro snažší pochopení budeme vektor takovýchto strategií nazývat souhrně &amp;quot;strategií [hry]&amp;quot;) dominantní strategií, kooperace není Nashovým rovnovážným řešením (NE). U konečně opakovaných her můžeme k vyřešení vězňova dilematu použít zpětné indukce. Ta se nejprve pokusí určit, jak se hráči zachovájí v posledním kole a následně postupuje vždy o jeden krok zpět až na úplný začátek hry.&lt;br /&gt;
&lt;br /&gt;
Předpokládejme, že hra má 10 opakování. Při aplikaci zpětné indukce se tedy nejprve přeneseme do desáté hry, která pro oba hráče vypadá jako hra statická. Proč? Protože oba vědí, že další hra nebude už následovat, tím pádem není možné potrestat druhého hráče za to, že nebude kooperovat. Jejich cílem je tedy nalézt NE a to zahrát, zvolí tedy {P,P}. V předposlední fázi hry, tedy v devátém kole, oba hráči vědí, že v posledním desátém kole zahrají {P,P} a proto nemají důvod ani nyní kooperovat, tedy zahrát {N,N}. Budou tedy opět volit strategii {P,P}. To samé platí i pro osmé kolo, kdy oba hráči ze stejných důvodů opět zahrají {P,P}. Tento proces se opakuje až do prvního kola, kdy hráči vědí, že všechna následující kola zahrají {P,P} a budou tedy i v prvním kole volit strategii {P,P}. SPNE všech kol opakované hry je tedy přiznání obou hráčů k trestnému činu. &lt;br /&gt;
&lt;br /&gt;
==Výplata konečně opakovaných her==&lt;br /&gt;
Výplata pro hry s konečným opakováním je vypočítána jako součet všech dosažených výplat v jednotlivých kolech. V případě desetikolového vězňova dilematu z matice výše by celková výplata obou hráču byla 10  krát 1, tedy 10.&lt;br /&gt;
&lt;br /&gt;
==Konečně opakované hry se známým koncem - řešený příklad==&lt;br /&gt;
xyxyxy&lt;br /&gt;
&lt;br /&gt;
=Nekonečně opakované hry a konečně opakované hry s neznámým koncem=&lt;br /&gt;
Paradox zpětné indukce lze eliminovat zavedením nejistoty ohledně užitku některého z hráču, jeho racionality nebo ohledně samotného konce opakované hry. Teorii budeme ilustrovat právě na případu posledně zmíněného, tedy nejasného konce hry.&lt;br /&gt;
&lt;br /&gt;
Tento stav předpokládá, že ani jeden z hráčů přesně neví, kdy hra skončí (ačkoliv se její konec očekává) nebo věří, že hra neskončí nikdy. Tento výchozí stav vede k tomu, že kooperace, tedy vektor strategií {N,N} se najednou stává rovnovážným řešením obou hráčů. Jak už asi správně hádáte, nebude to tak jednoduché jak se na první pohled zdá. Problém nyní nastává s tím, že neexistuje pouze jediné rovnovážné řešení, ale rovnovážných řešení je více. Tento jev je nazýván jako &amp;quot;folk theorem&amp;quot; [5].&lt;br /&gt;
&lt;br /&gt;
&amp;quot;První tzv. „folk teorém“ tvrdí, že jakýkoliv dosažitelný individuálně racionální výplatní vektor může být Nashovou rovnováhou opakované hry. Druhý „folk teorém“ říká, že dosažitelný výplatní vektor, který Paretovsky dominuje jakýkoliv výplatní vektor statické rovnováhy jednorázové hry, může být SPE opakované hry.&amp;quot; [2]&lt;br /&gt;
Jelikož pro určení rovnovážného řešení hry nyní nemůžeme využít zpětné indukce, hráči se nyní místo dozadu dívají dopředu a pro každou možnou strategii určují její celkovou výplatu. Díky tomu je do jednotlivých strategií hráčů nyní možné zakomponovat i takové prvky jako jsou odměny, výhružky či odplaty.&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
Podívejme se opět na matici Vězňova dilematu z předešlé sekce. I u takto jednoduchého problému je v případě her specifikovaných v této kapitole možné volit z téměř nekonečného množství možných meta-strategií. Ty nejznámější si nyní vyjmenujeme [2] a několik vybraných později i podrobněji popíšeme:&lt;br /&gt;
•	Vždy podvádět (Always Defect)&lt;br /&gt;
•	Vždy spolupracovat (Always Cooperate)&lt;br /&gt;
•	Naivní Grim Trigger&lt;br /&gt;
•	Grim Trigger&lt;br /&gt;
•	Oko za ok, zub za zub (Tit for Tat)&lt;br /&gt;
•	Omezená odplata (Limited Retaliation)&lt;br /&gt;
•	Strategie Win-Stay, Lose-Shift (WS-LS)&lt;br /&gt;
•	Jednou se odchýlit (Deviate Once)&lt;br /&gt;
•	Grim Deviate Once&lt;br /&gt;
&lt;br /&gt;
==Představení konečně opakované hry s neznámým koncem pomocí příkladu==&lt;br /&gt;
Mějme dva vězně - Petra a Martina - kteří jsou oba zastánci Grim Trigger strategie a jsou postaveni před opakovanou hru vězňova dilematu. Grim Trigger strategie je taková strategie, kdy hráč v prvním kole kooperuje a pokračuje v kooperaci až do té doby, dokud všichni hráči v předešlém kole kooperovali. Jakmile některý z hráčů přestane kooperovat, ten druhý automaticky také přestane kooperovat a takto pokračují dále bez jakékoliv další změny. Nyní je tedy i jasné, proč se tato strategie nazývá nepromíjející strategií - přísně trestá jakýkoliv prohřešek druhého hráče.&lt;br /&gt;
&lt;br /&gt;
Nyní se skrze analýzu výplat obou hráčů pokusíme odpovědět na otázku, zda Grim Trigger strategie skutečně vede ke vzájemné spolupráci.&lt;br /&gt;
&lt;br /&gt;
	Petr&lt;br /&gt;
Martin		N	P&lt;br /&gt;
	N	3, 3	0, 4&lt;br /&gt;
	P	4, 0	1, 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nejprve se na hru podíváme z pohledu Petra. Jaká by měla být jeho volba, pokud věří, že Martin dodržuje strategii Grim Trigger? Pokud bude kooperovat, jeho očekávaná výplata bude 3 a další 3 získá za každé další odehrané kolo. Nyní mějme fixní pravděpodobnost P, P NA INTERVALU (0,1), která nám říká, s jakou pravděpodobností hra bude pokračovat i druhým kolem. Poté pravděpodobnost, že hra bude pokračovat třetím je P2, čtvrtým P3 atd. Petrova očekávaná výplata ze spolupráce (OVspolupráce) s Martinem je tedy:&lt;br /&gt;
&lt;br /&gt;
 =  &lt;br /&gt;
&lt;br /&gt;
Pokud však Petr odmítne spolupracovat a vědomě (či vinou chyby) poruší kooperaci, získá jednorázovou výplatu v hodnotě 4 a poté již samé 1. Petrova očekávaná výplata z porušení splupráce (OVnespolupráce) s Martinem hned po prvním kole je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Z výše uvedeného jasně vyplývá, že má-li se Petr držet spolupráce, musí pro něj být výhodnější než její porušení. V našem případě musí být konkrétně P, tedy pravděpodobnost dalšího pokračování hry, vyšši než 1/3.&lt;br /&gt;
&lt;br /&gt;
[POSTUP VÝPOČTU 1/3]&lt;br /&gt;
&lt;br /&gt;
Abychom byli schopni toto aplikovat na jakýkoliv příklad, vytvořili jsme následující obecnou matici:&lt;br /&gt;
	Hráč 1&lt;br /&gt;
Hráč 2		spolupracovat	nespolupracovat&lt;br /&gt;
	spolupracovat	a, a	b, c&lt;br /&gt;
	nespolupracovat	c, b	d, d&lt;br /&gt;
přičemž platí, že c&amp;gt;a&amp;gt;d&amp;gt;b&lt;br /&gt;
&lt;br /&gt;
Pravděpodobnost, že hra bude pokračovat i dalším kolem je stále P. Oba hráči se i nadále drží strategie Grim trigger. Pokud oba hráči kooperují, mohou až do konce hry očekávat výplatu v podobě &amp;quot;a&amp;quot;. OVspolupráce je tedy:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pokud kdokoliv z hráčů přestane spolupracovat, získá jednorázový zisk ve výši &amp;quot;c&amp;quot; a dále už jen &amp;quot;d&amp;quot;. OVnespolupráce je tedy:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Jestliže mají oba hráči spolupracovat, je nutné, aby OVspolupráce bylo vyšší než OVnespolupráce, tedy:&lt;br /&gt;
&lt;br /&gt;
 (8.6)&lt;br /&gt;
&lt;br /&gt;
Nyní můžeme stanovit hraniční hodnotu P, P*, u které platí, že je-li P&amp;gt;(a-c/d-c) = P*, nemá ani jeden z hráčů potřebu odchýlit se od spolupráce a ke spolupráci tak dojde ve všech opakováních hry [4]. Můžeme tedy říci, že pokud je hodnota P dostatečně vysoká, existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Podmínka (8.6) je platná pro všechny hry vězňova dilematu. [4]&lt;br /&gt;
&lt;br /&gt;
==Nekonečně opakované hry==&lt;br /&gt;
V případě nekonečně opakovaných her je jasné, že, jak už z názvu vyplývá, není možné počítat s pravděpodobností P, která nám v sekci výše určovala pravděpodobnost, že se hra dostane do dalšího kola. Hráči totiž vždy věří, že hra bude pokračovat.&lt;br /&gt;
&lt;br /&gt;
Aby však mohli plánovat své budoucí výplaty, musí začít uvažovat diskontovanou současnou hodnotu budoucích výplat. Současná hodnota budoucí výplaty &amp;quot;X&amp;quot; získané za &amp;quot;n&amp;quot; období se spočítá jako jako X/(1+r)n, přičemž &amp;quot;r&amp;quot; označuje úrokovou míru a 1/(1+r) je diskontní faktor. Každý si nyní jistě vzpomíná na hodiny ekonomie, kde nám bylo do hlavy vtloukáno, že hodnota peněz získaných nyní je vyšší než hodnota toho samého objemu peněz získaných v budoucnu. A nyní toto pravidlo aplikujeme i u teorie her.&lt;br /&gt;
&lt;br /&gt;
Očekávaný výnos ze spolupráce vypočítáme jako:&lt;br /&gt;
 &lt;br /&gt;
Nahrazením 1/(1+r) diskontním faktorem F získáme:&lt;br /&gt;
 &lt;br /&gt;
Při porušení spolupráce získáváme obdobné:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Je tedy zřejmé, že jediný rozdíl mezi nekonečně opakovanými hrami a hrami s konečným opakováním s neznámým koncem je záměna pravděpodobnosti dalšího pokračování hry, P, s diskontním faktorem F, F NA INTERVALU (0,1).&lt;br /&gt;
&lt;br /&gt;
O tom, zda pokračovat ve spolupráci nebo se od ní odchýlit pak tedy opět rozhoduje výsledná výplata obou možnosti, nebo-li:&lt;br /&gt;
 &lt;br /&gt;
Pokud je tedy F dostatečně vysoké (budoucí hodnota peněz se nule blíží jen velice pomalu), mají oba hráči zájem na tom spolupracovat. Můžeme tedy opět říci, že v takovém případě existuje ve vězňově dilematu takové SPNE, které vede u Grim Trigger strategie ke spolupráci.&lt;br /&gt;
&lt;br /&gt;
Z  výše zmíněného vyplývá, že &amp;quot;spolupracovat&amp;quot; je nejlepší odpovědí na strategii &amp;quot;spolupracovat&amp;quot; druhé hráče. Jak je to však s výhružkou Grim trigger strategie, která říká, že jakmile druhý hráč přestane kooperovat, bude ukončena kooperace i ze strany prvního hráče? Je strategie &amp;quot;nespolupracovat&amp;quot; nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;? Pokud by tato hrozba nebyla kredibilní, nemohla by Grim trigger strategie vůbec být SPNE.&lt;br /&gt;
&lt;br /&gt;
Pokud je P (či F) vyšší než požadovaná kritická hodnota, je strategie &amp;quot;nespolupracovat&amp;quot; opravdu nejlepší odpovědí na strategii &amp;quot;nespolupracovat&amp;quot;. Ve statických hrách se totiž jedná o Nashovu rovnováhu a u her s nekonečným opakováním (případně u her s konečným opakováním a neznámým koncem) není možné, aby se hráč dodržující Grim trigger strategy záměrně odchýlil od spolupráce, aniž by se jednalo o reakci na předchozí akci (odchýlení od kooperace) jeho protihráče.&lt;br /&gt;
&lt;br /&gt;
Vezmě si výše zmíněný příklad z pohledu Martina. Pokud se Petr bezdůvodně odchýlil od spolupráce, nenásleduje Grim trigger strategii. Martin nemůže očekávat, že Petr bude v dalších kolech opět spolupracovat. Následuje tedy svou vlastní Grim trigger strategii a potrestá Petra trvalým přerušením spolupráce. Pokud by snad Petr udělal chybu, hned v dalším kole se vrátil zpět ke spolupráci a Martin mu tuto chybu odpustil, Petr by zjistil, že Martin nehraje Grim trigger strategii a nic by mu nebránilo v dalším kole opět přerušit spolupráci. Nebo také z jiného pohledu - protože Martin nehraje Grim trigget strategii (Petra nepotrestal), nemůže si Petr být jistý, že Martin v dalším kole sám nepřeruší spolupráci a tak raději rovnou spolupráci v dalším kole opět přeruší.&lt;br /&gt;
&lt;br /&gt;
Jak už bylo napsáno na začátku této kapitoly, Grim trigger strategie není jedinou meta-strategií, která při řešení vězňova dilematu vede ke vzájemné kooperaci obou hráčů v rámci nekonečně nebo konečně opakovaných her s neznámým koncem. Kooperace může být dosaženo například aplikováním strategie Oko za oko, zub za zub, která nespolupráci trestá nespoluprácí a ke spolupráci se vrací až v moment, kdy se ke spolupráci opět vrátí i trestaný hráč. Podobných kombinací však existuje nespočet [5].&lt;br /&gt;
&lt;br /&gt;
=Závěr a odkazy na výzkumy týkající se aplikací teorie her v reálném světě=&lt;br /&gt;
Z Folk theorému vyplývá, že nekonečně a konečně opakované hry s neznámým koncem mají více rovnovážných řešení a je tedy téměř nemožné určit, k jakým výsledkům takové hry povedou. Jak jsme však ukázali v této kapitole, dá se předpokládat, že u takových her bude alespoň v jejich části dosaženo vzájemné spolupráce. Uvažováním nejistoty ohledně konce opakované hry jsme změnili vhodné strategie a z nich plynoucí výplaty. Hračí u takovýchto her mají větší vůli kooperovat, protože nekooperace již není jedinečným subgame rovnovážným řešením.&lt;br /&gt;
&lt;br /&gt;
Shrnutí významných prací zabývajících se aplikací teorie opakovaných her v reálném světě představuje Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Z první části jeho shrnutí vyplává, že mnoho simulací vyhrála strategie “Oko za oko, zub za zub” (Tit-for-tat). Konkrétní zprávy je možné přečíst v:&lt;br /&gt;
Axelrod, Robert (1980a), “Effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 3–25.&lt;br /&gt;
 Axelrod, Robert (1980b), “More effective choice in the Prisoner’s Dilemma”, Journal of Conflict Resolution 24, 379–403.&lt;br /&gt;
Axelrod, Robert (1984), The evolution of cooperation. New York: Basic Books.&lt;br /&gt;
S teorií, že zvířata opakovaně čelí problémům svou strukturou podobným vězňově dilematu přišel Robert L. Trivers v roce 1971. Při pokusu provedeným s rybami (konkrétně koljuškami), pozoroval, že ty také využívají strategie Tit-for-tat. Výsledky této studie se později pokouší vyvrátit Lazarus a Metcalfe (1990) a Milinski (1993, který tvrdí, že koljušky nenásledují strategii “Oko za oko, zub za zub”, nýbrž strategii zvanou “Pavlov”.&lt;br /&gt;
Trivers, Robert L. (1971), “The evolution of reciprocal altruism”, Quarterly Reviewof Biology 46, 35–57.&lt;br /&gt;
Dugatkin, Lee Alan (1991), “Dynamics of the tit for tat strategy during predator inspection in the guppy (Poecilia reticulata)”, Behavioral Ecology and Sociobiology 29, 127–132.&lt;br /&gt;
Lazarus, John, and Neil B. Metcalfe (1990), “Tit-for-tat cooperation in sticklebacks: a critique of Milinski”, Animal Behaviour 39, 987–988.&lt;br /&gt;
Milinski, Manfred (1993), “Cooperation wins and stays”, Nature 364, 12–13.&lt;br /&gt;
Z novějších studií jmenujme např. Mason, Phillips a Redington (1991), kteří zjišťovali, zda mají ženy větší tendenci ke kooperaci než muži; či Sabater, Grande a Georgantiziz (2002), kteří se věnovali vlivu averze k riziku na pravděpodobnost, že daný subjekt bude kooperovat.&lt;br /&gt;
Všechny studie mají však jeden velký nedostatek – jsou prováděny v umělém prostředí a pozorované subjekty vědí, že nastane konec simulace (a tedy i simulované hry). A to platí i v případech, kdy subjekty nevěděly, kdy přesně daný konec nastane. To vedlo subjekty k tomu, že předpokládaly, že každá hra je tou poslední [6].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mason, C. F., Phillips, O. R. and Redington, D. B. (1991) ‘The role of gender in a non-cooperative game’, Journal of Economic Behaviour and Organisation, 15, pp. 215–35.&lt;br /&gt;
Sabater-Grande, G. and Georgantzis, N. (2002) ‘Accounting for risk aversion in repeated prisoners’ dilemma games: An experimental test’, Journal of Economic Behaviour and Organization, 48, pp. 37–50.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Další studium=&lt;br /&gt;
==Podrobný rozbor jednotlivých strategií==&lt;br /&gt;
Podrobný rozbor vybraných strategií vyjmenovaných v sekci Strategie provedl Martin J. Osborne ve své knize “An introduction to Game Theory” [3]. Konkrétně se jedná o: “Grim trigger strategies”, “Limited punishment”a “Tit-for-tat”. Zbylé strategie pak méně podrobně rozebírá Alena Skálová ve své diplomové práci na téma “Opakované hry” [2].&lt;br /&gt;
&lt;br /&gt;
==Asymetrické informace při řešení vězňova dilematu u her s konečným opakováním==&lt;br /&gt;
Další řešení zpětné indukce přinesli Kreps, Milgrom, Roberts a Wilson (1982) [7]. Ve své práci provedli analýzu vězňova dilematu s konečným opakováním, avšak s tou změnou, že racionalita a/nebo užitek jednoho z hráčů nebyly známé pro toho druhého. To dává za vznik mnoha zajímavým strategiím, kdy se jeden hráč snaží toho druhého přelstít.&lt;br /&gt;
&lt;br /&gt;
==Komplexita rovnovážných strategií==&lt;br /&gt;
Martin J. Osborne se ve své knize “A Course in Game Theory” [5] zaobírá komplexitou rovnovážných řešení. Rozšiřuje tak skupinu výsledků prezentovaných v rámci Folk theorem. Vychází z toho, že čím složitější je zvolená strategie, tím více je pro hráče nákladná. Požadavkem každého hráče by tak měla být co nejjednodušší strategie.&lt;br /&gt;
&lt;br /&gt;
==Obrácená implementace==&lt;br /&gt;
Ve té samé knize Martin J. Osborne podrobně rozebírá i obrácený postup řešení opakované hry. V první fázi je definován požadovaný soubor výstupů a až poté se hledá hra, která tyto výsledky produkuje.&lt;br /&gt;
&lt;br /&gt;
==Vícekolové hry==&lt;br /&gt;
S teorií opakovaných her úzce souvisí i vícekolové hry. Představme si třeba známý příklad dvou obchodních řetězců, kde jeden má již na trhu stabilní pozici a druhý teprve uvažuje o vstupu na trh. Pokud by takové rozhodování probíhalo např. v rámci několika měst, jednalo by se o opakovanou hru. Více o této problematice je možné nastudovat na stránce Vícekolové hry.&lt;br /&gt;
&lt;br /&gt;
=Příklady k procvičení=&lt;br /&gt;
==Příklad 1: Kartel==&lt;br /&gt;
Na trhu existují pouze dva podniky daného tipu. Vědí, že jim zbývají jen 4 dny do doby, než se trh otevře zbylým konkurenčním podnikům. Své ceny mohou stanovit vždy pouze ráno a ceny poté drží celý den. Rozhodnutí o změně cen tedy provedou ještě celkem čtyřikrát. Mohou nastavit dvě úrovně cen: vysoké a nízké.&lt;br /&gt;
&lt;br /&gt;
Jakou strategii podniky zvolí, když matice jejich výplat vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
	Černý podnik&lt;br /&gt;
Bílý podnik		Nízké ceny	Vysoké ceny&lt;br /&gt;
	Nízké ceny	2, 2	10, 0&lt;br /&gt;
	Vysoké ceny	0, 10	5, 5&lt;br /&gt;
&lt;br /&gt;
==Příklad 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Uvažujme totožnou situaci jako v příkladu 1, pouze s tím rozdílem, že podniky neví, kdy k otevření trhu dojde (pouze předpokládají, že k němu dojde). Výplatní matice vypadá následovně (čím vyšší hodnota, tím vyšší výplata pro daný podnik):&lt;br /&gt;
&lt;br /&gt;
	Černý podnik&lt;br /&gt;
Bílý podnik		Nízké ceny	Vysoké ceny&lt;br /&gt;
	Nízké ceny	2, 2	10, 0&lt;br /&gt;
	Vysoké ceny	0, 10	5, 5&lt;br /&gt;
&lt;br /&gt;
Mějme P jako pravděpodobnost, že trh se otevře i následující den. Oba podniky jsou vyznavači Grim trigger strategií. Určete hodnotu P a P*, kde P&amp;gt;P*, která povede ke kooperaci obou podniků.&lt;br /&gt;
&lt;br /&gt;
=Řešení příkladů k procvičení=&lt;br /&gt;
== Řešení příkladu 1: Kartel ==&lt;br /&gt;
Pro řešení tohoto příkladu využijeme zpětné indukce. V poslední, čtvrtý den je oboum podnikům jasné, že již k dalšímu opakování hry nedojde a druhý podnik je tedy nemůže potrestat za nespolupráci. Nashovo rovnovážné řešení tedy bude {nízké ceny, nízké ceny}. Třetí den si jsou oba podniky vědomi toho, že poslední den zvolí {nízké ceny, nízké ceny}, trest pro ně tedy není hrozbou a proto opět zvolí NE {nízké ceny, nízké ceny}. Druhý den se opakuje to samé co den třetí. Oba podniky vědí, že další den zvolí strategii nizkých cen, a proto zvolí i druhý den tu samou strategii. Stejně tak první den, kdy oba podniky volí NE {nízké ceny, nízké ceny}.&lt;br /&gt;
&lt;br /&gt;
== Řešení příkladu 2: Otevření trhu v nedohlednu==&lt;br /&gt;
Dosazením hodnot z matice do vzorečku z kapitoly Nekonečně opakované hry získáme:&lt;br /&gt;
EPOcollusion = 5/(1 – P)&lt;br /&gt;
EPOcheat = 10 + 2P/(1 – P)&lt;br /&gt;
&lt;br /&gt;
Oba podniky by tedy měly spolupracovat vždy, když dojde ke splnění podmínky:&lt;br /&gt;
5/(1 – P) &amp;gt; 10 + 2 P /(1 – P)&lt;br /&gt;
&lt;br /&gt;
neboli&lt;br /&gt;
(5 – 10)/(2 – 10) &amp;lt; P&lt;br /&gt;
&lt;br /&gt;
Pokud tedy P dosahuje hodnoty vyšší než 5/8, je pro dva podniky dodržující Grim trigger strategii racionálním řešením spolupracovat. Kritická hodnota P* je tedy 5/8.&lt;br /&gt;
&lt;br /&gt;
=Zdroje=&lt;br /&gt;
[1] = [Gibbons]&lt;br /&gt;
[2] = Slámová diplomka&lt;br /&gt;
[3] = Osborne new&lt;br /&gt;
[4] = A guide...&lt;br /&gt;
[5] = Osborne – old&lt;br /&gt;
[6] = Roth and Murnighan (1978)&lt;br /&gt;
[7] = Kreps, D. M., Milgrom, P., Roberts, J. and Wilson, R. (1982) ‘Rational cooperation in the finitely repeated prisoners’ dilemma’, Journal of Economic Theory, 27, pp. 245–52.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=1000</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=1000"/>
		<updated>2012-06-12T21:14:11Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' NetLogo 5&amp;lt;ref&amp;gt;Oficiální stránky projektu NetLogo http://ccl.northwestern.edu/netlogo/&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu [[NetLogo/cs | NetLogo]] verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na [[Prohledávání stavového prostoru/cs |prohledávání stavového prostoru]]. Tuto [[NP-complete/cs | NP-úplnou]] [[Optimalizační úloha/cs |optimalizační ulohu]] mnoho lidí zná spíše pod pojmem [[Problém Obchodního Cestujícího/cs |Problém Obchodního Cestujícího]] (Traveling Salesman Problem - TSP)&amp;lt;ref&amp;gt;T. H. Cormen, C. E. Leiserson, R. L. Rivest, a C. Stein, Introduction to Algorithms. The MIT Press, 2. vydání, 2001.&amp;lt;/ref&amp;gt;. Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v [[Polynomiální čas/cs | polynomiálním čase]].&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Popis grafického rozhraní modelu==&lt;br /&gt;
*'''Tlačítko &amp;quot;setup&amp;quot;''': provede inicializaci modelu.&lt;br /&gt;
*'''Tlačítko &amp;quot;go&amp;quot;''': spustí simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-spravne&amp;quot;''': zobrazuje počet správně posekaných dlaždic, tedy dlaždic s barvou &amp;quot;''green+1''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-lehce zniceno&amp;quot;''': zobrazuje počet lehce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+2''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-stredne zniceno&amp;quot;''': zobrazuje počet středně zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+3''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-tezce zniceno&amp;quot;''': zobrazuje počet tězce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+4''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-totalne zniceno&amp;quot;''': zobrazuje počet zcela zničených dlaždic, tedy dlaždic s barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;musime posekat&amp;quot;''': zobrazuje počet dlaždic na startu simulace.&lt;br /&gt;
*'''Monitor &amp;quot;spotreba&amp;quot;''': zobrazuje spotřebu sekaček provádějících simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;neposekano&amp;quot;''': zobrazuje počet dlaždic, které ještě musíme posekat.&lt;br /&gt;
*'''Plot &amp;quot;Posekano v case&amp;quot;''': představuje grafický vývoj jednotlivých monitorovaných proměnných v čase vzhledem k aktuální simulaci.&lt;br /&gt;
*'''Input &amp;quot;pocet-sekacek-in&amp;quot;''': zde je možné určit počet sekaček, které budou provádět pohyb po prostoru dle zvoleného algoritmu.&lt;br /&gt;
*'''Input &amp;quot;pocet-lidi-in&amp;quot;''': zde je možné určit počet lidí, kteří budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Input &amp;quot;pocet-zvirat-in&amp;quot;''': zde je možné určit počet zvířat, které budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Slider &amp;quot;pocet-stromu-slider&amp;quot;''': určuje, kolik stromů se na mapě zobrazí.&lt;br /&gt;
*'''Chooser &amp;quot;start-sekacek&amp;quot;''': zde je možné zvolit, v jaké pozici se sekačky na startu simulace objeví.&lt;br /&gt;
*'''Chooser &amp;quot;algoritmus&amp;quot;''': zde se provádí volba algoritmu, který budou sekačky využívat po pohyb po prostoru.&lt;br /&gt;
*'''Chooser &amp;quot;zpusob-volby-algoritmu&amp;quot;''': určuje, zda všechny sekačky budou následovat stejný algoritmus nebo zda bude každé sekačce zvolen algoritmus náhodně ze seznamu všech algoritmů.&lt;br /&gt;
*'''Input &amp;quot;zmena-polomeru-rozdeleni&amp;quot;''': číselný vstup ovlivňující chování kruhových algoritmů.&lt;br /&gt;
*'''Slider &amp;quot;uhel-otoceni X degrees&amp;quot;''': číselný posuvník (ve stupních) ovlivňující chování vybraných algoritmů (konkrétně: &amp;quot;[[#Algoritmus 1: uhel-otoceni |uhel-otoceni]]&amp;quot;, &amp;quot;[[#Algoritmus 2: random-uhel-otoceni |random-uhel-otoceni]]&amp;quot;, &amp;quot;[[#Algoritmus 4: kruh |kruh]]&amp;quot;, &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |kruh-random-dojezd]]&amp;quot;).&lt;br /&gt;
*'''Input &amp;quot;viditelnost-sekacky&amp;quot;''': vstup ovlivňující chování algoritmu &amp;quot;search&amp;quot;, na základě této hodnoty se určuje, jak daleko kolem sebe se sekačka poohlíží po neposekané části trávy.&lt;br /&gt;
*'''Monitor &amp;quot;celkem-zniceni&amp;quot;''': zobrazuje celkový počet poškozených dlaždic.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme dále. Dvě tabulky níže shrnují průměrné výsledky prvních 4 algoritmů, a to jak pro variantu A, tak B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:XDYNL00-VYZKUMNA-ZPRAVA.pdf&amp;diff=980</id>
		<title>File:XDYNL00-VYZKUMNA-ZPRAVA.pdf</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:XDYNL00-VYZKUMNA-ZPRAVA.pdf&amp;diff=980"/>
		<updated>2012-06-12T20:55:19Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: uploaded a new version of &amp;amp;quot;File:XDYNL00-VYZKUMNA-ZPRAVA.pdf&amp;amp;quot;: drobnosti, grafika&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PDF varianta výzkumné zprávy. Vytvořil: Ladislav Dyntar na téma Automatická sekačka&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=933</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=933"/>
		<updated>2012-06-12T19:46:10Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Výsledky */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Popis grafického rozhraní modelu==&lt;br /&gt;
*'''Tlačítko &amp;quot;setup&amp;quot;''': provede inicializaci modelu.&lt;br /&gt;
*'''Tlačítko &amp;quot;go&amp;quot;''': spustí simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-spravne&amp;quot;''': zobrazuje počet správně posekaných dlaždic, tedy dlaždic s barvou &amp;quot;''green+1''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-lehce zniceno&amp;quot;''': zobrazuje počet lehce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+2''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-stredne zniceno&amp;quot;''': zobrazuje počet středně zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+3''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-tezce zniceno&amp;quot;''': zobrazuje počet tězce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+4''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-totalne zniceno&amp;quot;''': zobrazuje počet zcela zničených dlaždic, tedy dlaždic s barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;musime posekat&amp;quot;''': zobrazuje počet dlaždic na startu simulace.&lt;br /&gt;
*'''Monitor &amp;quot;spotreba&amp;quot;''': zobrazuje spotřebu sekaček provádějících simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;neposekano&amp;quot;''': zobrazuje počet dlaždic, které ještě musíme posekat.&lt;br /&gt;
*'''Plot &amp;quot;Posekano v case&amp;quot;''': představuje grafický vývoj jednotlivých monitorovaných proměnných v čase vzhledem k aktuální simulaci.&lt;br /&gt;
*'''Input &amp;quot;pocet-sekacek-in&amp;quot;''': zde je možné určit počet sekaček, které budou provádět pohyb po prostoru dle zvoleného algoritmu.&lt;br /&gt;
*'''Input &amp;quot;pocet-lidi-in&amp;quot;''': zde je možné určit počet lidí, kteří budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Input &amp;quot;pocet-zvirat-in&amp;quot;''': zde je možné určit počet zvířat, které budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Slider &amp;quot;pocet-stromu-slider&amp;quot;''': určuje, kolik stromů se na mapě zobrazí.&lt;br /&gt;
*'''Chooser &amp;quot;start-sekacek&amp;quot;''': zde je možné zvolit, v jaké pozici se sekačky na startu simulace objeví.&lt;br /&gt;
*'''Chooser &amp;quot;algoritmus&amp;quot;''': zde se provádí volba algoritmu, který budou sekačky využívat po pohyb po prostoru.&lt;br /&gt;
*'''Chooser &amp;quot;zpusob-volby-algoritmu&amp;quot;''': určuje, zda všechny sekačky budou následovat stejný algoritmus nebo zda bude každé sekačce zvolen algoritmus náhodně ze seznamu všech algoritmů.&lt;br /&gt;
*'''Input &amp;quot;zmena-polomeru-rozdeleni&amp;quot;''': číselný vstup ovlivňující chování kruhových algoritmů.&lt;br /&gt;
*'''Slider &amp;quot;uhel-otoceni X degrees&amp;quot;''': číselný posuvník (ve stupních) ovlivňující chování vybraných algoritmů (konkrétně: &amp;quot;[[#Algoritmus 1: uhel-otoceni |uhel-otoceni]]&amp;quot;, &amp;quot;[[#Algoritmus 2: random-uhel-otoceni |random-uhel-otoceni]]&amp;quot;, &amp;quot;[[#Algoritmus 4: kruh |kruh]]&amp;quot;, &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |kruh-random-dojezd]]&amp;quot;).&lt;br /&gt;
*'''Input &amp;quot;viditelnost-sekacky&amp;quot;''': vstup ovlivňující chování algoritmu &amp;quot;search&amp;quot;, na základě této hodnoty se určuje, jak daleko kolem sebe se sekačka poohlíží po neposekané části trávy.&lt;br /&gt;
*'''Monitor &amp;quot;celkem-zniceni&amp;quot;''': zobrazuje celkový počet poškozených dlaždic.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme dále. Dvě tabulky níže shrnují průměrné výsledky prvních 4 algoritmů, a to jak pro variantu A, tak B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=923</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=923"/>
		<updated>2012-06-12T19:39:46Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Popis grafického rozhraní modelu==&lt;br /&gt;
*'''Tlačítko &amp;quot;setup&amp;quot;''': provede inicializaci modelu.&lt;br /&gt;
*'''Tlačítko &amp;quot;go&amp;quot;''': spustí simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-spravne&amp;quot;''': zobrazuje počet správně posekaných dlaždic, tedy dlaždic s barvou &amp;quot;''green+1''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-lehce zniceno&amp;quot;''': zobrazuje počet lehce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+2''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-stredne zniceno&amp;quot;''': zobrazuje počet středně zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+3''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-tezce zniceno&amp;quot;''': zobrazuje počet tězce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+4''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-totalne zniceno&amp;quot;''': zobrazuje počet zcela zničených dlaždic, tedy dlaždic s barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;musime posekat&amp;quot;''': zobrazuje počet dlaždic na startu simulace.&lt;br /&gt;
*'''Monitor &amp;quot;spotreba&amp;quot;''': zobrazuje spotřebu sekaček provádějících simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;neposekano&amp;quot;''': zobrazuje počet dlaždic, které ještě musíme posekat.&lt;br /&gt;
*'''Plot &amp;quot;Posekano v case&amp;quot;''': představuje grafický vývoj jednotlivých monitorovaných proměnných v čase vzhledem k aktuální simulaci.&lt;br /&gt;
*'''Input &amp;quot;pocet-sekacek-in&amp;quot;''': zde je možné určit počet sekaček, které budou provádět pohyb po prostoru dle zvoleného algoritmu.&lt;br /&gt;
*'''Input &amp;quot;pocet-lidi-in&amp;quot;''': zde je možné určit počet lidí, kteří budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Input &amp;quot;pocet-zvirat-in&amp;quot;''': zde je možné určit počet zvířat, které budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Slider &amp;quot;pocet-stromu-slider&amp;quot;''': určuje, kolik stromů se na mapě zobrazí.&lt;br /&gt;
*'''Chooser &amp;quot;start-sekacek&amp;quot;''': zde je možné zvolit, v jaké pozici se sekačky na startu simulace objeví.&lt;br /&gt;
*'''Chooser &amp;quot;algoritmus&amp;quot;''': zde se provádí volba algoritmu, který budou sekačky využívat po pohyb po prostoru.&lt;br /&gt;
*'''Chooser &amp;quot;zpusob-volby-algoritmu&amp;quot;''': určuje, zda všechny sekačky budou následovat stejný algoritmus nebo zda bude každé sekačce zvolen algoritmus náhodně ze seznamu všech algoritmů.&lt;br /&gt;
*'''Input &amp;quot;zmena-polomeru-rozdeleni&amp;quot;''': číselný vstup ovlivňující chování kruhových algoritmů.&lt;br /&gt;
*'''Slider &amp;quot;uhel-otoceni X degrees&amp;quot;''': číselný posuvník (ve stupních) ovlivňující chování vybraných algoritmů (konkrétně: &amp;quot;[[#Algoritmus 1: uhel-otoceni |uhel-otoceni]]&amp;quot;, &amp;quot;[[#Algoritmus 2: random-uhel-otoceni |random-uhel-otoceni]]&amp;quot;, &amp;quot;[[#Algoritmus 4: kruh |kruh]]&amp;quot;, &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |kruh-random-dojezd]]&amp;quot;).&lt;br /&gt;
*'''Input &amp;quot;viditelnost-sekacky&amp;quot;''': vstup ovlivňující chování algoritmu &amp;quot;search&amp;quot;, na základě této hodnoty se určuje, jak daleko kolem sebe se sekačka poohlíží po neposekané části trávy.&lt;br /&gt;
*'''Monitor &amp;quot;celkem-zniceni&amp;quot;''': zobrazuje celkový počet poškozených dlaždic.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=919</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=919"/>
		<updated>2012-06-12T19:35:59Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Popis grafického rozhraní modelu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Popis grafického rozhraní modelu==&lt;br /&gt;
*'''Tlačítko &amp;quot;setup&amp;quot;''': provede inicializaci modelu.&lt;br /&gt;
*'''Tlačítko &amp;quot;go&amp;quot;''': spustí simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-spravne&amp;quot;''': zobrazuje počet správně posekaných dlaždic, tedy dlaždic s barvou &amp;quot;''green+1''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-lehce zniceno&amp;quot;''': zobrazuje počet lehce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+2''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-stredne zniceno&amp;quot;''': zobrazuje počet středně zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+3''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-tezce zniceno&amp;quot;''': zobrazuje počet tězce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+4''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-totalne zniceno&amp;quot;''': zobrazuje počet zcela zničených dlaždic, tedy dlaždic s barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;musime posekat&amp;quot;''': zobrazuje počet dlaždic na startu simulace.&lt;br /&gt;
*'''Monitor &amp;quot;spotreba&amp;quot;''': zobrazuje spotřebu sekaček provádějících simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;neposekano&amp;quot;''': zobrazuje počet dlaždic, které ještě musíme posekat.&lt;br /&gt;
*'''Plot &amp;quot;Posekano v case&amp;quot;''': představuje grafický vývoj jednotlivých monitorovaných proměnných v čase vzhledem k aktuální simulaci.&lt;br /&gt;
*'''Input &amp;quot;pocet-sekacek-in&amp;quot;''': zde je možné určit počet sekaček, které budou provádět pohyb po prostoru dle zvoleného algoritmu.&lt;br /&gt;
*'''Input &amp;quot;pocet-lidi-in&amp;quot;''': zde je možné určit počet lidí, kteří budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Input &amp;quot;pocet-zvirat-in&amp;quot;''': zde je možné určit počet zvířat, které budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Slider &amp;quot;pocet-stromu-slider&amp;quot;''': určuje, kolik stromů se na mapě zobrazí.&lt;br /&gt;
*'''Chooser &amp;quot;start-sekacek&amp;quot;''': zde je možné zvolit, v jaké pozici se sekačky na startu simulace objeví.&lt;br /&gt;
*'''Chooser &amp;quot;algoritmus&amp;quot;''': zde se provádí volba algoritmu, který budou sekačky využívat po pohyb po prostoru.&lt;br /&gt;
*'''Chooser &amp;quot;zpusob-volby-algoritmu&amp;quot;''': určuje, zda všechny sekačky budou následovat stejný algoritmus nebo zda bude každé sekačce zvolen algoritmus náhodně ze seznamu všech algoritmů.&lt;br /&gt;
*'''Input &amp;quot;zmena-polomeru-rozdeleni&amp;quot;''': číselný vstup ovlivňující chování kruhových algoritmů.&lt;br /&gt;
*'''Slider &amp;quot;uhel-otoceni X degrees&amp;quot;''': číselný posuvník (ve stupních) ovlivňující chování vybraných algoritmů (konkrétně: uhel-otoceni, random-uhel-otoceni, kruh-random-dojezd, kruh).&lt;br /&gt;
*'''Input &amp;quot;viditelnost-sekacky&amp;quot;''': vstup ovlivňující chování algoritmu &amp;quot;search&amp;quot;, na základě této hodnoty se určuje, jak daleko kolem sebe se sekačka poohlíží po neposekané části trávy.&lt;br /&gt;
*'''Monitor &amp;quot;celkem-zniceni&amp;quot;''': zobrazuje celkový počet poškozených dlaždic.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=918</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=918"/>
		<updated>2012-06-12T19:35:36Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Popis grafického rozhraní modelu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Popis grafického rozhraní modelu==&lt;br /&gt;
*'''Tlačítko &amp;quot;setup&amp;quot;''': provede inicializaci modelu.&lt;br /&gt;
*'''Tlačítko &amp;quot;go&amp;quot;''': spustí simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-spravne&amp;quot;''': zobrazuje počet správně posekaných dlaždic, tedy dlaždic s barvou &amp;quot;''green+1''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-lehce zniceno&amp;quot;''': zobrazuje počet lehce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+2''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-stredne zniceno&amp;quot;''': zobrazuje počet středně zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+3''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-tezce zniceno&amp;quot;''': zobrazuje počet tězce zničených dlaždic, tedy dlaždic s barvou &amp;quot;'''green+4'''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-totalne zniceno&amp;quot;''': zobrazuje počet zcela zničených dlaždic, tedy dlaždic s barvou &amp;quot;'''yellow'''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;musime posekat&amp;quot;''': zobrazuje počet dlaždic na startu simulace.&lt;br /&gt;
*'''Monitor &amp;quot;spotreba&amp;quot;''': zobrazuje spotřebu sekaček provádějících simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;neposekano&amp;quot;''': zobrazuje počet dlaždic, které ještě musíme posekat.&lt;br /&gt;
*'''Plot &amp;quot;Posekano v case&amp;quot;''': představuje grafický vývoj jednotlivých monitorovaných proměnných v čase vzhledem k aktuální simulaci.&lt;br /&gt;
*'''Input &amp;quot;pocet-sekacek-in&amp;quot;''': zde je možné určit počet sekaček, které budou provádět pohyb po prostoru dle zvoleného algoritmu.&lt;br /&gt;
*'''Input &amp;quot;pocet-lidi-in&amp;quot;''': zde je možné určit počet lidí, kteří budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Input &amp;quot;pocet-zvirat-in&amp;quot;''': zde je možné určit počet zvířat, které budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*'''Slider &amp;quot;pocet-stromu-slider&amp;quot;''': určuje, kolik stromů se na mapě zobrazí.&lt;br /&gt;
*'''Chooser &amp;quot;start-sekacek&amp;quot;''': zde je možné zvolit, v jaké pozici se sekačky na startu simulace objeví.&lt;br /&gt;
*'''Chooser &amp;quot;algoritmus&amp;quot;''': zde se provádí volba algoritmu, který budou sekačky využívat po pohyb po prostoru.&lt;br /&gt;
*'''Chooser &amp;quot;zpusob-volby-algoritmu&amp;quot;''': určuje, zda všechny sekačky budou následovat stejný algoritmus nebo zda bude každé sekačce zvolen algoritmus náhodně ze seznamu všech algoritmů.&lt;br /&gt;
*'''Input &amp;quot;zmena-polomeru-rozdeleni&amp;quot;''': číselný vstup ovlivňující chování kruhových algoritmů.&lt;br /&gt;
*'''Slider &amp;quot;uhel-otoceni X degrees&amp;quot;''': číselný posuvník (ve stupních) ovlivňující chování vybraných algoritmů (konkrétně: uhel-otoceni, random-uhel-otoceni, kruh-random-dojezd, kruh).&lt;br /&gt;
*'''Input &amp;quot;viditelnost-sekacky&amp;quot;''': vstup ovlivňující chování algoritmu &amp;quot;search&amp;quot;, na základě této hodnoty se určuje, jak daleko kolem sebe se sekačka poohlíží po neposekané části trávy.&lt;br /&gt;
*'''Monitor &amp;quot;celkem-zniceni&amp;quot;''': zobrazuje celkový počet poškozených dlaždic.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=915</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=915"/>
		<updated>2012-06-12T19:34:05Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Detailní popis modelu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Popis grafického rozhraní modelu==&lt;br /&gt;
*'''Tlačítko &amp;quot;setup&amp;quot;''': provede inicializaci modelu.&lt;br /&gt;
*'''Tlačítko &amp;quot;go&amp;quot;''': spustí simulaci.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-spravne&amp;quot;''': zobrazuje počet správně posekaných dlaždic, tedy dlaždic s barvou &amp;quot;''green+1''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot;posekano-lehce zniceno&amp;quot;''': zobrazuje počet lehce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+2''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-stredne zniceno&amp;quot;''': zobrazuje počet středně zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+3''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-tezce zniceno&amp;quot;''': zobrazuje počet tězce zničených dlaždic, tedy dlaždic s barvou &amp;quot;''green+4''&amp;quot;.&lt;br /&gt;
*'''Monitor &amp;quot; posekano-totalne zniceno&amp;quot;''': zobrazuje počet zcela zničených dlaždic, tedy dlaždic s barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
*''Monitor &amp;quot;musime posekat&amp;quot;'': zobrazuje počet dlaždic na startu simulace.&lt;br /&gt;
*''Monitor &amp;quot;spotreba&amp;quot;'': zobrazuje spotřebu sekaček provádějících simulaci.&lt;br /&gt;
*''Monitor &amp;quot;neposekano&amp;quot;'': zobrazuje počet dlaždic, které ještě musíme posekat.&lt;br /&gt;
*''Plot &amp;quot;Posekano v case&amp;quot;'': představuje grafický vývoj jednotlivých monitorovaných proměnných v čase vzhledem k aktuální simulaci.&lt;br /&gt;
*''Input &amp;quot;pocet-sekacek-in&amp;quot;'': zde je možné určit počet sekaček, které budou provádět pohyb po prostoru dle zvoleného algoritmu.&lt;br /&gt;
*''Input &amp;quot;pocet-lidi-in&amp;quot;'': zde je možné určit počet lidí, kteří budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*''Input &amp;quot;pocet-zvirat-in&amp;quot;'': zde je možné určit počet zvířat, které budou provádět náhodný pohyb po prostoru.&lt;br /&gt;
*''Slider &amp;quot;pocet-stromu-slider&amp;quot;'': určuje, kolik stromů se na mapě zobrazí.&lt;br /&gt;
*''Chooser &amp;quot;start-sekacek&amp;quot;'': zde je možné zvolit, v jaké pozici se sekačky na startu simulace objeví.&lt;br /&gt;
*''Chooser &amp;quot;algoritmus&amp;quot;'': zde se provádí volba algoritmu, který budou sekačky využívat po pohyb po prostoru.&lt;br /&gt;
*''Chooser &amp;quot;zpusob-volby-algoritmu&amp;quot;'': určuje, zda všechny sekačky budou následovat stejný algoritmus nebo zda bude každé sekačce zvolen algoritmus náhodně ze seznamu všech algoritmů.&lt;br /&gt;
*''Input &amp;quot;zmena-polomeru-rozdeleni&amp;quot;'': číselný vstup ovlivňující chování kruhových algoritmů.&lt;br /&gt;
*''Slider &amp;quot;uhel-otoceni X degrees&amp;quot;'': číselný posuvník (ve stupních) ovlivňující chování vybraných algoritmů (konkrétně: uhel-otoceni, random-uhel-otoceni, kruh-random-dojezd, kruh).&lt;br /&gt;
*''Input &amp;quot;viditelnost-sekacky&amp;quot;'': vstup ovlivňující chování algoritmu &amp;quot;search&amp;quot;, na základě této hodnoty se určuje, jak daleko kolem sebe se sekačka poohlíží po neposekané části trávy.&lt;br /&gt;
*''Monitor &amp;quot;celkem-zniceni&amp;quot;'': zobrazuje celkový počet poškozených dlaždic.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=882</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=882"/>
		<updated>2012-06-12T18:52:35Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Závěr */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=881</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=881"/>
		<updated>2012-06-12T18:51:43Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 7: search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice |dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search |search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search | search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=879</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=879"/>
		<updated>2012-06-12T18:50:59Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 7: search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem |Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice | dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search | search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search | search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=874</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=874"/>
		<updated>2012-06-12T18:44:31Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
[[Simulate/cs | Simulovali]] jsme opakovaně několikrát pro každý [[Algorithm/cs | algoritmus]]. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr '''96 961 ticků''' je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru '''2 170 zničených dlaždic'''. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, '''128 327 ticků a průměrné poškození 2 313'''.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o '''1/3 lepších výsledků''' než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně nadějí, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval '''druhých nejlepších a hlavně stabilních výsledků'''.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;'''search'''&amp;quot; jasně překonal všechny své předchůdce. Dosahoval '''8-9x lepších výsledků''' než druhý nejrychlejší algoritmus &amp;quot;[[#Algoritmus 5: kruh s random dojezdem | Kruh s random dojezdem]]&amp;quot; a škody na pozemku byly '''téměř minimální''' (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy. Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;[[#Algoritmus 6: dlazdice | dlaždice]]&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;[[#Algoritmus 7: search | search]]&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je [[#Algoritmus 5: kruh s random dojezdem | kruhový pohyb s přepnutím do náhodného módu]], který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;[[#Algoritmus 7: search | search]]&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat. Práce by v budoucnu mohla být rozšířena i o podrobnější studium vlivu jednotlivých argumentů na výsledky algoritmů pohybu.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=857</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=857"/>
		<updated>2012-06-12T18:28:07Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Další omezení a předpoklady */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set pst-posekani-spravne 90&lt;br /&gt;
set pst-posekani-spatne1 4&lt;br /&gt;
set pst-posekani-spatne2 3&lt;br /&gt;
set pst-posekani-spatne3 2&lt;br /&gt;
set pst-posekani-zniceno 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=718</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=718"/>
		<updated>2012-06-11T14:46:37Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
*''set pst-posekani-spravne = 90''&lt;br /&gt;
*''set pst-posekani-spatne1 = 4''&lt;br /&gt;
*''set pst-posekani-spatne2 = 3''&lt;br /&gt;
*''set pst-posekani-spatne3 = 2''&lt;br /&gt;
*''set pst-posekani-zniceno = 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu: [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF: [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=717</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=717"/>
		<updated>2012-06-11T14:46:09Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Kód */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
*''set pst-posekani-spravne = 90''&lt;br /&gt;
*''set pst-posekani-spatne1 = 4''&lt;br /&gt;
*''set pst-posekani-spatne2 = 3''&lt;br /&gt;
*''set pst-posekani-spatne3 = 2''&lt;br /&gt;
*''set pst-posekani-zniceno = 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=716</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=716"/>
		<updated>2012-06-11T14:45:08Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Kód */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
*''set pst-posekani-spravne = 90''&lt;br /&gt;
*''set pst-posekani-spatne1 = 4''&lt;br /&gt;
*''set pst-posekani-spatne2 = 3''&lt;br /&gt;
*''set pst-posekani-spatne3 = 2''&lt;br /&gt;
*''set pst-posekani-zniceno = 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu [[File:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=715</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=715"/>
		<updated>2012-06-11T14:44:27Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
*''set pst-posekani-spravne = 90''&lt;br /&gt;
*''set pst-posekani-spatne1 = 4''&lt;br /&gt;
*''set pst-posekani-spatne2 = 3''&lt;br /&gt;
*''set pst-posekani-spatne3 = 2''&lt;br /&gt;
*''set pst-posekani-zniceno = 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
Zdrojové soubory modelu [[Media:Xdynl00-automaticka-sekacka.nlogo]]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
Celá zpráva v PDF [[Media:XDYNL00-VYZKUMNA-ZPRAVA.pdf]]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Xdynl00-automaticka-sekacka.nlogo&amp;diff=714</id>
		<title>File:Xdynl00-automaticka-sekacka.nlogo</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Xdynl00-automaticka-sekacka.nlogo&amp;diff=714"/>
		<updated>2012-06-11T14:43:47Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Zdrojové soubory k semestrální práci Ladislava Dyntar - Automatická sekačka.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zdrojové soubory k semestrální práci Ladislava Dyntar - Automatická sekačka.&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:XDYNL00-VYZKUMNA-ZPRAVA.pdf&amp;diff=713</id>
		<title>File:XDYNL00-VYZKUMNA-ZPRAVA.pdf</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:XDYNL00-VYZKUMNA-ZPRAVA.pdf&amp;diff=713"/>
		<updated>2012-06-11T14:42:02Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: PDF varianta výzkumné zprávy. Vytvořil: Ladislav Dyntar na téma Automatická sekačka&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PDF varianta výzkumné zprávy. Vytvořil: Ladislav Dyntar na téma Automatická sekačka&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=712</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=712"/>
		<updated>2012-06-11T14:32:13Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 1: uhel-otoceni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
*''set pst-posekani-spravne = 90''&lt;br /&gt;
*''set pst-posekani-spatne1 = 4''&lt;br /&gt;
*''set pst-posekani-spatne2 = 3''&lt;br /&gt;
*''set pst-posekani-spatne3 = 2''&lt;br /&gt;
*''set pst-posekani-zniceno = 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=711</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=711"/>
		<updated>2012-06-11T14:31:21Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Další omezení a předpoklady */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
*''set pst-posekani-spravne = 90''&lt;br /&gt;
*''set pst-posekani-spatne1 = 4''&lt;br /&gt;
*''set pst-posekani-spatne2 = 3''&lt;br /&gt;
*''set pst-posekani-spatne3 = 2''&lt;br /&gt;
*''set pst-posekani-zniceno = 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=710</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=710"/>
		<updated>2012-06-11T14:28:24Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech '''65x65 [[Patch/cs | patches]]''', složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní [[Initiation/cs | inicializaci]] '''tmavě zelený'''. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;''green''&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;''pst-posekani-spravne''&amp;quot; je jeho barva nastavena na &amp;quot;''green + 1''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 1&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne1''&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 2''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 2&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne2''&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 3''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 3&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-spatne3''&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''green + 4''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako ''&amp;quot;green + 4&amp;quot;'', sekačka přejede opět, s pradvěpodobností &amp;quot;''pst-posekani-zniceno''&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;''yellow''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci [[GUI/cs | grafického rozhraní]] zapnuta možnost &amp;quot;''auto-rotor-onoff''&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;''brown''&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;''brown''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se '''střední hodnotou 2''' a '''směrodatnou odchylkou 0.2'''. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;''red''&amp;quot;. Jejich umístění na mapě je generováno [[Random/cs | náhodně]].&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s '''normálním rozdělením se střední hodnotou 1''' a '''směrodatnou odchylkou 0.2'''. Jejich barva byla nastavena na &amp;quot;''blue''&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším [[Agent/cs | agentem]] jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu &amp;quot;''rychlost''&amp;quot;, přiřazen ještě '''atribut vyjadřující jejich algoritmus pohybu po mapě'''.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za [[Tick/cs | tick]], můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku [[Model/cs | modelu]] jsou postupně volány [[Method/cs | metody]] &amp;quot;''move-lidi''&amp;quot;, &amp;quot;''move-zvirata''&amp;quot; a &amp;quot;''move-sekacky''&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;''random 360''&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů pohybu, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;''uhel-otoceni''&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;''zmena-polomeru-rozdeleni''&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky (stejně jako lidé i zvířata) v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc '''ovlivňují dlaždice''', přes které zrovna přejíždí - sekají na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci [[#Popis prostředí | Popis prostředí]].&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na '''každý jeden tick spotřebuje jednu jednotku'''. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů. V práci bude v souvislosti s náklady hovořeno obecně o spotřebě, nebudeme ji převádět na konkrétní jednotky finančního či jiného ohodnocení.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno '''7 algoritmů''', není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;''speed''&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;''uhel-otoceni''&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random uhel-otoceni''&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením [[#Algoritmus 1: uhel-otoceni | prvního algoritmu]]. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;''random 360''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu o stejném poloměru. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se '''poloměr kruhu pomalu zvětšoval''' a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;''180 - random uhel-otoceni''&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po '''25 krocích''' se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen '''45 stupňů'''.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení [[#Algoritmus 4: kruh | předchozího algoritmu &amp;quot;kruh&amp;quot;]]. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;''lt 180 - random uhel-otoceni''&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;'''dlaždice'''&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;''uhel-otocky-kontroly''&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;''tick''&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí '''360 stupňů'''. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;'''search'''&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;''viditelnost-sekacky''&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;''viditelnost-sekacky''&amp;quot;. Tento [[Radius/cs | &amp;quot;radius&amp;quot;]] hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;''setup''&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;''go''&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je '''cílem simulace'''.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
''*set pst-posekani-spravne 90&lt;br /&gt;
*set pst-posekani-spatne1 4&lt;br /&gt;
*set pst-posekani-spatne2 3&lt;br /&gt;
*set pst-posekani-spatne3 2&lt;br /&gt;
*set pst-posekani-zniceno 1''&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou [[Efektivita/cs | efektivitu]] jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou ''90 %''.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na '''8'''; '''kůlnu vykreslíme vždy'''. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;''škody''&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (''posekano-spatne1-3 + posekano-zniceno'').&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu '''abstrahujeme''' od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=690</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=690"/>
		<updated>2012-06-11T00:50:01Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
&lt;br /&gt;
*'''Název simulace''': AUTOMATICKÁ SEKAČKA&lt;br /&gt;
*'''Typ práce''': VÝZKUMNÁ ZPRÁVA&lt;br /&gt;
*'''Předmět''': 4IT495 Simulace systémů (LS 2011/2012)&lt;br /&gt;
*'''Autor''': Ladislav Dyntar&lt;br /&gt;
*'''Typ modelu''': [[Multi-agent systems/cs | multiagentní]]&lt;br /&gt;
*'''Provedeno v:''' [http://ccl.northwestern.edu/netlogo/ NetLogo 5]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je [[Simulation/cs | simulovat]] pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem [[Simulation/cs | simulace]] bude pozorovat vliv jednotlivých [[Algoritm/cs | algoritmů]] (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou [[Multi-agent model/cs | multiagentního modelu]] jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik [[Agent/cs | agentů]], jejichž základní vlastností je [[Reactive behavior/cs | reaktivní chování]] - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních [[Algoritm/cs | algoritmů]] pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) [[Decision-making/cs | rozhodování]]. [[System/cs | Systém]] se tím pádem stal natolik [[Complex/cs | komplexním]], že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a [[Analyze/cs | analyzovat]] krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost [[Live simulation/cs | živé simulace]] jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=689</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=689"/>
		<updated>2012-06-11T00:03:35Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 7: search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Algoritmus7-search-graf.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Algoritmus7-search-graf.jpg&amp;diff=688</id>
		<title>File:Algoritmus7-search-graf.jpg</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Algoritmus7-search-graf.jpg&amp;diff=688"/>
		<updated>2012-06-11T00:01:02Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Obrázek 7: search - vývoj proměnných v čase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Obrázek 7: search - vývoj proměnných v čase&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=687</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=687"/>
		<updated>2012-06-10T23:57:46Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 7: search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné výsledky algoritmu search''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||colspan=&amp;quot;2&amp;quot;|Algoritmus: search&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6155,5||align=&amp;quot;right&amp;quot;|26,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|6017,4||align=&amp;quot;right&amp;quot;|22,5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=686</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=686"/>
		<updated>2012-06-10T23:42:41Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 5: kruh s random dojezdem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|52 844,0||align=&amp;quot;right&amp;quot;|1 662,5||align=&amp;quot;right&amp;quot;|56 525,3||align=&amp;quot;right&amp;quot;|1 702,3||align=&amp;quot;right&amp;quot;|50 252,8||align=&amp;quot;right&amp;quot;|1 537,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 467,3||align=&amp;quot;right&amp;quot;|1 427,5||align=&amp;quot;right&amp;quot;|40 535,3||align=&amp;quot;right&amp;quot;|1 328,3||align=&amp;quot;right&amp;quot;|39 754,8||align=&amp;quot;right&amp;quot;|1 298,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|43 569,3||align=&amp;quot;right&amp;quot;|1 401,5||align=&amp;quot;right&amp;quot;|46 820,0||align=&amp;quot;right&amp;quot;|1 483,0||align=&amp;quot;right&amp;quot;|44 044,3||align=&amp;quot;right&amp;quot;|1 442,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|46 965,0||align=&amp;quot;right&amp;quot;|1 505,5||align=&amp;quot;right&amp;quot;|47 440,8||align=&amp;quot;right&amp;quot;|1 528,8||align=&amp;quot;right&amp;quot;|48 088,8||align=&amp;quot;right&amp;quot;|1 508,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|46 711,4||align=&amp;quot;right&amp;quot;|1 499,3||align=&amp;quot;right&amp;quot;|47 830,3||align=&amp;quot;right&amp;quot;|1 510,6||align=&amp;quot;right&amp;quot;|45 535,1||align=&amp;quot;right&amp;quot;|1 446,8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh-random-dojezd&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|53 708,2||align=&amp;quot;right&amp;quot;|1 673,8||align=&amp;quot;right&amp;quot;|53 830,5||align=&amp;quot;right&amp;quot;|1 690,0||align=&amp;quot;right&amp;quot;|47 466,5||align=&amp;quot;right&amp;quot;|1 481,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 225,8||align=&amp;quot;right&amp;quot;|1 523,6||align=&amp;quot;right&amp;quot;|49 863,0||align=&amp;quot;right&amp;quot;|1 542,0||align=&amp;quot;right&amp;quot;|55 382,3||align=&amp;quot;right&amp;quot;|1 689,3&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|48 536,0||align=&amp;quot;right&amp;quot;|1 530,5||align=&amp;quot;right&amp;quot;|47 734,6||align=&amp;quot;right&amp;quot;|1 488,4||align=&amp;quot;right&amp;quot;|44 771,2||align=&amp;quot;right&amp;quot;|1 456,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|44 255,5||align=&amp;quot;right&amp;quot;|1 388,3||align=&amp;quot;right&amp;quot;|46 337,5||align=&amp;quot;right&amp;quot;|1 477,3||align=&amp;quot;right&amp;quot;|46 090,0||align=&amp;quot;right&amp;quot;|1 468,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|48 931,4||align=&amp;quot;right&amp;quot;|1 529,0||align=&amp;quot;right&amp;quot;|49 441,4||align=&amp;quot;right&amp;quot;|1 549,4||align=&amp;quot;right&amp;quot;|48 427,5||align=&amp;quot;right&amp;quot;|1 523,7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
--TAB--&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=685</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=685"/>
		<updated>2012-06-10T23:41:55Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Algoritmus 4: kruh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|118 115,3||align=&amp;quot;right&amp;quot;|2 713,7||align=&amp;quot;right&amp;quot;|83 065,3||align=&amp;quot;right&amp;quot;|2 246,8||align=&amp;quot;right&amp;quot;|49 966,6||align=&amp;quot;right&amp;quot;|1 559,2&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|114 771,0||align=&amp;quot;right&amp;quot;|2 641,0||align=&amp;quot;right&amp;quot;|56 684,8||align=&amp;quot;right&amp;quot;|1 711,3||align=&amp;quot;right&amp;quot;|51 770,0||align=&amp;quot;right&amp;quot;|1 607,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|83 572,3||align=&amp;quot;right&amp;quot;|2 230,0||align=&amp;quot;right&amp;quot;|50 091,8||align=&amp;quot;right&amp;quot;|1 575,5||align=&amp;quot;right&amp;quot;|39 482,0||align=&amp;quot;right&amp;quot;|1 309,8&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 359,7||align=&amp;quot;right&amp;quot;|1 679,7||align=&amp;quot;right&amp;quot;|49 896,0||align=&amp;quot;right&amp;quot;|1 581,0||align=&amp;quot;right&amp;quot;|43 328,3||align=&amp;quot;right&amp;quot;|1 399,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|92 704,6||align=&amp;quot;right&amp;quot;|2 316,1||align=&amp;quot;right&amp;quot;|59 934,4||align=&amp;quot;right&amp;quot;|1 778,6||align=&amp;quot;right&amp;quot;|46 136,7||align=&amp;quot;right&amp;quot;|1 468,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''Průměrné naměřené hodnoty pro algoritmus kruh, za přítomnosti lidí a zvířat''&lt;br /&gt;
!colspan=&amp;quot;7&amp;quot;|Algoritmus: kruh&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|MEAN 5||colspan=&amp;quot;2&amp;quot;|MEAN 10||colspan=&amp;quot;2&amp;quot;|MEAN 20&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody||align=&amp;quot;right&amp;quot;|ticks||align=&amp;quot;right&amp;quot;|škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|96 218,0||align=&amp;quot;right&amp;quot;|2 469,0||align=&amp;quot;right&amp;quot;|58 980,0||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|44 204,7||align=&amp;quot;right&amp;quot;|1 427,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|94 712,5||align=&amp;quot;right&amp;quot;|2 402,5||align=&amp;quot;right&amp;quot;|49 217,3||align=&amp;quot;right&amp;quot;|1 575,3||align=&amp;quot;right&amp;quot;|43 919,7||align=&amp;quot;right&amp;quot;|1 396,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|103 717,8||align=&amp;quot;right&amp;quot;|2 507,8||align=&amp;quot;right&amp;quot;|50 249,0||align=&amp;quot;right&amp;quot;|1 578,3||align=&amp;quot;right&amp;quot;|47 098,3||align=&amp;quot;right&amp;quot;|1 497,0&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|60 997,5||align=&amp;quot;right&amp;quot;|1 797,0||align=&amp;quot;right&amp;quot;|46 062,8||align=&amp;quot;right&amp;quot;|1 449,5||align=&amp;quot;right&amp;quot;|46 490,3||align=&amp;quot;right&amp;quot;|1 463,7&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|88 911,4||align=&amp;quot;right&amp;quot;|2 294,1||align=&amp;quot;right&amp;quot;|51 127,3||align=&amp;quot;right&amp;quot;|1 600,0||align=&amp;quot;right&amp;quot;|45 428,2||align=&amp;quot;right&amp;quot;|1 445,9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
[[File:xdynl00-tab4.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
--TAB--&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=684</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=684"/>
		<updated>2012-06-10T23:29:37Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Výsledky */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice, za přítomnosti lidí a zvířat''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
[[File:xdynl00-tab3.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
[[File:xdynl00-tab4.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
--TAB--&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=683</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=683"/>
		<updated>2012-06-10T23:22:03Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Výsledky */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
[[File:xdynl00-tab3.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
[[File:xdynl00-tab4.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
--TAB--&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=682</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=682"/>
		<updated>2012-06-10T23:13:19Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: /* Výsledky */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|A||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|nezměřeno||colspan=&amp;quot;2&amp;quot;|nezměřeno||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|261 776,4||3 340,6||91 921,8||2 095,8||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|61 054,2||1 781,4||50 671,0||1 492,0||align=&amp;quot;right&amp;quot;|61 671,2||align=&amp;quot;right&amp;quot;|1 777,2||align=&amp;quot;right&amp;quot;|71 543,8||align=&amp;quot;right&amp;quot;|1 834,6&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|62 151,6||1 816,6||46 472,0||1 407,0||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;right&amp;quot;| ||128 327,4||2 312,9||63 021,6||1 664,9||61 671,2||1 777,2||71 543,8||1 834,6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ align=&amp;quot;bottom&amp;quot; |''průměrné naměřené hodnoty pro algoritmy uhel-otoceni, random-uhel-otoceni, random-360 a dlazdice''&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|B||colspan=&amp;quot;2&amp;quot;|uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-uhel-otoceni||colspan=&amp;quot;2&amp;quot;|random-360||colspan=&amp;quot;2&amp;quot;|dlazdice&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| ||ticks||škody||ticks||škody||ticks||škody||ticks||škody&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|45&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|194 613,6||align=&amp;quot;right&amp;quot;|2 749,8||align=&amp;quot;right&amp;quot;|127 831,0||align=&amp;quot;right&amp;quot;|2 501,0||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|67&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|67 950,0||align=&amp;quot;right&amp;quot;|1 845,6||align=&amp;quot;right&amp;quot;|66 085,0||align=&amp;quot;right&amp;quot;|1 784,3||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|107&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|49 778,6||align=&amp;quot;right&amp;quot;|1 538,2||align=&amp;quot;right&amp;quot;|52 200,5||align=&amp;quot;right&amp;quot;|1 579,5||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;|159&lt;br /&gt;
|align=&amp;quot;right&amp;quot;|54 094,0||align=&amp;quot;right&amp;quot;|1 615,2||align=&amp;quot;right&amp;quot;|47 630,0||align=&amp;quot;right&amp;quot;|1 476,8||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|-&lt;br /&gt;
| ||align=&amp;quot;right&amp;quot;|91 609,1||align=&amp;quot;right&amp;quot;|1 937,2||align=&amp;quot;right&amp;quot;|73 436,6||align=&amp;quot;right&amp;quot;|1 835,4||align=&amp;quot;right&amp;quot;|54 129,8||align=&amp;quot;right&amp;quot;|1 570,0||align=&amp;quot;right&amp;quot;|58 745,2||align=&amp;quot;right&amp;quot;|1 618,4&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
[[File:xdynl00-tab3.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
[[File:xdynl00-tab4.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
--TAB--&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=672</id>
		<title>Automatická sekačka/cs</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=Automatick%C3%A1_seka%C4%8Dka/cs&amp;diff=672"/>
		<updated>2012-06-10T15:43:51Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Automatická sekačka}}&lt;br /&gt;
Tato stránka je výsledkem práce na výzkumné zprávě pro předmět 4IT495 Simulace systémů, LS 2011/2012.&lt;br /&gt;
AUTOMATICKÁ SEKAČKA; VÝZKUMNÁ ZPRÁVA; PŘEDMĚT: 4IT495 Simulace systémů; AUTOR: Ladislav Dyntar; TYP MODELU: Multiagentní; PROVEDENO V: NetLogo [1]&lt;br /&gt;
&lt;br /&gt;
=Definice problému=&lt;br /&gt;
V dnešní moderní době je snahou valné většiny lidí a organizací ušetřit si co nejvíce práce a/nebo nákladů. Vlastnictví rozlehlého pozemku s sebou, kromě mnoha radostí, přináší i řadu povinností. Jednou z nich je údržba travnatého porostu.&lt;br /&gt;
&lt;br /&gt;
Cílem tohoto modelu je simulovat pohyb automatické sekačky (či sekaček) po rozsáhlé travnaté ploše, na jejíž údržbě chce majitel ušetřit náklady, aniž by při tom musel jakkoliv omezovat využívání daného prostoru. Příkladem takového prostoru může být městský park či hotelová zahrada.&lt;br /&gt;
&lt;br /&gt;
Každá automatická sekačka bude po nastartování automaticky jezdit po vyhrazeném prostoru a sekat trávu. Při své práci se bude vyhybat překážkám, a to jak statickým (stromy, zahradní domek) tak dynamickým (lidé a zvířata) - ty se budou po mapě náhodně pohybovat.&lt;br /&gt;
&lt;br /&gt;
Aby to nebylo tak jednoduché, ne vždy je účinnost sekačky 100%. A tak se může stát, že bude nutné přejet přes určité místo i vícekrát, aby bylo posekáno dle představ majitele trávníku. Pokud však naopak sekačka opakovaně přejede přes daný kus trávy a ten bude již zcela posekaný, bude se daný kus trávy opotřebovávat - tráva se poškodí.&lt;br /&gt;
&lt;br /&gt;
Cílem simulace bude pozorovat vliv jednotlivých algoritmů (a jejich nastavení) na dobu trvání sečení a s tím související růst nákladů. Dále budeme pozorovat a četnost poškození trávníku vlivem zvoleného algoritmu. Přitom předpokládáme, že cílem majitele pozemku je posekat zcela celý pozemek a dosáhnout přitom co nejnižšího poškození při co nejmenších nákladech (benzín/čas). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=Metoda=&lt;br /&gt;
Pro řešení problému formou multiagentního modelu jsem se rozhodl z několika důvodů. V zadání jsem hned na začátku identifikoval několik agentů, jejichž základní vlastností je reaktivní chování - dokáží reagovat na danou situaci a na stav okolních agentů. Každý agent je však nezávislý na těch ostatních, má svůj vlastní cíl. Mým cílem bylo vytvořit i několik základních algoritmů pohybu sekačky, které by reagovaly nejen na již zmiňovaný stav okolních agentů, ale zahrnovaly v sobě i prvky vlastního (náhodného) rozhodování. Systém se tím pádem stal natolik komplexním, že bez návrhu multiagentního systému by bylo téměř nemožné jej pozorovat a analyzovat krok po kroku.&lt;br /&gt;
&lt;br /&gt;
Možnost živé simulace jsem předem zavrhl, a to z několika důvodů. Prvním byl výběr vhodných prostor; druhým časové omezení a s ním související možnost simulovat celý model opakovaně, navíc pokaždé s jinými atributy; a posledním pak technologické omezení, jelikož nedisponuji technikou ani znalostmi vhodnými k sestavení mnou navrhované automatické sekačky (jen pro upřesnění dodávám, že se mi, k mému překvapení, při hledání podařilo najít několik výrobců, kteří se podobnými sekačkami již zabývají).&lt;br /&gt;
&lt;br /&gt;
Rozhodl jsem se tedy využít programu NetLogo verze 5.0, se kterým jsem se seznámil na hodinách předmětu 4IT495 Simulace systémů, vyučovaném na VŠE v Praze.&lt;br /&gt;
&lt;br /&gt;
NetLogo, díky svému jednoduchému, avšak plně upravitelnému grafickému rozhraní umožňuje uživateli navrhovaný systém sledovat přímo za běhu. Je tedy možné ověřit si důsledky jednotlivých nastavení už v rámci samotné simulace a není nutné analyzovat průběh simulace až po jejím ukončení.&lt;br /&gt;
&lt;br /&gt;
Zároveň je třeba zmínit, že problém sekačky v této práci představuje hledání vhodného algoritmu na prohledávání stavového prostoru. Tuto NP-úplnou optimalizační ulohu mnoho lidí zná spíše pod pojmem Problém Obchodního Cestujícího (Traveling Salesman Problem - TSP). Jedná se o velice komplikovaný algoritmus, prakticky neřešitelný optimálně v polynomiálním čase.&lt;br /&gt;
&lt;br /&gt;
=Detailní popis modelu=&lt;br /&gt;
&lt;br /&gt;
==Popis prostředí==&lt;br /&gt;
Simulované prostředí představuje čtverec o rozměrech 65x65 patches, složený z menších čtverců o rozměrech 1x1. Pro účely naší simulace předpokládáme, že jedna délka představuje 1 metr v reálném světě.&lt;br /&gt;
&lt;br /&gt;
Simulovaný svět je ze všech stran uzavřený, představme si to jako plot okolo pozemku. Tato hranice není vidět.&lt;br /&gt;
&lt;br /&gt;
Každý čtverec je po úvodní inicializaci tmavě zelený. Tato barva představuje vysoký travní porost, který má automatická sekačka za úkol zkrátit. Barva takové neposekané dlaždice je určena jako &amp;quot;green&amp;quot;. Jakmile dojde k posekání vybraného čtverce, přičemž pravděpodobnost, že bude čtverec posekán je označena jako &amp;quot;pst-posekani-spravne&amp;quot; je jeho barva nastavena na &amp;quot;green + 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 1&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne1&amp;quot; dojde k lehkému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 2&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne2&amp;quot; dojde k střednímu poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 3&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 3&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-spatne3&amp;quot; dojde k závažnému poničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;green + 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pokud přes již posekaný čtverec, označený jako &amp;quot;green + 4&amp;quot;, sekačka přejede opět, s pradvěpodobností &amp;quot;pst-posekani-zniceno&amp;quot; dojde k naprostému zničení trávy vlivem opětovného přejetí sekačky a takový čtverec je následně označen barvou &amp;quot;yellow&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
V případě, že je v rámci grafického rozhraní zapnuta možnost &amp;quot;auto-rotor-onoff&amp;quot;, tedy automatické vypínání rotoru sekačky v moment, kdy přejíždí již posekanou dlaždici, nedochází k poničení trávy vůbec.&lt;br /&gt;
&lt;br /&gt;
Na ohraničeném pozemku se ještě nachází řada překážek. Na mapu jsou náhodně umístěny stromy, které zabírají přesně 1 čtverec. Jejich barva je nastavena jako &amp;quot;brown&amp;quot; a v grafickém rozhraní je možné určit si, kolik stromů chceme vygenerovat.&lt;br /&gt;
&lt;br /&gt;
Další překážkou je zahradní domek, který je na mapu umístěn pevně a představuje objekt o rozměrech 2*4 dlaždice. Jeho barva je taktéž nastavena na &amp;quot;brown&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Agenti==&lt;br /&gt;
===Lidé===&lt;br /&gt;
Jsou generováni v počtu stanoveném uživatelem v grafickém rozhraní. Jejich rychlost pohybu je stanovena náhodně s normálním rozložením se střední hodnotou 2 a směrodatnou odchylkou 0.2. Pro přehlednost byli všichni lidé označení červenou barvou &amp;quot;red&amp;quot;. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Zvířata===&lt;br /&gt;
Zvířata jsou také generována na základě vstupu uživatele z grafického rozhraní. Na mapě se zobrazují s ikonou psa. Jejich rychlost pohybu po pozemku je generována náhodně s normálním rozdělením se střední hodnotou 1 a směrodatnou odchylkou 0.2. Jejich barva byla nastavena na &amp;quot;blue&amp;quot;, tedy modrou. Jejich umístění na mapě je generováno náhodně.&lt;br /&gt;
&lt;br /&gt;
===Sekačky===&lt;br /&gt;
Dalším a pravděpodobně nejdůležitějším agentem jsou samotné sekačky.  V grafickém rozhraní lze zvolit jejich konkrétní počet. Pro celou skupinu sekaček máme možnost zvolit, zda se na mapě vygeneruje náhodně, v levém dolním rohu či na středu pozemku. Rychlost sekaček byla zvolena jako 1. Sekačkám je, kromě atributu rychlost, přiřazen ještě atribut vyjadřující jejich algoritmus pohybu po mapě.&lt;br /&gt;
&lt;br /&gt;
Pokud jsme si stanovili jednotku délky jako metry a víme, že délka hrany jedné dlaždice je 1 jednotka a sekačka se pohybuje rychlostí jedné jednotky za tick, můžeme říci, že sekačka ujede 1 metr/tick, přitom jednotkou času může být libovolná dosazená jednotka dle problému, který zrovna model bude řešit. Stejně tak je možné zaměnit metry za jinou jednotku délky dle požadavků řešitele.&lt;br /&gt;
&lt;br /&gt;
==Chování agentů==&lt;br /&gt;
V každém ticku modelu jsou postupně volány metody &amp;quot;move-lidi&amp;quot;, &amp;quot;move-zvirata&amp;quot; a &amp;quot;move-sekacky&amp;quot;. Lidé i zvířata se pohybují na základě stejného algoritmu - pokud mohou jít rovně vpřed (nejsou na kraji pozemku, před nimi není žádná překážka ani jiný agent) jdou o jim vlastní rychlost vpřed. Pokud narazí, změní směr o &amp;quot;random 360&amp;quot; stupňů a pokračují opět rovně, dokud znovu nenarazí.&lt;br /&gt;
&lt;br /&gt;
Zajímavé to začíná být až u pohybu samotné sekačky. Té v první fázi v grafickém rozhraní přidělíme jeden z navržených algoritmů, případně můžeme sáhnout po možnosti přidělit každému typu sekačky jeden z náhodných algoritmů ze seznamu algoritmů.&lt;br /&gt;
&lt;br /&gt;
Sekaček se týkají i další grafické prvky v rozhraní - slider &amp;quot;uhel-otoceni&amp;quot; nám umožňuje zvolit úhel, o který se sekačka bude otáčet v případě, že narazí (implementace se liší v závislosti na zvoleném algoritmu).&lt;br /&gt;
&lt;br /&gt;
Input box &amp;quot;zmena-polomeru-rozdeleni&amp;quot; je využit u kruhových algoritmů. Čím vyšší hodnota, tím rychleji se zvětšuje poloměr opisovaného kruhu sekačky.&lt;br /&gt;
&lt;br /&gt;
Sekačky, stejně jako lidé i zvířata, v případě, že mohou pokračovat bez omezení ve svém směru (ať už je přímý či kruhový), v něm pokračují až do té doby, dokud jim to okolí umožňuje. Jakmile se před nimi ocitne překážka, provedou kroky definované ve svém algoritmu a pokračují dále v klasickém pohybu.&lt;br /&gt;
&lt;br /&gt;
Sekačky při svém pohybu navíc ovlivňují patches, přes které zrovna přejíždí - seká na nich imaginární trávu. Pravidla pro sekání trávy sekačkou byla popsána výše v sekci Popis prostředí.&lt;br /&gt;
&lt;br /&gt;
Sekačka eviduje spotřebu benzínů/energie, na každý jeden tick spotřebuje jednu jednotku. Převod jednotek na reálné hodnoty je díky tomu možné uskutečnit až dodatečně s ohledem na to, bude-li uživatel modelu pracovat s cenou elektřiny, benzínu či jiných zdrojů.&lt;br /&gt;
&lt;br /&gt;
==Popis algoritmů sekačky==&lt;br /&gt;
Aktuálně je v kódu naprogramováno 7 algoritmů, není však nejmenší problém přidat v budoucnu další v případě zájmu o rozvoj modelu.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 1: uhel-otoceni===&lt;br /&gt;
Tento velice jednoduchý algoritmus nejprve kontroluje, zda může pokračovat v cestě (tím budeme i dále v textu rozumět situaci, kdy sekačce v cestě nestojí žádná překážka, lidé, zvířata či se nenachází na kraji pozemku). Pokud je vše v pořádku, jede dopředu o rychlost sekačky &amp;quot;speed&amp;quot;. Pokud narazí, otočí se doleva o úhel &amp;quot;uhel-otoceni&amp;quot; stanovený v grafickém prostředí.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 2: random-uhel-otoceni===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random uhel-otoceni&amp;quot;, přičemž náhodně vybírá na základě vstupu uživatele z grafického rozhraní.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 3: random-360===&lt;br /&gt;
Tento algoritmus je pouhým rozšířením prvního algoritmu. V případě, že narazí, otočí se sekačka o náhodný úhel &amp;quot;random 360&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 4: kruh===&lt;br /&gt;
Algoritmus nazvaný kruh představuje již komplikovanější řešení problému pohybu sekačky. Po úvodní kontrole na možnost pohybu vpřed se, pokud je pohyb umožněn, sekačka posune vpřed a mírně se natočí směrem vlevo. Toto se stále opakuje, takže sekačka by se bez zásahu pohybovala stále v kruhu. Proto s postupem času snižuji úhel, o jaký se sekačka otáčí vlevo, aby se poloměr kruhu postupně zvětšoval a sekačka tak mohla pokrýt co největší prostor.&lt;br /&gt;
&lt;br /&gt;
Jakmile při svém pohybu sekačka narazí na překážku, otočí se doleva o &amp;quot;180 - random uhel-otoceni&amp;quot; stupňů, na chvíli přeruší kroužení a odjede od překážky. Po 25 krocích se opět vrátí ke kroužení, začíná však opět s maximálním úhlem, který byl implicitně zvolen 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 5: kruh s random dojezdem===&lt;br /&gt;
Tento algoritmus představuje mírné upravení předchozího algoritmu &amp;quot;kruh&amp;quot;. Vychází z předpokladu, že na začátku je pro sekačku výhodné kroužit v kruzích, ale v pozdější fázi je lepší vyhledávat neposekaná políčka náhodně. Proto se po několika nárazech změní algoritmus sekačky na &amp;quot;lt 180 - random uhel-otoceni&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Algoritmus 6: dlazdice===&lt;br /&gt;
Předposlední algoritmus je nazvaný &amp;quot;dlaždice&amp;quot;. Jeho náplní je totiž vyhledávat zatím neposekané patche a upřednostňovat je před ostatními, aby bylo co nejvíce minimalizováno opotřebení již posekaných částí pozemku. Algoritmus tedy již posekané dlaždice bere jako svou překážku a snaží se jim vyhybat (pokud je to možné).&lt;br /&gt;
&lt;br /&gt;
Po úvodní kontrole na možnosti pohybu vpřed, pakliže je pohyb umožněn, se sekačka podívá, zda-li je dlaždice před ní neposekaná. Pokud je, přejde na ni. Pokud není, podívá se o &amp;quot;uhel-otocky-kontroly&amp;quot; vlevo. Pokud zde najde neposekaný patch, otočí se a čeká na další &amp;quot;tick&amp;quot;, aby mohla provést cestu vpřed. Pokud však ani po tomto otočení nenalezne vhodný patch, opakuje hledání v rozmezí 360 stupňů. Pokud ani jeden z okolních patchů sekačky není volný, uskuteční sekačka krok vpřed na již posekaný trávník a zde opakuje hledání o 360 stupňů. Jakmile by zde našla neposekanou část, přesune se na ni. Pokud ji nenajde, opět přejde na již posekané místo a toto opakuje stále dokola.&lt;br /&gt;
&lt;br /&gt;
===	Algoritmus 7: search===&lt;br /&gt;
Nejpokročilejším algoritmem je pohyb sekačky nazvaný jako &amp;quot;search&amp;quot;. Spočívá v tom, že sekačka se rozhlíží kolem sebe v kruhu 360 stupňů nejprve na vzdálenost 1 (viditelnost určuje uživatel v grafickém rozhraní pomocí číselného vstupu &amp;quot;viditelnost-sekacky&amp;quot;) a tuto vzdálenost sekačka postupně navyšuje až do hodnoty stanovené v parametru &amp;quot;viditelnost-sekacky&amp;quot;. Tento &amp;quot;radius&amp;quot; hledání postupně rozšiřuje až do té doby, dokud ve svém okolí nenalezne neposekanou dlaždici. V případě, že se takovou podaří nalézt, přesune se na ni a opakuje hledání (opět s nulovým úhlem a radiusem 1).&lt;br /&gt;
&lt;br /&gt;
Musíme mít na paměti, že tento algoritmus je řešením pohybu sekačky po námi simulované ploše, v reálném světě by bylo třeba sekačku vybavit výkonnými sensory a pravděpodobně by se její pohyb odvíjel od obrazu zaznamenaného prostředí v paměti sekačky. Neposekaným místem, na které se sekačka musí vracet, by mohl být např. prostor, kde se při původním průjezdu nacházel člověk či zvíře - těm se sekačka samozřejmě musela vyhnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Spuštění simulace==&lt;br /&gt;
Prvotní nastavení modelu provedeme stisknutím tlačítka &amp;quot;setup&amp;quot;. To spustí inicializaci všech proměných, nastavení mapy, vykreslí sekačky, lidi a zvířata.  Spuštění samotné simulace je možné provést stisknutím tlačítka &amp;quot;go&amp;quot;. Simulace se sama ukončí v moment, kdy jsou všechna políčka na mapě posekaná - takový stav je cílem simulace.&lt;br /&gt;
&lt;br /&gt;
==Další omezení a předpoklady==&lt;br /&gt;
Pro účely naší simulace byly stanoveny následující pravděpodobností hodnoty, určující pravděpodobnost, že dojde k poškození trávníku vlivem opakovaného pohybu sekačky na jedné a té samé dlaždici:&lt;br /&gt;
	set pst-posekani-spravne 90&lt;br /&gt;
	set pst-posekani-spatne1 4&lt;br /&gt;
	set pst-posekani-spatne2 3&lt;br /&gt;
	set pst-posekani-spatne3 2&lt;br /&gt;
	set pst-posekani-zniceno 1&lt;br /&gt;
&lt;br /&gt;
Jak je vidět, jsme poměrně přísní. V reálném světě by se všechny tyto hodnoty blížili spíše k jednomu procentu a méně, pro účely naší simulace však záměrně ponecháme tato kritéria, abychom mohli lépe pozorovat nízkou efektivitu jednotlivých algoritmů. Naopak pravděpodobnost, že sekačka poseče daný patch správně by v reálu mohla dosahovat spíše vyšších hodnot, pro naše účely budeme předpokládat, že se jedná o novou technologii, prozatím s nízkou efektivitou 90 %.&lt;br /&gt;
&lt;br /&gt;
Počet stromů pro všechny naše simulace jsme stanovili na 8; kůlnu vykreslíme vždy. Startovní pozice pro všechny simulace byla uprostřed. Sekačku jsme na trávník vpustili vždy jen jednu protože nepředpokládáme, že by si vlastník zahrady kupoval sekačky dvě.&lt;br /&gt;
&lt;br /&gt;
Proměnná &amp;quot;škody&amp;quot; používaná v tabulkách níže znázorňuje součet všech jakkoliv poškozených dlaždic s trávou (posekano-spatne1-3 + posekano-zniceno).&lt;br /&gt;
&lt;br /&gt;
Je nutné dále upozornit na to, že v modelu abstrahujeme od prvků jako je vliv počasí, nutnost doplňovat pohonné hmoty, poruchovost sekaček a jiné.&lt;br /&gt;
 &lt;br /&gt;
=Výsledky=&lt;br /&gt;
Simulovali jsme opakovaně několikrát pro každý algoritmus. Simulace navíc proběhla ve dvou variantách - s 10 lidmi a 10 zvířaty na pozemku (označeno jako varianta B) a poté bez zvířat a bez lidí (označeno jako varianta A). Průměrné výsledky a specifika jednotlivých algoritmů si probereme níže.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-tab1.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 1: uhel-otoceni==&lt;br /&gt;
Tento velice jednoduchý algoritmus se ukázal býti naprosto nevhodným pro pohyb v prostoru bez lidí a bez zvířat. Protože jsme se pohybovali ve čtvercovém prostředí, úhly jako 45, 90, 30 atd. stupňů se vůbec nedokončily. Průměr 96 961 ticků je nejhorším výsledkem, době strávené na pozemku pak odpovídal i počet zničených dlaždic s trávou, v průměru 2 170 zničených dlaždic. A to nebyl do průměru započítán výsledek hraničící s nekonečnem v případě úhlu 45 stupňů.&lt;br /&gt;
&lt;br /&gt;
Ve variantě B dosahoval algoritmus stejně špatných výsledků, 128 327 ticků a průměrné poškození 2 313.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic1.png]]&lt;br /&gt;
&lt;br /&gt;
Špatné výsledky jsou dány hlavně absencí náhody ve variantě A a spoléháním na srážku s některým z ostatních agentů ve variantě B.&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 2: random-uhel-otoceni==&lt;br /&gt;
Bylo až s překvapením, že jsme mírnou změnou výpočtu úhlu otočení (použitím náhodného generátoru) dokázali dosáhnout až o 1/3 lepších výsledků než u předešlé varianty algoritmu.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic2.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 3: random-360==&lt;br /&gt;
Poměrně jednoduchý algoritmus odrážející se zcela náhodně od překážek produkoval poměrně stabilní výsledky jak u varianty A, tak B. Z pokusů bylo zřejmé, že pohyb překážek na pozemku algoritmu svědčí, docházelo tak k časté změně směru a lepšímu pokrytí plochy. Zvolený úhel u tohoto typu pohybu nehrál roli.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic3.png]]&lt;br /&gt;
 &lt;br /&gt;
==Algoritmus 6: dlazdice==&lt;br /&gt;
Algoritmus dlaždice pro mě byl pravděpodobně největším zklamáním. Ačkoliv jsem do této metody vkládal hodně naděje, dosahovala pouze podprůměrných výsledků. Vinu přisuzuji části kódu metody, která reaguje na nenalezení dlaždice s neposekanou trávou, kde dochází k největšímu opotřebovávání okolních dlaždic.&lt;br /&gt;
&lt;br /&gt;
[[File:xdynl00-pic4a.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 4: kruh==&lt;br /&gt;
[[File:xdynl00-tab3.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus kruh se projevil býti velice citlivým na nastavení jednotlivých parametrů. Překvapil mě hlavně fakt, že čím větší poloměr kruhu sekačka opisovala, tím lepších výsledků algoritmus dosahoval. Tyto rozdíly vyjadřuje v tabulce střední hodnota, kterou jsme postupně volili 5, 10 a 20.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic4.png]]&lt;br /&gt;
&lt;br /&gt;
Pravděpodobně nejpříjemnějším překvapením zde byl fakt, že na algoritmus téměř nemělo vliv nastavení okolních dynamických agentů. Jak ve variantě A, tak ve variantě B, dosahoval velice podobných výsledků.&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 5: kruh s random dojezdem==&lt;br /&gt;
[[File:xdynl00-tab4.png]]&lt;br /&gt;
&lt;br /&gt;
Algoritmus pojmenovaný &amp;quot;kruh s random dojezdem&amp;quot; vznikl prakticky náhodou, čím více jsem ale o něm přemýšlel, tím lepší variantou se jevil. Vycházel jsem z teorie, že na začátku, kdy je velká většina pozemku neposekaná, se sekačce vyplatí jezdit v kruzích a systematicky tak posekat co nejvíce plochy. Po nějaké době by však bylo vhodné, aby sekačka změnila svůj styl pohybu a začala se po dlaždicích pohybovat více náhodně, aby tak dokázala pokrýt zbývající neposekané části.&lt;br /&gt;
&lt;br /&gt;
Tuto teorii následně prokázala i samotná měření, algoritmus dosahoval druhých nejlepších a hlavně stabilních výsledků.&lt;br /&gt;
&lt;br /&gt;
 [[File:xdynl00-pic5.png]]&lt;br /&gt;
&lt;br /&gt;
==Algoritmus 7: search==&lt;br /&gt;
Nejpokročilejší algoritmus s názvem &amp;quot;search&amp;quot; jasně překonal všechny své předchůdce. Dosahoval 8-9x lepších výsledků než druhý nejrychlejší algoritmus &amp;quot;Kruh s random dojezdem&amp;quot; a škody na pozemku byly téměř minimální (v průměru okolo 23-27 poškozených dlaždic).  Tyto skvělé výsledky jsou dány hlavně tím, že algoritmus dokázal analyzovat celé prostředí pozemku a efektivně vyhledávat neposekané kusy trávy.  Narozdíl od ostatních algoritmů (s výjimkou algoritmu &amp;quot;dlaždice&amp;quot;, kde byla viditelnost sekačky značně omezena), tak &amp;quot;search&amp;quot; netrávil čas neefektivním pojížděním po již posekaných částech spoléhajíc na náhodu.&lt;br /&gt;
&lt;br /&gt;
--TAB--&lt;br /&gt;
&lt;br /&gt;
--PIC GRAF--&lt;br /&gt;
&lt;br /&gt;
=Závěr=&lt;br /&gt;
Cílem simulace bylo pozorovat vliv jednotlivých algoritmů a jejich nastavení na dobu trvání sečení a s tím související růst nákladů. Při volbě nejlepšího algoritmu bylo nutné zároveň sledovat poškození trávníku, jakého jednotlivé algoritmy dosahují.&lt;br /&gt;
&lt;br /&gt;
Při plnění tohoto cíle jsme zjistili, že nejvhodnějším algoritmem bez analýzy širokého prostředí (spoléhající z velké míry na náhodu) je kruhový pohyb s přepnutím do náhodného módu, který podával stabilní výsledky při mnoha nastaveních a dosahoval nejlepšího času. Z výsledků jsme zároveň zjistili, že existuje přímá úměra mezi časem stráveným na pozemku a poškozeným trávníkem. Tento poměr se lišil pouze u algoritmu dlaždice, který měl na stejný čas méně poškozených dlaždic než ostatní. Byl by tedy vhodným řešením pro majitele, který neklade důraz na čas sečení, avšak disponuje ne příliš kvalitní sekačkou, která často trávník ničí.&lt;br /&gt;
&lt;br /&gt;
V kategorii algoritmů, které dokáží pracovat s celým prostředím a aktivně umí vyhledávat neposekané dlaždice, exceloval algoritmus s názvem &amp;quot;search&amp;quot;. Ten se prokázal jako vysoce efektivní, když dosahoval 8-9x lepších výsledků než ostatní metody pohybu, to vše při minimálním poškození trávníku.&lt;br /&gt;
&lt;br /&gt;
Model nabízí řadu možností pro rozšíření. Kromě implementace nových prvků ovlivňujících model by například bylo vhodné sledovat, za jakou dobu sekačky dosáhnou pokrytí jistého poměru posekaných dlaždic, např. tedy jak rychle daný algoritmus zvládá posekat 90 % celé plochy. Další možností by bylo omezit dobu pobytu sekačky na pozemku a sledovat, kolik dlaždic za takto stanovenou dobu dokáže posekat.&lt;br /&gt;
&lt;br /&gt;
=Reference=&lt;br /&gt;
[1] http://ccl.northwestern.edu/netlogo/ [http://ccl.northwestern.edu/netlogo/]&lt;br /&gt;
&lt;br /&gt;
=Kód=&lt;br /&gt;
zdrojové soubory modelu [http://dyntar.esuba.eu/data/skola/4IT495/xdynl00-automaticka-sekacka.zip]&lt;br /&gt;
&lt;br /&gt;
=Přílohy=&lt;br /&gt;
celá zpráva v PDF [http://dyntar.esuba.eu/data/skola/4IT495/XDYNL00-VYZKUMNA-ZPRAVA.pdf]&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Xdynl00-pic4a.png&amp;diff=107</id>
		<title>File:Xdynl00-pic4a.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Xdynl00-pic4a.png&amp;diff=107"/>
		<updated>2012-05-12T02:36:41Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Obrázek 4: dlazdice - vývoj proměnných v čase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Obrázek 4: dlazdice - vývoj proměnných v čase&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Xdynl00-pic5.png&amp;diff=106</id>
		<title>File:Xdynl00-pic5.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Xdynl00-pic5.png&amp;diff=106"/>
		<updated>2012-05-12T02:35:09Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Obrázek 5: kruh-random-dojezd - vývoj proměnných v čase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Obrázek 5: kruh-random-dojezd - vývoj proměnných v čase&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Xdynl00-tab4.png&amp;diff=105</id>
		<title>File:Xdynl00-tab4.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Xdynl00-tab4.png&amp;diff=105"/>
		<updated>2012-05-12T02:33:51Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Tabulka 4: průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tabulka 4: průměrné naměřené hodnoty pro algoritmus kruh s random dojezdem&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
	<entry>
		<id>http://www.simulace.info/index.php?title=File:Xdynl00-tab3.png&amp;diff=104</id>
		<title>File:Xdynl00-tab3.png</title>
		<link rel="alternate" type="text/html" href="http://www.simulace.info/index.php?title=File:Xdynl00-tab3.png&amp;diff=104"/>
		<updated>2012-05-12T02:32:41Z</updated>

		<summary type="html">&lt;p&gt;Xdynl00: Tabulka 3: průměrné naměřené hodnoty pro algoritmus kruh&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tabulka 3: průměrné naměřené hodnoty pro algoritmus kruh&lt;/div&gt;</summary>
		<author><name>Xdynl00</name></author>
		
	</entry>
</feed>