Heuristiky, best-first search, A* search

Podobné dokumenty
Heuristiky, best-first search, A* search

Heuristiky, best-first search, A* search

Heuristiky, best-first search, A* search

Heuristiky, best-first search, A* search

Heuristiky, best-first search, A* search.

Heuristiky, best-first search, A* search.

Heuristiky, best-first search, A* search.

"Agent Hledač" (3. přednáška)

Umělá inteligence I. Roman Barták, KTIML.

Neinformované metody prohledávání stavového prostoru Michal Pěchouček, Milan Rollo. Department of Cybernetics Czech Technical University in Prague

Obsah: Problém osmi dam

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

Ú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ů

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

PROBLÉM OSMI DAM II. Problém osmi dam. Obsah:

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

Dekompozice problému, AND/OR grafy

Algoritmizace prostorových úloh

TGH05 - aplikace DFS, průchod do šířky

Stromy, haldy, prioritní fronty

Umělá inteligence. UI (AI) - součást informatiky s průniky mimo obor Stručná historie UI. Letošní cena nadace Vize Joseph Weizenbaum

TGH05 - aplikace DFS, průchod do šířky

Základy umělé inteligence

Seminář z umělé inteligence. Otakar Trunda

Algoritmy a datové struktury

Grafové algoritmy. Programovací techniky

Hry a UI historie. von Neumann, 1944 algoritmy perfektní hry Zuse, Wiener, Shannon, přibližné vyhodnocování

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

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

Prioritní fronta, halda

Grafové algoritmy. Programovací techniky

Použití dalších heuristik

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

Algoritmy na ohodnoceném grafu

Umělá inteligence I. Roman Barták, KTIML.

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

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

Neinformované metody prohledávání stavového prostoru. Gerstner Laboratory Agent Technology Group, Czech Technical University in Prague

u odpovědí typu A, B, C, D, E: Obsah: jako 0) CLP Constraint Logic Programming

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

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

07 Základní pojmy teorie grafů

Optimalizace & soft omezení: algoritmy

10. Složitost a výkon

Vzdálenost uzlů v neorientovaném grafu

Jan Březina. Technical University of Liberec. 21. dubna 2015

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

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.

TGH06 - Hledání nejkratší cesty

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

Obousměrné prohledávání. Tomáš Hřebejk

Binární vyhledávací stromy pokročilé partie

Prohledávání stavového prostoru

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Dynamické datové struktury III.

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Úvod do teorie grafů

Dynamické programování

Konečný automat. Jan Kybic.

Matice sousednosti NG

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

Jan Březina. Technical University of Liberec. 30. dubna 2013

Státnice odborné č. 20

Spojový seznam. Jan Kybic.

Prohledávání do šířky a do hloubky. Jan Hnilica Počítačové modelování 15

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

Dynamické datové struktury IV.

Dynamické programování

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

Rekurzivní algoritmy

Dijkstrův algoritmus

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

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Obsah: CLP Constraint Logic Programming. u odpovědí typu A, B, C, D, E: jako 0)

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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]

6. Tahy / Kostry / Nejkratší cesty

Stromy. Jan Kybic.

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

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

Paralelní grafové algoritmy

5 Rekurze a zásobník. Rekurzivní volání metody

TGH08 - Optimální kostry

= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez

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

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

Složitost 1.1 Opera ní a pam ová složitost 1.2 Opera ní složitost v pr rném, nejhorším a nejlepším p ípad 1.3 Asymptotická složitost

Časová a prostorová složitost algoritmů

Obsah: Hry vs. Prohledávání stavového prostoru Algoritmus Minimax. Nedeterministické hry Hry s nepřesnými znalostmi

Aproximativní algoritmy UIN009 Efektivní algoritmy 1

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

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

STROMY A KOSTRY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 6

Operace na datových strukturách

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

TGH06 - Hledání nejkratší cesty

NPRG030 Programování I, 2018/19 1 / :03:07

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

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

A4B33ZUI Základy umělé inteligence

Transkript:

Heuristiky, best-first search, A* search Aleš Horák E-mail: hales@fi.muni.cz http://nlp.fi.muni.cz/uui/ Obsah: Informované prohledávání stavového prostoru Jak najít dobrou heuristiku? Úvod do umělé inteligence 4/12 1 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad cesta na mapě Najdi cestu z města Arad do města Bukurest Oradea 71 Neamt 87 Zerind 75 151 Iasi Arad 140 92 Sibiu 99 Fagaras 118 80 Vaslui Timisoara Rimnicu Vilcea 111 142 211 Pitesti Lugoj 97 70 98 146 Hirsova Mehadia 101 85 Urziceni 75 138 86 Dobreta 120 Bukurest 90 Craiova Eforie Giurgiu Úvod do umělé inteligence 4/12 2 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad schéma rumunských měst Města: Arad Bukurest Craiova Dobreta Eforie Fagaras Giurgiu Hirsova Iasi Lugoj Mehadia Neamt... Cesty: Arad Timisoara 118 Arad Sibiu 140 Arad Zerind 75 Timisoara Lugoj 111 Sibiu Fagaras 99 Sibiu Rimnicu Vilcea 80 Zerind Oradea 71...... Giurgiu Bukurest 90 Pitesti Bukurest 101 Fagaras Bukurest 211 Urziceni Bukurest 85 Úvod do umělé inteligence 4/12 3 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad schéma rumunských měst Oradea 71 Neamt 87 Zerind 75 151 Iasi Arad 140 92 Sibiu 99 Fagaras 118 80 Vaslui Timisoara Rimnicu Vilcea 111 142 211 Pitesti Lugoj 97 70 98 146 Hirsova Mehadia 101 85 Urziceni 75 138 86 Dobreta 120 Bukurest 90 Craiova Eforie Giurgiu Úvod do umělé inteligence 4/12 4 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad schéma rumunských měst Oradea 71 Neamt 87 Zerind 75 151 Iasi Arad 140 92 Sibiu 99 Fagaras 118 80 Vaslui Timisoara Rimnicu Vilcea 111 142 211 Pitesti Lugoj 97 70 98 146 Hirsova Mehadia 101 85 Urziceni 75 138 86 Dobreta 120 Bukurest 90 Craiova Eforie Giurgiu Arad 366 Bukurest 0 Craiova 160 Dobreta 242 Eforie 161 Fagaras 178 Giurgiu 77 Hirsova 151 Iasi 226 Lugoj 244 Mehadia 241 Neamt 234 Oradea 380 Pitesti 98 Rimnicu Vilcea 193 Sibiu 253 Timisoara 329 Urziceni 80 Vaslui 199 Zerind 374 Úvod do umělé inteligence 4/12 4 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad schéma rumunských měst Oradea 71 Neamt 87 Zerind 75 151 Iasi Arad 140 92 Sibiu 99 Fagaras 118 80 Vaslui Timisoara Rimnicu Vilcea 111 142 211 Pitesti Lugoj 97 70 98 146 Hirsova Mehadia 101 85 Urziceni 75 138 86 Dobreta 120 Bukurest 90 Craiova Eforie Giurgiu Arad 366 Bukurest 0 Craiova 160 Dobreta 242 Eforie 161 Fagaras 178 Giurgiu 77 Hirsova 151 Iasi 226 Lugoj 244 Mehadia 241 Neamt 234 Oradea 380 Pitesti 98 Rimnicu Vilcea 193 Sibiu 253 Timisoara 329 Urziceni 80 Vaslui 199 Zerind 374 Úvod do umělé inteligence 4/12 4 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad cesta na mapě Neinformované prohledávání: DFS, BFS a varianty nemá (téměř) žádné informace o pozici cíle slepé prohledávání zná pouze: počáteční/cílový stav přechodovou funkci Úvod do umělé inteligence 4/12 5 / 25

Informované prohledávání stavového prostoru Příklad cesta na mapě Příklad cesta na mapě Neinformované prohledávání: DFS, BFS a varianty nemá (téměř) žádné informace o pozici cíle slepé prohledávání zná pouze: počáteční/cílový stav přechodovou funkci Informované prohledávání: má navíc informaci o (odhadu) bĺızkosti stavu k cílovému stavu heuristická funkce (heuristika) Úvod do umělé inteligence 4/12 5 / 25

Informované prohledávání stavového prostoru Heuristické hledání nejlepší cesty Heuristické hledání nejlepší cesty Best-first Search použití ohodnocovací funkce f(n) pro každý uzel výpočet přínosu daného uzlu udržujeme seznam uzlů uspořádaný (vzestupně) vzhledem k f(n) použití heuristické funkce h(n) pro každý uzel odhad vzdálenosti daného uzlu (stavu) od cíle čím menší h(n), tím bĺıže k cíli, h(goal) = 0. nejjednodušší varianta hladové heuristické hledání, Greedy best-first search f(n) = h(n) Úvod do umělé inteligence 4/12 6 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = h(n) = h vzd Buk (n), přímá vzdálenost z n do Bukuresti Arad 366 Sibiu Timisoara Zerind Arad Fagaras Oradea Rimnicu Vilcea Sibiu Bukurest Úvod do umělé inteligence 4/12 7 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = h(n) = h vzd Buk (n), přímá vzdálenost z n do Bukuresti Arad Sibiu Timisoara Zerind 253 329 374 Arad Fagaras Oradea Rimnicu Vilcea Sibiu Bukurest Úvod do umělé inteligence 4/12 7 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = h(n) = h vzd Buk (n), přímá vzdálenost z n do Bukuresti Arad Sibiu Timisoara Zerind 329 374 Arad Fagaras Oradea Rimnicu Vilcea 366 176 380 193 Sibiu Bukurest Úvod do umělé inteligence 4/12 7 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = h(n) = h vzd Buk (n), přímá vzdálenost z n do Bukuresti Arad Sibiu Timisoara 329 Zerind Arad 366 Fagaras Oradea Rimnicu Vilcea 380 193 Sibiu Bukurest 253 0 Úvod do umělé inteligence 4/12 7 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání vlastnosti expanduje vždy uzel, který se zdá nejbĺıže k cíli cesta nalezená v příkladu (g(arad Sibiu Fagaras Bukurest) = 450) je sice úspěšná, ale není optimální (g(arad Sibiu RimnicuVilcea Pitesti Bukurest) = 418) úplnost optimálnost časová složitost prostorová složitost Úvod do umělé inteligence 4/12 8 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání vlastnosti expanduje vždy uzel, který se zdá nejbĺıže k cíli cesta nalezená v příkladu (g(arad Sibiu Fagaras Bukurest) = 450) je sice úspěšná, ale není optimální (g(arad Sibiu RimnicuVilcea Pitesti Bukurest) = 418) úplnost optimálnost časová složitost prostorová složitost obecně není úplný (nekonečný prostor, cykly) Úvod do umělé inteligence 4/12 8 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání vlastnosti expanduje vždy uzel, který se zdá nejbĺıže k cíli cesta nalezená v příkladu (g(arad Sibiu Fagaras Bukurest) = 450) je sice úspěšná, ale není optimální (g(arad Sibiu RimnicuVilcea Pitesti Bukurest) = 418) úplnost optimálnost časová složitost prostorová složitost obecně není úplný (nekonečný prostor, cykly) není optimální Úvod do umělé inteligence 4/12 8 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání vlastnosti expanduje vždy uzel, který se zdá nejbĺıže k cíli cesta nalezená v příkladu (g(arad Sibiu Fagaras Bukurest) = 450) je sice úspěšná, ale není optimální (g(arad Sibiu RimnicuVilcea Pitesti Bukurest) = 418) úplnost optimálnost časová složitost prostorová složitost obecně není úplný (nekonečný prostor, cykly) není optimální O(b m ), hodně záleží na h Úvod do umělé inteligence 4/12 8 / 25

Informované prohledávání stavového prostoru Hladové heuristické hledání Hladové heuristické hledání vlastnosti expanduje vždy uzel, který se zdá nejbĺıže k cíli cesta nalezená v příkladu (g(arad Sibiu Fagaras Bukurest) = 450) je sice úspěšná, ale není optimální (g(arad Sibiu RimnicuVilcea Pitesti Bukurest) = 418) úplnost obecně není úplný (nekonečný prostor, cykly) optimálnost není optimální časová složitost O(b m ), hodně záleží na h prostorová složitost O(b m ), každý uzel v paměti Úvod do umělé inteligence 4/12 8 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* některé zdroje označují tuto variantu jako Best-first Search ohodnocovací funkce kombinace g(n) a h(n): f(n) = g(n)+h(n) g(n) je cena cesty do n h(n) je odhad ceny cesty z n do cíle f(n) je odhad ceny nejlevnější cesty, která vede přes n Úvod do umělé inteligence 4/12 9 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* některé zdroje označují tuto variantu jako Best-first Search ohodnocovací funkce kombinace g(n) a h(n): f(n) = g(n)+h(n) g(n) je cena cesty do n h(n) je odhad ceny cesty z n do cíle f(n) je odhad ceny nejlevnější cesty, která vede přes n A* algoritmus vyžaduje tzv. přípustnou (admissible) heuristiku: 0 h(n) h (n), kde h (n) je skutečná cena cesty z n do cíle tj. odhad se voĺı vždycky kratší nebo roven ceně libovolné možné cesty do cíle Např. přímá vzdálenost h vzd Buk nikdy není delší než (jakákoliv) cesta Úvod do umělé inteligence 4/12 9 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Heuristické hledání A* příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = g(n)+h(n) = g(n)+h vzd Buk (n) Arad 366=0+366 Sibiu Timisoara Zerind Arad Fagaras Oradea Rimnicu Vilcea Sibiu Bukurest Craiova Pitesti Sibiu Bukurest Craiova Rimnicu Vilcea Úvod do umělé inteligence 4/12 10 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Heuristické hledání A* příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = g(n)+h(n) = g(n)+h vzd Buk (n) Arad Sibiu Timisoara Zerind 393=140+253 447=118+329 449=75+374 Arad Fagaras Oradea Rimnicu Vilcea Sibiu Bukurest Craiova Pitesti Sibiu Bukurest Craiova Rimnicu Vilcea Úvod do umělé inteligence 4/12 10 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Heuristické hledání A* příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = g(n)+h(n) = g(n)+h vzd Buk (n) Arad Sibiu Timisoara Zerind 447=118+329 449=75+374 Arad Fagaras Oradea Rimnicu Vilcea 646=280+366 415=239+176 671=291+380 413=220+193 Sibiu Bukurest Craiova Pitesti Sibiu Bukurest Craiova Rimnicu Vilcea Úvod do umělé inteligence 4/12 10 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Heuristické hledání A* příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = g(n)+h(n) = g(n)+h vzd Buk (n) Arad Sibiu Arad Fagaras Oradea 646=280+366 415=239+176 671=291+380 Timisoara Zerind 447=118+329 449=75+374 Rimnicu Vilcea Sibiu Bukurest Craiova Pitesti Sibiu 526=366+160 417=317+100 553=300+253 Bukurest Craiova Rimnicu Vilcea Úvod do umělé inteligence 4/12 10 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Heuristické hledání A* příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = g(n)+h(n) = g(n)+h vzd Buk (n) Arad Arad 646=280+366 Fagaras Sibiu Oradea 671=291+380 Timisoara Zerind 447=118+329 449=75+374 Rimnicu Vilcea Sibiu Bukurest 591=338+253 450=450+0 Craiova Pitesti Sibiu 526=366+160 417=317+100 553=300+253 Bukurest Craiova Rimnicu Vilcea Úvod do umělé inteligence 4/12 10 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Heuristické hledání A* příklad Hledání cesty z města Arad do města Bukurest ohodnocovací funkce f(n) = g(n)+h(n) = g(n)+h vzd Buk (n) Arad Arad 646=280+366 Fagaras Sibiu Oradea 671=291+380 Timisoara Zerind 447=118+329 449=75+374 Rimnicu Vilcea Sibiu Bukurest Craiova Pitesti Sibiu 591=338+253 450=450+0 526=366+160 553=300+253 Bukurest Craiova Rimnicu Vilcea 418=418+0 615=455+60 607=414+193 Úvod do umělé inteligence 4/12 10 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty A* vlastnosti expanduje uzly podle f(n) = g(n)+h(n) A* expanduje všechny uzly s f(n) < C A* expanduje některé uzly s f(n) = C A* neexpanduje žádné uzly s f(n) > C úplnost optimálnost časová složitost prostorová složitost Úvod do umělé inteligence 4/12 11 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty A* vlastnosti expanduje uzly podle f(n) = g(n)+h(n) A* expanduje všechny uzly s f(n) < C A* expanduje některé uzly s f(n) = C A* neexpanduje žádné uzly s f(n) > C úplnost je úplný (pokud [počet uzlů s f < C ], tedy cena ǫ a b konečné) optimálnost časová složitost prostorová složitost Úvod do umělé inteligence 4/12 11 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty A* vlastnosti expanduje uzly podle f(n) = g(n)+h(n) A* expanduje všechny uzly s f(n) < C A* expanduje některé uzly s f(n) = C A* neexpanduje žádné uzly s f(n) > C úplnost je úplný (pokud [počet uzlů s f < C ], tedy cena ǫ a b konečné) optimálnost je optimální časová složitost prostorová složitost Úvod do umělé inteligence 4/12 11 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty A* vlastnosti expanduje uzly podle f(n) = g(n)+h(n) A* expanduje všechny uzly s f(n) < C A* expanduje některé uzly s f(n) = C A* neexpanduje žádné uzly s f(n) > C úplnost je úplný (pokud [počet uzlů s f < C ], tedy cena ǫ a b konečné) optimálnost je optimální časová složitost prostorová složitost O ( (b ) d), exponenciální v délce řešení d b... tzv. efektivní faktor větvení, viz dále Úvod do umělé inteligence 4/12 11 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty A* vlastnosti expanduje uzly podle f(n) = g(n)+h(n) A* expanduje všechny uzly s f(n) < C A* expanduje některé uzly s f(n) = C A* neexpanduje žádné uzly s f(n) > C úplnost je úplný (pokud [počet uzlů s f < C ], tedy cena ǫ a b konečné) optimálnost je optimální časová složitost O ( (b ) d), exponenciální v délce řešení d b... tzv. efektivní faktor větvení, viz dále prostorová složitost O ( (b ) d), každý uzel v paměti Úvod do umělé inteligence 4/12 11 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty A* vlastnosti expanduje uzly podle f(n) = g(n)+h(n) A* expanduje všechny uzly s f(n) < C A* expanduje některé uzly s f(n) = C A* neexpanduje žádné uzly s f(n) > C úplnost je úplný (pokud [počet uzlů s f < C ], tedy cena ǫ a b konečné) optimálnost je optimální časová složitost O ( (b ) d), exponenciální v délce řešení d b... tzv. efektivní faktor větvení, viz dále prostorová složitost O ( (b ) d), každý uzel v paměti Problém s prostorovou složitostí řeší algoritmy jako IDA*, RBFS Úvod do umělé inteligence 4/12 11 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Důkaz optimálnosti algoritmu A* předpokládejme, že byl vygenerován nějaký suboptimální cíl G 2 a je uložen ve frontě. dále necht n je neexpandovaný uzel na nejkratší cestě k optimálnímu cíli G 1 (tj. chybně neexpandovaný uzel ve správném řešení) n Start G1 G2 Úvod do umělé inteligence 4/12 12 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Důkaz optimálnosti algoritmu A* Pak předpokládejme, že byl vygenerován nějaký suboptimální cíl G 2 a je uložen ve frontě. dále necht n je neexpandovaný uzel na nejkratší cestě k optimálnímu cíli G 1 (tj. chybně neexpandovaný uzel ve správném řešení) f(g 2 ) = g(g 2 ) protože h(g 2 ) = 0 n Start G1 G2 Úvod do umělé inteligence 4/12 12 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Důkaz optimálnosti algoritmu A* Pak předpokládejme, že byl vygenerován nějaký suboptimální cíl G 2 a je uložen ve frontě. dále necht n je neexpandovaný uzel na nejkratší cestě k optimálnímu cíli G 1 (tj. chybně neexpandovaný uzel ve správném řešení) n Start G1 G2 f(g 2 ) = g(g 2 ) protože h(g 2 ) = 0 > g(g 1 ) protože G 2 je suboptimální Úvod do umělé inteligence 4/12 12 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Důkaz optimálnosti algoritmu A* Pak předpokládejme, že byl vygenerován nějaký suboptimální cíl G 2 a je uložen ve frontě. dále necht n je neexpandovaný uzel na nejkratší cestě k optimálnímu cíli G 1 (tj. chybně neexpandovaný uzel ve správném řešení) n Start G1 G2 f(g 2 ) = g(g 2 ) protože h(g 2 ) = 0 > g(g 1 ) protože G 2 je suboptimální f(n) protože h je přípustná Úvod do umělé inteligence 4/12 12 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Důkaz optimálnosti algoritmu A* Pak předpokládejme, že byl vygenerován nějaký suboptimální cíl G 2 a je uložen ve frontě. dále necht n je neexpandovaný uzel na nejkratší cestě k optimálnímu cíli G 1 (tj. chybně neexpandovaný uzel ve správném řešení) n Start G1 G2 f(g 2 ) = g(g 2 ) protože h(g 2 ) = 0 > g(g 1 ) protože G 2 je suboptimální f(n) protože h je přípustná tedy f(g 2 ) > f(n) A nikdy nevybere G 2 pro expanzi dřív než expanduje n spor s předpokladem, že n je neexpandovaný uzel Úvod do umělé inteligence 4/12 12 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* reprezentace uzlů: Prolog: l(n,f/g)... Python: trojice (n, f, g)... listový uzel N, F = f(n) = G+h(N), G = g(n) Prolog: t(n,f/g,subs)...python: čtveřice (n, f, g, subs)... podstrom s kořenem N, Subs podstromy seřazené podle f, G = g(n) a F = f-hodnota nejnadějnějšího následníka N Úvod do umělé inteligence 4/12 13 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* reprezentace uzlů: Prolog: l(n,f/g)... Python: trojice (n, f, g)... listový uzel N, F = f(n) = G+h(N), G = g(n) Prolog: t(n,f/g,subs)...python: čtveřice (n, f, g, subs)... podstrom s kořenem N, Subs podstromy seřazené podle f, G = g(n) a F = f-hodnota nejnadějnějšího následníka N # horní závora pro cenu nejlepší cesty biggest = 9999 def best search(start): for, solved, sol in expand(nil, (start, 0, 0), biggest): if solved == yes : yield sol # pokrač. Úvod do umělé inteligence 4/12 13 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* reprezentace uzlů: Prolog: l(n,f/g)... Python: trojice (n, f, g)... listový uzel N, F = f(n) = G+h(N), G = g(n) Prolog: t(n,f/g,subs)...python: čtveřice (n, f, g, subs)... podstrom s kořenem N, Subs podstromy seřazené podle f, G = g(n) a F = f-hodnota nejnadějnějšího následníka N # horní závora pro cenu nejlepší cesty biggest = 9999 def best search(start): for, solved, sol in expand(nil, (start, 0, 0), biggest): if solved == yes : yield sol # pokrač. expand(path,tree,bound) (tree1, solved, sol) path cesta mezi kořenem a tree tree prohledávaný podstrom bound f-limita pro expandování Tr vrací trojici: tree1 tree expandovaný až po bound solved yes, no, never sol cesta z kořene do cílového uzlu Úvod do umělé inteligence 4/12 13 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* reprezentace uzlů: Prolog: l(n,f/g)... Python: trojice (n, f, g)... listový uzel N, F = f(n) = G+h(N), G = g(n) Prolog: t(n,f/g,subs)...python: čtveřice (n, f, g, subs)... podstrom s kořenem N, Subs podstromy seřazené podle f, G = g(n) a F = f-hodnota nejnadějnějšího následníka N # horní závora pro cenu nejlepší cesty biggest = 9999 def best search(start): for, solved, sol in expand(nil, (start, 0, 0), biggest): if solved == yes : yield sol # pokrač. expand(path,tree,bound) (tree1, solved, sol) path cesta mezi kořenem a tree tree prohledávaný podstrom bound f-limita pro expandování Tr vrací trojici: tree1 tree expandovaný až po bound solved yes, no, never sol cesta z kořene do cílového uzlu odpovídá return pro generátorovou funkci Úvod do umělé inteligence 4/12 13 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def expand(path, tree, bound): if len(tree) == 3: # listový uzel node, f, g = tree if is goal(node): yield (None, yes, (f, Cons(node, path))) if f <= bound: succ = Nil for m, c in move anyyc(node): if not member(m, path): succ = Cons((m, c), succ) if succ == Nil: yield (None, never, None) else: trees = succlist(g, succ) f1 = bestf(trees) for tree1, solved, sol in expand(path, (node, f1, g, trees), bound): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) else: # stromový uzel node, f, g, trees = tree if trees == Nil: yield (None, never, None) else: if f <= bound: bound1 = min(bound, bestf(trees.tail)) for t1, solved1, sol1 in expand(cons(node, path), trees.head, bound1): for tree1, solved, sol in continue (path, (node, f, g, Cons(t1, trees.tail)), bound, solved1, sol1): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) # pokrač. Úvod do umělé inteligence 4/12 14 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def expand(path, tree, bound): if len(tree) == 3: # listový uzel vrací trojici: (tree1, solved, sol) node, f, g = tree if is goal(node): yield (None, yes, (f, Cons(node, path))) if f <= bound: succ = Nil for m, c in move anyyc(node): if not member(m, path): succ = Cons((m, c), succ) if succ == Nil: yield (None, never, None) else: trees = succlist(g, succ) f1 = bestf(trees) for tree1, solved, sol in expand(path, (node, f1, g, trees), bound): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) else: # stromový uzel node, f, g, trees = tree if trees == Nil: yield (None, never, None) else: if f <= bound: bound1 = min(bound, bestf(trees.tail)) for t1, solved1, sol1 in expand(cons(node, path), trees.head, bound1): for tree1, solved, sol in continue (path, (node, f, g, Cons(t1, trees.tail)), bound, solved1, sol1): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) # pokrač. Úvod do umělé inteligence 4/12 14 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def expand(path, tree, bound): if len(tree) == 3: # listový uzel vrací trojici: (tree1, solved, sol) node, f, g = tree if is goal(node): yield (None, yes, (f, Cons(node, path))) if f <= bound: succ = Nil for m, c in move anyyc(node): if not member(m, path): succ = Cons((m, c), succ) if succ == Nil: yield (None, never, None) else: succlist setřídí seznam listů podle f-hodnot trees = succlist(g, succ) f1 = bestf(trees) for tree1, solved, sol in expand(path, (node, f1, g, trees), bound): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) else: # stromový uzel node, f, g, trees = tree if trees == Nil: yield (None, never, None) else: if f <= bound: bound1 = min(bound, bestf(trees.tail)) for t1, solved1, sol1 in expand(cons(node, path), trees.head, bound1): for tree1, solved, sol in continue (path, (node, f, g, Cons(t1, trees.tail)), bound, solved1, sol1): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) # pokrač. Úvod do umělé inteligence 4/12 14 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def expand(path, tree, bound): if len(tree) == 3: # listový uzel vrací trojici: (tree1, solved, sol) node, f, g = tree if is goal(node): yield (None, yes, (f, Cons(node, path))) if f <= bound: succ = Nil for m, c in move anyyc(node): if not member(m, path): succ = Cons((m, c), succ) if succ == Nil: yield (None, never, None) else: succlist setřídí seznam listů podle f-hodnot trees = succlist(g, succ) f1 = bestf(trees) for tree1, solved, sol in expand(path, (node, f1, g, trees), bound): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) else: # stromový uzel node, f, g, trees = tree if trees == Nil: yield (None, never, None) # pokrač. else: continue volba způsobu pokračování podle výsledků expand if f <= bound: bound1 = min(bound, bestf(trees.tail)) for t1, solved1, sol1 in expand(cons(node, path), trees.head, bound1): for tree1, solved, sol in continue (path, (node, f, g, Cons(t1, trees.tail)), bound, solved1, sol1): yield (tree1, solved, sol) elif f > bound: yield (tree, no, None) Úvod do umělé inteligence 4/12 14 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def continue (path, tree, bound, subtr solved, sol): node,, g, trees = tree if subtr solved == yes : yield (None, yes, sol) elif subtr solved == no : nts = insert(trees.head, trees.tail) f1 = bestf(nts) for tree1, solved, sol in expand(path, (node, f1, g, nts), bound): yield (tree1, solved, sol) elif subtr solved == never : f1 = bestf(trees.tail) for tree1, solved, sol in expand(path, (node, f1, g, trees.tail), bound): yield (tree1, solved, sol) # pokrač. Úvod do umělé inteligence 4/12 15 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def continue (path, tree, bound, subtr solved, sol): node,, g, trees = tree if subtr solved == yes : yield (None, yes, sol) elif subtr solved == no : nts = insert(trees.head, trees.tail) f1 = bestf(nts) for tree1, solved, sol in expand(path, (node, f1, g, nts), bound): yield (tree1, solved, sol) elif subtr solved == never : f1 = bestf(trees.tail) # pokrač. continue volba způsobu pokračování podle výsledků expand for tree1, solved, sol in expand(path, (node, f1, g, trees.tail), yield (tree1, solved, sol) bound): Úvod do umělé inteligence 4/12 15 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def succlist(g0, succ): if succ == Nil: return Nil n, c = succ.head g = g0 + c f = g + h(n) ts1 = succlist(g0, succ.tail) ts = insert((n, f, g), ts1) return ts def f(tree): if len(tree) == 3: # listový uzel, f, = tree else: # stromový uzel, f,, = tree return f def bestf(trees): if trees == Nil: return biggest return f(trees.head) def insert(t, ts): if f(t) <= bestf(ts): return Cons(t, ts) return Cons(ts.head, insert(t, ts.tail)) Úvod do umělé inteligence 4/12 16 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def succlist(g0, succ): succlist(g0, succ) setřídí seznam listů podle f-hodnot if succ == Nil: return Nil vrací setříděný seznam n, c = succ.head g = g0 + c f = g + h(n) ts1 = succlist(g0, succ.tail) ts = insert((n, f, g), ts1) return ts def f(tree): if len(tree) == 3: # listový uzel, f, = tree else: # stromový uzel, f,, = tree return f def bestf(trees): if trees == Nil: return biggest return f(trees.head) def insert(t, ts): if f(t) <= bestf(ts): return Cons(t, ts) return Cons(ts.head, insert(t, ts.tail)) Úvod do umělé inteligence 4/12 16 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def succlist(g0, succ): succlist(g0, succ) setřídí seznam listů podle f-hodnot if succ == Nil: return Nil vrací setříděný seznam n, c = succ.head g = g0 + c f = g + h(n) ts1 = succlist(g0, succ.tail) ts = insert((n, f, g), ts1) return ts vytáhne f ze struktury def f(tree): if len(tree) == 3: # listový uzel, f, = tree else: # stromový uzel, f,, = tree return f def bestf(trees): if trees == Nil: return biggest return f(trees.head) def insert(t, ts): if f(t) <= bestf(ts): return Cons(t, ts) return Cons(ts.head, insert(t, ts.tail)) Úvod do umělé inteligence 4/12 16 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def succlist(g0, succ): succlist(g0, succ) setřídí seznam listů podle f-hodnot if succ == Nil: return Nil vrací setříděný seznam n, c = succ.head g = g0 + c f = g + h(n) ts1 = succlist(g0, succ.tail) ts = insert((n, f, g), ts1) return ts vytáhne f ze struktury def f(tree): if len(tree) == 3: # listový uzel, f, = tree else: # stromový uzel, f,, = tree return f def bestf(trees): if trees == Nil: return biggest return f(trees.head) nejlepší f-hodnota ze seznamu stromů def insert(t, ts): if f(t) <= bestf(ts): return Cons(t, ts) return Cons(ts.head, insert(t, ts.tail)) Úvod do umělé inteligence 4/12 16 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* pokrač. def succlist(g0, succ): succlist(g0, succ) setřídí seznam listů podle f-hodnot if succ == Nil: return Nil vrací setříděný seznam n, c = succ.head g = g0 + c f = g + h(n) ts1 = succlist(g0, succ.tail) ts = insert((n, f, g), ts1) return ts vytáhne f ze struktury def f(tree): if len(tree) == 3: # listový uzel, f, = tree else: # stromový uzel, f,, = tree return f def bestf(trees): if trees == Nil: return biggest return f(trees.head) nejlepší f-hodnota ze seznamu stromů vloží t do seznamu stromů ts podle f def insert(t, ts): if f(t) <= bestf(ts): return Cons(t, ts) return Cons(ts.head, insert(t, ts.tail)) Úvod do umělé inteligence 4/12 16 / 25

Informované prohledávání stavového prostoru Hledání nejlepší cesty algoritmus A* Hledání nejlepší cesty algoritmus A* heapq řešení pomocí modulu heapq implementace prioritní fronty import heapq def best search(start): heap = [(0, 0, start, Nil)] while True: try: f, g, node, path = heapq.heappop(heap) except IndexError: # fronta je prázdná break path1 = Cons(node, path) if is goal(node): yield (f, path1) if f <= biggest: for m, c in move anyyc(node): if not member(m, path1): heapq.heappush(heap, (g+c+h(m), g+c, m, path1)) Úvod do umělé inteligence 4/12 17 / 25

Informované prohledávání stavového prostoru Příklad řešení posunovačky Příklad řešení posunovačky konfigurace = seznam souřadnic X/Y: [pozice díry, pozice kámen č.1,...] start([2/2, 3/1, 2/3, 2/1, 3/3, 1/2, 3/2, 1/3, 1/1]). goal([1/3, 2/3, 3/3, 1/2, 2/2, 3/2, 1/1, 2/1, 3/1]). Úvod do umělé inteligence 4/12 18 / 25

Informované prohledávání stavového prostoru Příklad řešení posunovačky Příklad řešení posunovačky konfigurace = seznam souřadnic X/Y: [pozice díry, pozice kámen č.1,...] start([2/2, 3/1, 2/3, 2/1, 3/3, 1/2, 3/2, 1/3, 1/1]). goal([1/3, 2/3, 3/3, 1/2, 2/2, 3/2, 1/1, 2/1, 3/1]). move(+uzel, -NaslUzel,-Cena) pomocí pohybů mezery (cena vždy 1) move([xb/yb Numbers], [XL/YB NewNumbers], 1) :- % doleva XB>1, XL is XB 1, replace(xl/yb, XB/YB, Numbers, NewNumbers). move([xb/yb Numbers], [XR/YB NewNumbers], 1) :- % doprava XB<3, XR is XB + 1, replace(xr/yb, XB/YB, Numbers, NewNumbers). move([xb/yb Numbers], [XB/YD NewNumbers], 1) :- % dolu YB>1, YD is YB 1, replace(xb/yd, XB/YB, Numbers, NewNumbers). move([xb/yb Numbers], [XB/YU NewNumbers], 1) :- % nahoru YB<3, YU is YB + 1, replace(xb/yu, XB/YB, Numbers, NewNumbers). % replace(+co, +Cim, +Seznam, NovySeznam) replace(co,cim,[co T],[Cim T]):-!. replace(co,cim,[h T1],[H T2]) :- replace(co,cim,t1,t2). Úvod do umělé inteligence 4/12 18 / 25

Informované prohledávání stavového prostoru Příklad řešení posunovačky Příklad řešení posunovačky pokrač. Volba přípustné heuristické funkce h: h 1 (n) = počet dlaždiček, které nejsou na svém místě h 1 (S) = 8 Úvod do umělé inteligence 4/12 19 / 25

Informované prohledávání stavového prostoru Příklad řešení posunovačky Příklad řešení posunovačky pokrač. Volba přípustné heuristické funkce h: h 1 (n) = počet dlaždiček, které nejsou na svém místě h 1 (S) = 8 h 2 (n) = součet manhattanských vzdáleností dlaždic od svých správných pozic h 2 (S) = 3 7 +1 2 +2 4 +2 5 +3 6 +2 8 +2 3 +3 1 = 18 Úvod do umělé inteligence 4/12 19 / 25

Informované prohledávání stavového prostoru Příklad řešení posunovačky Příklad řešení posunovačky pokrač. Volba přípustné heuristické funkce h: h 1 (n) = počet dlaždiček, které nejsou na svém místě h 1 (S) = 8 h 2 (n) = součet manhattanských vzdáleností dlaždic od svých správných pozic h 2 (S) = 3 7 +1 2 +2 4 +2 5 +3 6 +2 8 +2 3 +3 1 = 18 h 1 i h 2 jsou přípustné... h (S) = 26 Úvod do umělé inteligence 4/12 19 / 25

Informované prohledávání stavového prostoru Příklad řešení posunovačky Příklad řešení posunovačky pokrač. Volba přípustné heuristické funkce h: h 1 (n) = počet dlaždiček, které nejsou na svém místě h 1 (S) = 8 h 2 (n) = součet manhattanských vzdáleností dlaždic od svých správných pozic h 2 (S) = 3 7 +1 2 +2 4 +2 5 +3 6 +2 8 +2 3 +3 1 = 18 h 1 i h 2 jsou přípustné... h (S) = 26 :- start (Start), bestsearch(start, Solution), reverse (Solution, RSolution), writelist (RSolution). 1: [2/2, 3/1, 2/3, 2/1, 3/3, 1/2, 3/2, 1/3, 1/1] 2: [1/2, 3/1, 2/3, 2/1, 3/3, 2/2, 3/2, 1/3, 1/1]... 26: [1/2, 2/3, 3/3, 1/3, 2/2, 3/2, 1/1, 2/1, 3/1] 27: [1/3, 2/3, 3/3, 1/2, 2/2, 3/2, 1/1, 2/1, 3/1] Úvod do umělé inteligence 4/12 19 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení relaxovaný problém méně omezení na akce než původní problém Cena optimálního řešení relaxovaného problému je přípustná heuristika pro původní problém. optimální řešení původního problému = řešení relaxovaného problému Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení relaxovaný problém méně omezení na akce než původní problém Cena optimálního řešení relaxovaného problému je přípustná heuristika pro původní problém. optimální řešení původního problému = řešení relaxovaného problému Posunovačka a relaxovaná posunovačka: dlaždice se může přesunout z A na B A sousedí s B B je prázdná Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení relaxovaný problém méně omezení na akce než původní problém Cena optimálního řešení relaxovaného problému je přípustná heuristika pro původní problém. optimální řešení původního problému = řešení relaxovaného problému Posunovačka a relaxovaná posunovačka: dlaždice se může přesunout z A na B A sousedí s B B je prázdná (a) dlaždice se může přesunout z A na B A sousedí s B (b) dlaždice se může přesunout z A na B B je prázdná (c) dlaždice se může přesunout z A na B Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení relaxovaný problém méně omezení na akce než původní problém Cena optimálního řešení relaxovaného problému je přípustná heuristika pro původní problém. optimální řešení původního problému = řešení relaxovaného problému Posunovačka a relaxovaná posunovačka: dlaždice se může přesunout z A na B A sousedí s B B je prázdná (a) dlaždice se může přesunout z A na B A sousedí s B.. h 2 (b) dlaždice se může přesunout z A na B B je prázdná (c) dlaždice se může přesunout z A na B Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení relaxovaný problém méně omezení na akce než původní problém Cena optimálního řešení relaxovaného problému je přípustná heuristika pro původní problém. optimální řešení původního problému = řešení relaxovaného problému Posunovačka a relaxovaná posunovačka: dlaždice se může přesunout z A na B A sousedí s B B je prázdná (a) dlaždice se může přesunout z A na B A sousedí s B.. h 2 (b) dlaždice se může přesunout z A na B B je prázdná (c) dlaždice se může přesunout z A na B... h 1 Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Jak najít přípustnou heuristickou funkci? Jak najít přípustnou heuristickou funkci? je možné najít obecné pravidlo, jak objevit heuristiku h 1 nebo h 2? h 1 i h 2 jsou délky cest pro zjednodušené verze problému Posunovačka: při přenášení dlaždice kamkoliv h 1 =počet kroků nejkratšího řešení při posouvání dlaždice kamkoliv o 1 pole (i na plné) h 2 =počet kroků nejkratšího řešení relaxovaný problém méně omezení na akce než původní problém Cena optimálního řešení relaxovaného problému je přípustná heuristika pro původní problém. optimální řešení původního problému = řešení relaxovaného problému Posunovačka a relaxovaná posunovačka: dlaždice se může přesunout z A na B A sousedí s B B je prázdná (a) dlaždice se může přesunout z A na B A sousedí s B.. h 2 (b) dlaždice se může přesunout z A na B B je prázdná... Gaschnigova h. (c) dlaždice se může přesunout z A na B... h 1 Úvod do umělé inteligence 4/12 20 / 25

Jak najít dobrou heuristiku? Určení kvality heuristiky Určení kvality heuristiky efektivní faktor větvení b N...počet vygenerovaných uzlů, d...hloubka řešení, idealizovaný strom s N +1 uzly má faktor větvení b (reálné číslo): N +1 = 1+b +(b ) 2 + +(b ) d např.: když A najde řešení po 52 uzlech v hloubce 5... b = 1.92 heuristika je tím lepší, čím bĺıže je b hodnotě 1. Úvod do umělé inteligence 4/12 21 / 25

Jak najít dobrou heuristiku? Určení kvality heuristiky Určení kvality heuristiky efektivní faktor větvení b N...počet vygenerovaných uzlů, d...hloubka řešení, idealizovaný strom s N +1 uzly má faktor větvení b (reálné číslo): N +1 = 1+b +(b ) 2 + +(b ) d např.: když A najde řešení po 52 uzlech v hloubce 5... b = 1.92 heuristika je tím lepší, čím bĺıže je b hodnotě 1. měření b na množině testovacích sad dobrá představa o přínosu heuristiky 8-posunovačka Průměrný počet uzlů Efektivní faktor větvení b d IDS A (h 1 ) A (h 2 ) IDS A (h 1 ) A (h 2 ) 2 10 6 6 2.45 1.79 1.79 6 680 20 18 2.73 1.34 1.30 10 47127 93 39 2.79 1.38 1.22 12 3644035 227 73 2.78 1.42 1.24 18 3056 363 1.46 1.26 24 39135 1641 1.48 1.26 Úvod do umělé inteligence 4/12 21 / 25

Jak najít dobrou heuristiku? Určení kvality heuristiky Určení kvality heuristiky efektivní faktor větvení b N...počet vygenerovaných uzlů, d...hloubka řešení, idealizovaný strom s N +1 uzly má faktor větvení b (reálné číslo): N +1 = 1+b +(b ) 2 + +(b ) d např.: když A najde řešení po 52 uzlech v hloubce 5... b = 1.92 heuristika je tím lepší, čím bĺıže je b hodnotě 1. měření b na množině testovacích sad dobrá představa o přínosu heuristiky 8-posunovačka Průměrný počet uzlů Efektivní faktor větvení b d IDS A (h 1 ) A (h 2 ) IDS A (h 1 ) A (h 2 ) 2 10 6 6 2.45 1.79 1.79 6 680 20 18 2.73 1.34 1.30 10 47127 93 39 2.79 1.38 1.22 12 3644035 227 73 2.78 1.42 1.24 18 3056 363 1.46 1.26 24 39135 1641 1.48 1.26 h 2 dominuje h 1 ( n : h2 (n) h 1 (n) )... h 2 je lepší (nebo stejná) než h 1 ve všech případech Úvod do umělé inteligence 4/12 21 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů úlohy t i s potřebným časem na zpracování D i (např.: i = 1,...,7) m procesorů (např.: m = 3) relace precedence mezi úlohami které úlohy mohou začít až po skončení dané úlohy t 1 /D 1 = 4 t 2 /D 2 = 2 t 3 /D 3 = 2 t 4 /D 4 = 20 t 5 /D 5 = 20 t 6 /D 6 = 11 t 7 /D 7 = 11 Úvod do umělé inteligence 4/12 22 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů úlohy t i s potřebným časem na zpracování D i (např.: i = 1,...,7) m procesorů (např.: m = 3) relace precedence mezi úlohami které úlohy mohou začít až po skončení dané úlohy t 1 /D 1 = 4 t 2 /D 2 = 2 t 3 /D 3 = 2 t 4 /D 4 = 20 t 5 /D 5 = 20 t 6 /D 6 = 11 t 7 /D 7 = 11 problém: najít rozvrh práce pro každý procesor s minimalizací celkového času 02 4 13 24 33 CPU 1 t 3 = t 6 = = t 5 = CPU 2 t 2 = t 7 =... CPU 3 t 1 = t 4 =... Úvod do umělé inteligence 4/12 22 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů úlohy t i s potřebným časem na zpracování D i (např.: i = 1,...,7) m procesorů (např.: m = 3) relace precedence mezi úlohami které úlohy mohou začít až po skončení dané úlohy t 1 /D 1 = 4 t 2 /D 2 = 2 t 3 /D 3 = 2 t 4 /D 4 = 20 t 5 /D 5 = 20 t 6 /D 6 = 11 t 7 /D 7 = 11 problém: najít rozvrh práce pro každý procesor s minimalizací celkového času 02 4 13 24 33 CPU 1 t 3 = t 6 = = t 5 = CPU 2 t 2 = t 7 =... CPU 3 t 1 = t 4 =... 02 4 13 24 33 CPU 1 t 3 = t 6 = = t 7 =... CPU 2 t 2. = t 5 =... CPU 3 t 1 = t 4 =... Úvod do umělé inteligence 4/12 22 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. stavy: nezařazené úlohy*běžící úlohy*čas ukončení např.: [WaitingT1/D1,WaitingT2/D2,...]*[Task1/F1,Task2/F2,Task3/F3]*FinTime běžící úlohy udržujeme setříděné F1 F2 F3 Úvod do umělé inteligence 4/12 23 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. stavy: nezařazené úlohy*běžící úlohy*čas ukončení např.: [WaitingT1/D1,WaitingT2/D2,...]*[Task1/F1,Task2/F2,Task3/F3]*FinTime běžící úlohy udržujeme setříděné F1 F2 F3 přechodová funkce move(+uzel, -NaslUzel, -Cena): Úvod do umělé inteligence 4/12 23 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. stavy: nezařazené úlohy*běžící úlohy*čas ukončení např.: [WaitingT1/D1,WaitingT2/D2,...]*[Task1/F1,Task2/F2,Task3/F3]*FinTime běžící úlohy udržujeme setříděné F1 F2 F3 přechodová funkce move(+uzel, -NaslUzel, -Cena): move(tasks1 [ /F Active1] Fin1, Tasks2 Active2 Fin2, Cost) :- del1(task/d,tasks1,tasks2), \+ (member(t/,tasks2),before(t,task)), % kontrola predence v čekajících \+ (member(t1/f1,active1),f<f1,before(t1,task)), % a v zařazených úlohách Time is F+D, insert(task/time,active1,active2,fin1,fin2), Cost is Fin2 Fin1. move(tasks [ /F Active1] Fin,Tasks Active2 Fin,0) :- insertidle(f,active1,active2). before(t1,t2) :- precedence(t1,t2). before(t1,t2) :- precedence(t,t2),before(t1,t). insert(s/a,[t/b L],[S/A,T/B L],F,F) :- A=<B,!. insert(s/a,[t/b L],[T/B L1],F1,F2) :- insert(s/a,l,l1,f1,f2). insert(s/a,[],[s/a],,a). insertidle(a,[t/b L],[idle/B,T/B L]) :- A<B,!. insertidle(a,[t/b L],[T/B L1]) :- insertidle(a,l,l1). goal([] ). Úvod do umělé inteligence 4/12 23 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. stavy: nezařazené úlohy*běžící úlohy*čas ukončení např.: [WaitingT1/D1,WaitingT2/D2,...]*[Task1/F1,Task2/F2,Task3/F3]*FinTime běžící úlohy udržujeme setříděné F1 F2 F3 přechodová funkce move(+uzel, -NaslUzel, -Cena): move(tasks1 [ /F Active1] Fin1, Tasks2 Active2 Fin2, Cost) :- del1(task/d,tasks1,tasks2), \+ (member(t/,tasks2),before(t,task)), % kontrola predence v čekajících \+ (member(t1/f1,active1),f<f1,before(t1,task)), % a v zařazených úlohách Time is F+D, insert(task/time,active1,active2,fin1,fin2), Cost is Fin2 Fin1. move(tasks [ /F Active1] Fin,Tasks Active2 Fin,0) :- insertidle(f,active1,active2). before(t1,t2) :- precedence(t1,t2). before(t1,t2) :- precedence(t,t2),before(t1,t). insert(s/a,[t/b L],[S/A,T/B L],F,F) :- A=<B,!. insert(s/a,[t/b L],[T/B L1],F1,F2) :- insert(s/a,l,l1,f1,f2). insert(s/a,[],[s/a],,a). insertidle(a,[t/b L],[idle/B,T/B L]) :- A<B,!. insertidle(a,[t/b L],[T/B L1]) :- insertidle(a,l,l1). goal([] ). before( +Task1, +Task2) tranzitivní obal relace precedence Úvod do umělé inteligence 4/12 23 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. počáteční uzel: start([t1/4, t2/2, t3/2, t4/20, t5/20, t6/11, t7/11]*[idle/0, idle/0, idle/0]*0). Úvod do umělé inteligence 4/12 24 / 25

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. počáteční uzel: start([t1/4, t2/2, t3/2, t4/20, t5/20, t6/11, t7/11]*[idle/0, idle/0, idle/0]*0). heuristika optimální (nedosažitelný) čas: i Finall = D i + j F j m skutečný čas výpočtu: Fin = max(f j ) heuristická funkce h: Finall Fin, H = když Finall > Fin 0, jinak Úvod do umělé inteligence 4/12 24 / 25 h(tasks Processors Fin, H) :- totaltime(tasks, Tottime), sumnum(processors, Ftime, N), Finall is (Tottime + Ftime)/N, (Finall > Fin,!, H is Finall Fin ; H = 0). totaltime([], 0). totaltime([ /D Tasks], T) :- totaltime(tasks, T1), T is T1 + D. sumnum([], 0, 0). sumnum([ /T Procs], FT, N) :- sumnum(procs, FT1, N1), N is N1 + 1, FT is FT1 + T. precedence(t1, t4). precedence(t1, t5)....

Jak najít dobrou heuristiku? Příklad rozvrh práce procesorů Příklad rozvrh práce procesorů pokrač. :- start(start), write( Pocatecni stav: ), write(start), nl, bestsearch(start, Solution), write( Nalezene reseni: ), nl, reverse(solution,rsolution), writelist(rsolution). Pocatecni stav: [t1/4,t2/2,t3/2,t4/20,t5/20,t6/11,t7/11]*[idle/0,idle/0,idle/0]*0 Nalezene reseni: 1: [t1/4,t2/2,t3/2,t4/20,t5/20,t6/11,t7/11]*[idle/0,idle/0,idle/0]*0 2: [t1/4,t2/2,t4/20,t5/20,t6/11,t7/11]*[idle/0,idle/0,t3/2]*2 3: [t1/4,t4/20,t5/20,t6/11,t7/11]*[idle/0,t2/2,t3/2]*2 4: [t4/20,t5/20,t6/11,t7/11]*[t2/2,t3/2,t1/4]*4 5: [t4/20,t5/20,t6/11]*[t3/2,t1/4,t7/13]*13 6: [t4/20,t5/20,t6/11]*[idle/4,t1/4,t7/13]*13 7: [t5/20,t6/11]*[t1/4,t7/13,t4/24]*24 8: [t6/11]*[t7/13,t5/24,t4/24]*24 9: []*[t6/24,t5/24,t4/24]*24 Úvod do umělé inteligence 4/12 25 / 25