2024-05-14 16:01:48 +02:00
|
|
|
# Neinformované metody
|
|
|
|
|
2024-05-15 07:26:22 +02:00
|
|
|
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:
|
2024-05-14 16:01:48 +02:00
|
|
|
- $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í
|
2024-05-15 07:26:22 +02:00
|
|
|
- **možné přidat limit**
|
2024-05-14 16:01:48 +02:00
|
|
|
- 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
|
2024-05-14 16:13:00 +02:00
|
|
|
|
|
|
|
**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})$
|