FAV-ZCU/KIV UIR/02. Řešení a dekompozice úloh.md

111 lines
4.4 KiB
Markdown
Raw Normal View History

2024-05-14 16:01:48 +02:00
# Ř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