# Neinformované metody Tyto metody nemají žádné informace o pozici cíle a znají pouze počáteční stav, cílový stav a přechodovou funkci. Složitost záleží na: - $b$ - faktor větvení - $d$ - hloubka cíle - $m$ - maximální hloubka větve **Prohledávání do hloubky** (DFS) - prohledá vždy nejlevější a nejhlubší neexpandovaný uzel - **vlastnosti** - neúplný (nekonečná větev, cykly) - není optimální - časová složitost $O(b^m)$ - prostorová složitost $O(bm)$, lineární - **možné přidat limit** - po dané hloubce nepokračuje dále - řeší problém nekonečné větve **Prohledávání do šířky** (BFS) - prohledá vždy nejlevější neexpandovaný uzel s nejmenší hloubkou - **vlastnosti** - úplný (pro konečné b) - optimální podle délky cesty, neoptimální podle obecné ceny - časová složitost $O(b^{d+1})$ - prostorová složitost $O(b^{d+1})$ (každý uzel v paměti) **Prohledávání s postupným prohlubováním** (Iterating deepening DFS) - prohledávání do hloubky s postupně se zvyšující limitem - procházíme jako DFS, ale jen do hloubky dané limitem - **vlastnosti** - úplný (pro konečné b) - optimální (pro $g(n)$ rovnoměrně neklesající funkce hloubky) - časová složitost: $O(b^d)$ - paměťová složitost: $O(bd)$ - kombinace výhod **DFS** a **BFS** - nízké paměťové nároky - optimálnost, úplnost # Informované metody **Heuristické hledání nejlepší cesty** (Best-first Search) - použití **ohodnocovací funkce** $f(n)$ pro každý uzel - výpočet jeho přínosu - seznam uzlů udržujeme uspořádaný (vzestupně) vzhledem k $f(n)$ - použití **heuristické funkce** $h(n)$ pro každý uzeů - odhad vzdálenosti daného uzlu od cíle - čím menší $h(n)$, tím blíže k cíli, $h(\text{Goal}) = 0$ **Hladové heuristické hledání** (Greedy Best-first Search) - $f(n) = h(n)$ - např. vzdálenost vzdušnou čarou - v každém kroku expanduji prvně uzel, který se zdá být nejblíže k cíli - **vlastnosti** - obecně neúplný (nekonečný prostor, cykly) - není optimální - časová složitost: $O(b^m)$, záleží na funkci $h$ - paměťová složitost: $O(b^m)$, každý uzel je v paměti **Algoritmus A\*** - ohodnocovací funkce - kombinace $g(n)$ a $h(n)$ - $f(n) = g(n) + h(n)$ - $g(n)$ - cena cesty do $n$ - $h(n)$ - odhad cesty z $n$ do cíle - $f(n)$ - odhad ceny nejlevnější cesty, která vede přes $n$ - A\* algoritmus vyžaduje tzv. přípustnou heuristiku - $0 \leq h(n) \leq h^*(n)$, kde $h^*(n)$ je skutečná cena cesty z $n$ do cíle - odhad (např. přímá vzdálenost) musí být vždy menší nebo roven ceně libovolné možné cesty do cíle - expanduje uzly podle $f(n) = g(n) + h(n)$ - expanduje všechny uzly s $f(n) < C^*$ - expanduje některé uzly s $f(n) = C^*$ - neexpanduje žádné uzly s $f(n) > C^*$ - **vlastnosti** - úplný (pokud není nekonečno uzlů s $f < C^*$) - optimální - časová složitost: $O((b^*)^d)$, exponenciálné v délce řešení $d$ - paměťová složitost: $O((b^*)^d)$, každý uzel v paměti **Minimax** - principem algoritmu je procházení herního stromu a snaha o minimalizaci maximálních možných ztrát - $b$ - větvící faktor - $m$ - hloubka - zjišťuje se nejlepší tah proti nejlepšímu tahu protivníka - **vlastnosti** - úplný pouze pro konečné stromy - optimální proti optimálnímu oponentovi - časová složitost: $O(b^m)$ - prostorová složitost: $O(bm)$, prohledávání do hloubky **Alfa-Beta** prořezávání - odřízne expanzi některých uzlů - jedná se o efektivnější variantu minimaxu - nezaručuje však efektivitu - vlastnosti - prořezávání neovlivní výsledek - stále stejný - dobré uspořádání tahů ovlivní efektivitu - nejlepší uspořádání - čas. složitost $O(b^{m/2})$