Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Podobné dokumenty
Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

Expertní Systémy. Umělá inteligence Alan Turing: Computing Machinery and Intelligence. Mind 59, 1950, s

Funkcionální programování úvod

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

MATEMATICKÁ TEORIE ROZHODOVÁNÍ

Základy umělé inteligence

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

LISP Definice funkcí

Prohledávání do šířky = algoritmus vlny

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 3. CVIČENÍ

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

1. Od Scheme k Lispu

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Grafové algoritmy. Programovací techniky

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmy výpočetní geometrie

Přednáška 3. Rekurze 1

1 Stavový prostor. 1.1 Základní definice

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Podmíněný příkaz

Paradigmata programování 1

Grafové algoritmy. Programovací techniky

Algoritmy a datové struktury

2. úkol MI-PAA. Jan Jůna (junajan)

Počítačové šachy. Otakar Trunda

Úvod do teorie grafů

Základní datové struktury III: Stromy, haldy

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Jazyky pro umělou inteligenci

Rekurzivní algoritmy

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

Rozklad problému na podproblémy

Algoritmizace prostorových úloh

Hledáme efektivní řešení úloh na grafu

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Algoritmy I, složitost

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Stromy, haldy, prioritní fronty

Časová a prostorová složitost algoritmů

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 5. CVIČENÍ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Lokální definice (1) plocha-kruhu

Dynamické programování

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Dynamické programování

Genetické programování

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Obsah Techniky návrhu algoritmů Rekurze, algoritmy prohledávání s návratem, dynamické programování Rekurze... 5

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Rekurze. IB111 Úvod do programování skrze Python

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Předmět: Algoritmizace praktické aplikace

Binární soubory (datové, typované)

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Paradigmata programování II Korutiny a nedeterminismus

Algoritmizace. 1. Úvod. Algoritmus

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Použití dalších heuristik

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

Stromové struktury v relační databázi

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Principy indukce a rekursivní algoritmy

Vzdálenost uzlů v neorientovaném grafu

Optimalizace & soft omezení: algoritmy

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 2. CVIČENÍ

Zpětnovazební učení Michaela Walterová Jednoocí slepým,

ŠVP Gymnázium Ostrava-Zábřeh Úvod do programování

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

SII - Informatika. 1. Atribut relace, jehož hodnota jednoznačně určuje prvek v jiné relaci, se nazývá:

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

bfs, dfs, fronta, zásobník

Paradigmata programování 1

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

PARADIGMATA PROGRAMOVÁNÍ 2 KORUTINY, NEDETERMINISMUS

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

2. Řešení úloh hraní her Hraní her (Teorie a algoritmy hraní her)

1. Prohledávání stavového prostoru

Úvod do programování - Java. Cvičení č.4

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

bfs, dfs, fronta, zásobník, prioritní fronta, halda

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

Paradigmata programování 2

Transkript:

Hanojská věž zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3] který tah je lepší? (co je lepší tah?) P. Berka, 2012 1/21

Stavový prostor 1. množina stavů S = {s} 2. množina přechodů mezi stavy (operátorů) Φ = {φ} s k = φ ki (s i ) P. Berka, 2012 2/21

Úloha ve stavovém prostoru Stavový prostor, t.j. 1. množina stavů S = {s} 2. množina přechodů mezi stavy Φ = {φ} plus 3. počáteční stav s 0 4. množina koncových stavů G = {g} P. Berka, 2012 3/21

Řešení úlohy ve stavovém prostoru Nalezení posloupnosti operátorů φ 1 φ 2 φ d takových, že s 1 = φ 1 (s 0 ) s 2 = φ 2 (s 1 ) s 3 = φ 3 (s 3 )... g = φ d (s d-1 ) neboli nalezení cesty z počátečního stavu s 0 do některého z koncových stavů g (d je délka cesty) Prohledávání stavového prostoru: slepé - úplné prohledávání nevyužívající žádné dodatečné informace, heuristické - úplné nebo částečné prohledávání využívající hodnocení zvolené cesty, náhodné. P. Berka, 2012 4/21

Slepé prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale projít značně velký počet uzlů (procházíme všechny uzly, které mají hloubku menší, než je hloubka koncového uzlu). Každý uzel navštívíme nejvýše jednou. P. Berka, 2012 5/21

Algoritmus prohledávání do šířky krok NEROZVIN ROZVIN 1 A Ø 2 B, C A 3 C, D, E A, B 4 D, E, F, G, H A, B, C Konec P. Berka, 2012 6/21

Slepé prohledávání do hloubky Není zaručeno (v případě nekonečné větve), že vždy nalezneme koncový stav. A i když koncový stav nalezneme, nemusí jít o optimální řešení. Na rozdíl od prohledávání do šířky můžeme některými uzly procházet vícekrát, neboť se často musíme navracet. P. Berka, 2012 7/21

Algoritmus prohledávání do hloubky krok NEROZVIN ROZVIN 1 A Ø 2 B, C A 3 D, E, C A, B 4 I, J, E, C A, B, D 5 J, E, C A, B, D, I 6 E, C A, B, D, I, J 7 C A, B, D, I, J, E 8 F, G, H A, B, D, I, J, E, C konec P. Berka, 2012 8/21

Modifikace Omezené prohledávání do hloubky: na rozdíl od standardního algoritmu je dána maximální hloubka pro prohledávání (řešení problému s nekonečnou větví) Iterativní prohlubování: omezené prohledávání do hloubky, při kterém se postupně zvětšuje maximální hloubka (řešení problému s nalezením neoptimálního koncového stavu) P. Berka, 2012 9/21

nebo (slepé prohledávání podruhé) do šířky krok NEROZVIN ROZVIN 1 A Ø 2 C, B A 3 B, H, G, F A, C Konec do hloubky krok NEROZVIN ROZVIN 1 A Ø 2 C, B A 3 H, G, F, B A, C Konec Bylo by dobré vědět, kterým směrem se vydat = základní myšlenka heuristického prohledávání (v každém stavu odhaduji která cesta je nejperspektivnější) P. Berka, 2012 10/21

Paprskové prohledávání heuristické omezené prohledávání do šířky P. Berka, 2012 11/21

Gradientní prohledávání úplné heuristické prohledávání do hloubky P. Berka, 2012 12/21

Algoritmus A * cena přechodu z počátečního stavu přes stav s do koncového stavu f(s) = g(s) + h(s) heuristika h(s) jako dolní odhad ceny přechodu z s do koncového stavu, pro h(s) = 0 A * realizuje prohledávání do šířky P. Berka, 2012 13/21

Hanojské věže Dekompozice na podúlohy s využitím rekurze P. Berka, 2012 14/21

LISP Programovací jazyk pro manipulaci se symbolickými výrazy (LISt Processor) vytvořený na přelomu padesátých a šedesátých let na MIT skupinou kolem J. McCarthyho. Založen na tzv. lambda-kalkulu a teorii rekurzivních funkcí. Program v LISPu se vytváří komponováním funkcí (tzv. funkcionální programování) Data (tzv. S-výrazy): atomy číselné, nečíselné, T, NIL obecné S-výrazy o každý atom je S-výraz o jsou-li s 1 a s 2 dva S-výrazy, je i (s 1 s 2 ) S- výraz, tzv. seznam P. Berka, 2012 15/21

Funkce zapisovány v tzv. prefixové notaci, tedy (f s 1 s 2 s n ) (CONS s 1 s 2 ) - funkce, která ze dvou vstupních S-výrazů s 1 a s 2 vytvoří S-výraz (s 1 s 2 ) např. (CONS A (E I O U)) = (A E I O U) (CAR s) - funkce, jejíž hodnotou je první prvek seznamu s např. (CAR (A E I O U)) = A (CDR s) - funkce, jejíž hodnotou je zbytek seznamu po oddělení prvního prvku např. (CDR (A E I O U)) = (E I O U) (EQ s 1 s 2 ) - funkce, která testuje shodu svých argumentů (je definována pouze pro atomy) např. (EQ KOCKA PES) = NIL (ATOM s) - funkce, která má hodnotu T, je-li s atom např. (ATOM (CAR ( A E I O U))) = T P. Berka, 2012 16/21

Nové funkce se definují pomocí lambda-výrazů (DEFUN jmeno_funkce (LAMBDA (x 1 x 2 x n ) v 1 v 2... )) x 1 x 2 x n jsou jména argumentů v 1 v 2 jsou funkce tvořící tělo např. (DEFUN PRVNI_PRVEK (LAMBDA (SEZNAM) (CAR SEZNAM) )) (DEFUN DRUHY_PRVEK (LAMBDA (SEZNAM) (CAR (CDR SEZNAM)) )) (DEFUN TRETI_PRVEK (LAMBDA (SEZNAM)... )) P. Berka, 2012 17/21

Podmíněný příkaz: (test) (function) např. funkce, která zjišťuje, zda argument je seznam "If OBJ is an atom, then return NIL; else return T" (DEFUN LISTP (LAMBDA (OBJ) ((ATOM OBJ) NIL) T )) nebo funkce, která zjišťuje, zda je argument prázdný seznam (neboli zda argument je NIL) (DEFUN NULL (LAMBDA (OBJ) (EQ OBJ NIL) )) P. Berka, 2012 18/21

Rekurze (funkce volá sebe sama) Funkce pro hledání prvku v seznamu "hrubou silou": (DEFUN MBR (LAMBDA (NAM SEZNAM) ((EQ NAM (PRVNI_PRVEK SEZNAM))) ((EQ NAM (DRUHY_PRVEK SEZNAM))) ((EQ NAM (TRETI_PRVEK SEZNAM))) ((EQ NAM (TRETI_PRVEK (CDR SEZNAM))))... Potřebuji jedno volání EQ pro každou pozici v seznamu Funkce pro hledání prvku v seznamu s využitím rekurze: Prvek... je obsažen v seznamu..., je-li to první prvek seznamu, nebo je-li obsažen ve zbytku tohoto seznamu. (DEFUN MBR (LAMBDA (NAM SEZNAM) ((EQ NAM (CAR SEZNAM))) (MBR NAM (CDR SEZNAM)) )) Co když NAM není prvkem seznamu SEZNAM? P. Berka, 2012 19/21

Ještě podmínka pro nenalezení prvku NAM v seznamu, tedy 1. je-li seznam prázdný, pak NAM není prvkem seznamu 2. je-li NAM prvním prvkem seznamu, pak je prvkem seznamu 3. není-li NAM prvním prvkem seznamu, pak je prvkem seznamu pokud je prvkem zbytku seznamu (DEFUN MBR (LAMBDA (NAM SEZNAM) ((NULL SEZNAM) NIL) ((EQ NAM (CAR SEZNAM)) T) (MBR NAM (CDR SEZNAM)) )) P. Berka, 2012 20/21

(DEFUN HANOJ (LAMBDA (N) (PRESUN_VEZ N 'A 'B 'C) )) (DEFUN PRESUN_VEZ (LAMBDA (K X Y Z) ((EQ K 0)) (PRESUN_VEZ (DIFFERENCE K 1) X Z Y) (TAH X Z) (PRESUN_VEZ (DIFFERENCE K 1) Y X Z) )) (DEFUN TAH (LAMBDA (X Z) (PRIN1 "Presun disk z ") (PRIN1 X) (PRIN1 " na ") (PRIN1 Z)) (mulisp) P. Berka, 2012 21/21