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

4.4 KiB

Ř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