111 lines
4.4 KiB
Markdown
111 lines
4.4 KiB
Markdown
|
# Řešení úloh
|
||
|
|
||
|
**Úloha**
|
||
|
- dvě množina stavů
|
||
|
- $X = \{x_{1}, x_{2}, \dots, x_{k}\}$ ... množina výchozích stavů
|
||
|
- $Y = \{y_{1}, y_{2}, \dots, y_{m}\}$ ... množina cílových stavů
|
||
|
- zobrazení $X \to Y$
|
||
|
|
||
|
**Řešením úlohy**
|
||
|
- postup (posloupnost operací), kterým převedeme úlohu z některého výchozího stavu $x_{i}$ do definovaného cílového stavu $y_{j}$
|
||
|
|
||
|
**Posloupnost stavů**
|
||
|
- $x_{i} = s_{0}, s_{1}, \dots, s_{t} = y_{j}$
|
||
|
- pro přechod mezi jednotlivými $s_{i}$ slouží operátory $r_{i}$ popisující elementární operace
|
||
|
|
||
|
**Operátory**
|
||
|
- $\text{R} = \{r_{1}, r_{2}, \dots, r_{l}\}$
|
||
|
- úlohu vyjádříme jako $x_{i} \to^{R_{Kij}} y_{j}$
|
||
|
|
||
|
**Definice úlohy**
|
||
|
- trojice $(X, Y, R)$
|
||
|
- vždy známe dvě složky a třetí určujeme
|
||
|
- $(X, ?, R)$ ... deduktivní
|
||
|
- $(?, Y, R)$ ... abduktivní
|
||
|
- $(X, Y, ?)$ ... induktivní
|
||
|
|
||
|
## Hledání řešení úlohy
|
||
|
|
||
|
Hledáme takové sestavení operátorů $R$, které vyhovuje zadaným množinám stavů $X$ a $Y$ a je v nějakém (obvykle daném) smyslu optimální.
|
||
|
|
||
|
**Postup**
|
||
|
- metodou pokusů a omylů vytváříme strom řešení úlohy
|
||
|
- současným prohledáváním hledáme takový kompoziční operátor $R_{Kij}$ (sestavení operátorů), který vyhovuje množinám stavů $X$ a $Y$
|
||
|
+ procházení stromu řešení
|
||
|
- deterministické
|
||
|
- náhodné
|
||
|
- heuristické
|
||
|
|
||
|
**Předpoklady**
|
||
|
1. existuje konečná **množina stavů** $S = \{s_{i}\}$, ve kterých se může úloha nacházet
|
||
|
2. existuje alespoň jeden **výchozí** (**počáteční**) **stav** úlohy $s_{0} \in S$
|
||
|
3. existuje konečná množina **cílových** (**požadovaných**) **stavů** úlohy $G = \{g_{j}\}$, přičemž $G \subseteq S$
|
||
|
4. existuje konečná množina **elementárních operátorů** $R = \{r_{l}\}$, které převádějí úlohu ze tavu $s_{p}$ do stavu $s_{q}$
|
||
|
|
||
|
**Stavový prostor** - definován dvojice $(S, R)$
|
||
|
|
||
|
**Konkrétní řešení úlohy**
|
||
|
- definováno trojicí $(s_{0}, s_{j}, R_{K_{0}j})$ na $S$
|
||
|
- $R_{K_{0}j}$ - kompoziční operátor pro převod úlohy z $s_{0}$ do $s_{j} = g_{_{k}}$
|
||
|
|
||
|
**Řešení úlohy ve stavovém prostoru**
|
||
|
- kompoziční operátor $R_{K_{0}j} = r_{1}r_{2}r_{3}\dots r_{r-1}r_{r}$ takový, že
|
||
|
- $s_{1} \leftarrow r_{1} (s_{0})$
|
||
|
- $s_{2} \leftarrow r_{1} (s_{1}) = r_{2}(r_{1}(s_{0}))$
|
||
|
- ...
|
||
|
- $s_{r} \leftarrow r_{r} (s_{r-1}) = r_{r}(r_{r-1}(\dots r_{1}(s_{0}))$
|
||
|
|
||
|
## Reprezentace úlohy stromovým grafem
|
||
|
|
||
|
**Pojmy**
|
||
|
- **uzly grafu** - stavy úlohy
|
||
|
- **hrany grafu** - přechody mezi stavy
|
||
|
- **bezprostřední následovník** - uzly, které mají stejného rodiče
|
||
|
- **expanze uzlu** - nalezení všech bezprostředních následovníků uzlu
|
||
|
- **hloubka uzlu** - počet hran do něj vedoucích z uzlu $s_{0}$
|
||
|
|
||
|
**Strom řešení úlohy**
|
||
|
- jediný uzel bez bezprostředního předchůdce - **kořen**
|
||
|
- u každého uzlu určujeme rekurzivně jeho hloubku
|
||
|
- kořen - 0
|
||
|
- následovník uzlu s hloubkou $d$ má hloubku $d+1$
|
||
|
- uzly bez bezprostředního následovníka jsou
|
||
|
- cílovými stavy úlohy
|
||
|
- stavy bez aplikovatelných operátorů
|
||
|
- stavy, o kterých jsme rozhodli, že je nemá smysl rozvíjet
|
||
|
- orientovaná hrana - přechod ze starého do nového stavu (aplikace operátoru)
|
||
|
|
||
|
**Nalezení řešení úlohy**
|
||
|
- nalezení cesty spojující kořen s listem, který reprezentuje cílový stav úlohy
|
||
|
|
||
|
## Produkční systém
|
||
|
|
||
|
**Složky**
|
||
|
- **databáze úlohy** - fakta
|
||
|
- **báze znalostí** - produkční pravidla
|
||
|
- podmínka -> akce
|
||
|
- **řídíci mechanizmus**
|
||
|
- provádí volbu, které pravidlo bude použito
|
||
|
- vybírá fakta z databáze, která budou dosazena do podmínky
|
||
|
- ukončuje výpočet, pokud je splněna cílová podmínka
|
||
|
- **množina cílů**, které mají být splněny
|
||
|
|
||
|
# Dekompozice úlohy
|
||
|
|
||
|
**Hanoiské věže**
|
||
|
- máme tři tyče: **A, B, C**
|
||
|
- na tyči **A** je (podle velikosti) $n$ kotoučů
|
||
|
- úkol: přeskládat z **A** pomocí **C** na tyč **B** (zaps. $n(A, B, C)$) bez porušení uspořádání
|
||
|
+ fáze
|
||
|
+ přeskládat $n-1$ kotoučů z A pomocí B na C
|
||
|
+ přeložit 1 kotouč z A na B
|
||
|
+ překládat $n-1$ kotoučů z C pomocí A na B
|
||
|
|
||
|
**AND/OR grafy**
|
||
|
- chceme najít cestu $a \to z$
|
||
|
- pomocí AND/OR grafu rozdělíme problém na podproblémy
|
||
|
- cesta přes k, cesta přes l
|
||
|
- pokud máme OR vrchol, tak stačí projít jediného následníka
|
||
|
- pokud máme AND vrchol, musíme projít všechny následníky
|
||
|
+ **celkové řešení** = podgraf AND/OR grafu, který nevynechá žádného následníka AND uzlu
|