FAV-ZCU/KIV UIR/03. Neinformované a informované metody.md

99 lines
3.8 KiB
Markdown
Raw Normal View History

2024-05-14 16:01:48 +02:00
# 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:
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í
- **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
**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})$