Rozwiązywanie problemów przez przeszukiwanie (4g) Wykład 3 i...

62
Rozwiązywanie problemów przez przeszukiwanie (4g) Wykł ad 3 i 4 Rozwiązywanie problemów przez przeszukiwanie w oparciu o: S. Russel, P. Norvig. Artificial Intelligence. A Modern Approach P. Kobylański Wprowadzenie do Sztucznej Inteligencji 81 / 198

Transcript of Rozwiązywanie problemów przez przeszukiwanie (4g) Wykład 3 i...

Rozwiązywanie problemów przez przeszukiwanie (4g)

Wykład 3 i 4Rozwiązywanie problemów przez przeszukiwanie

w oparciu o: S. Russel, P. Norvig. Artificial Intelligence. A Modern Approach

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 81 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

agenci rozwiązujący problemyprzykłady problemówposzukiwanie rozwiązaniastrategie przeszukiwania bez wiedzyheurystyczne strategie przeszukiwaniaalgorytm A*funkcje heurystyczne

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 82 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Agenci rozwiązujący problemy

schemat formułowanie – poszukiwanie – wykonaniew fazie formułowania zostaje sformułowany cel (goal) oraz na jegopodstawie zostaje sformułowany problemw fazie poszukiwania agent poszukuje rozwiązanie problemu będąceciągiem akcji do wykonaniaw fazie wykonania agent wykonuje akcje z ciągu akcji będącychrozwiązaniem problemu

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 83 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Agenci rozwiązujący problemy

function SIMPLE-PROBLEM-SOLVING-AGENT(percept) returns an actionpersistent

seq, an action sequence, initially emptystate, some description of the current world stategoal , a goal, initially nullproblem, a problem formulation

state UPDATE-STATE(state, percept)if seq is empty then

goal FORMULATE-GOAL(state)problem FORMULATE-PROBLEM(state, goal)seq SEARCH(problem)if seq = failure then return a null action

action FIRST(seq)seq REST(seq)return action

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 84 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Agenci rozwiązujący problemy

Problem może być sformułowany przez następujące jego składowe:Stan początkowy.Opis dostępnych dla agenta akcji. Dla danego stanu s, ACTIONS(s)dostarcza zbiór akcji jakie mogą być wykonane w stanie s.Model przejść opisujący co każda akcja robi. Funkcja RESULT(s, a)zwraca stan będący wynikiem wykonania akcji a w stanie s.Przestrzenią stanów jest graf o węzłach będących stanami i łukachodpowiadającym możliwym przejściom.Test celu, który jest warunkiem sprawdzającym czy w danym stanieosiągnięto cel. Może on być zadany albo jako zbiór stanów albo jakopredykat.Koszt ścieżki jest funkcją przypisującą każdej ścieżce liczbę. Kosztpowinien odpowiadać mierze efektywności jaką uznaje agent. Kosztkroku c(s, a, s 0) � 0, to koszt wykonania akcji a w stanie s iosiągnięcie stanu s 0 = RESULT(s, a).

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 85 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: świat odkurzacza

Stany: Stany określone są położeniem agenta i położeniem brudu.Agent może być w jednym z dwóch miejsc i każde z nich możebyć brudne lub nie. Zatem jest 2 ⇥ 22 = 8 możliwych stanów. Więksześrodowisko z n miejscami ma n · 2n stanów.Stan początkowy: Każdy stan może być stanem początkowym.Akcje: W każdym stanie można wykonać trzy akcje: Left,Right, Suck .Model przejść: Pełna przestrzeń stanów przedstawiona jest nanastępnej stronie.Test celu: Sprawdza czy we wszystkich miejscach jest czysto.Koszt ścieżki: Każdy koszt kroku równy 1, zatem koszt ścieżki jestrówny licznie kroków na ścieżce.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 86 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: świat odkurzacza

R

L

S S

S S

R

L

R

L

R

L

S

SS

S

L

L

LL R

R

R

R

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 87 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: 8-puzzle

2

Start State Goal State

1

3 4

6 7

5

1

2

3

4

6

7

8

5

8

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 88 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: 8-puzzle

Stan: Stan opisany jest położeniem każdej z ośmiu płytek i jednegopustego miejsca w kwadracie o dziewięciu polach.Stan początkowy: Każdy stan może być przyjęty za początkowy.Zauważ, że każdy zadany cel może być osiągnięty z dokładnie połowymożliwych stanów.Akcje: W najprostszym sformułowaniu rozpatruje się cztery akcjeprzemieszczające puste pole w jednym z czterech kierunków:Left,Right,Up,Down. Różne podzbiory tych akcji są dopuszczalne wzależności od położenia pustego miejsca.Model przejścia: W wyniku wykonania akcji puste miejsce iodpowiednia sąsiednia płytka z liczbą zamieniają się miejscami.Test celu: Sprawdza czy osiągnięto konfigurację końcową. Możliwesą inne inne konfiguracje końcowe.Koszt ścieżki: Każdy koszt kroku równy 1, zatem koszt ścieżki jestrówny liczbie kroków na ścieżce.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 89 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: problem 8 hetmanów

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 90 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: problem 8 hetmanów

Stany: Każde rozmieszczenie od 0 do 8 hetmanów na szachownicyjest stanem.Stan początkowy: Pusta szachownica.Akcja: Dostawienie jednego hetmana na puste pole szachownicy.Model przejścia: Zwraca szachownicę z dostawionym jednymhetmanem.Test celu: 8 hetmanów ustawionych na planszy, żaden nie jestatakowany.

W powyższym sformułowaniu jest 64 · 63 · · · · · 57 ⇡ 1.8 ⇥ 1014 stanów.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 91 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: problem 8 hetmanów

Stany: Każde rozmieszczenie n hetmanów (0 n 8), po jednym wn skrajnie lewych kolumnach.Stan początkowy: Pusta szachownica.Akcja: Dostawienie jednego hetmana w skrajnie lewej pustej kolumnie,na takiej pozycji, która nie jest bita przez żadnego z hetmanów nalewo od dostawianego hetmana.Model przejścia: Zwraca szachownicę z dostawionym jednymhetmanem.Test celu: 8 hetmanów ustawionych na planszy, żaden nie jestatakowany.

W powyższym sformułowaniu jest tylko 2057 stanów.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 92 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Przykłady problemów: problemy rzeczywiste

wyznaczanie traswyznaczanie objazdów (tras będących cyklem)problem komiwojażeraprojektowanie VLSInawigacja robotówautomatyczny montaż podzespołów

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 93 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania

Dopuszczalne ciągi akcji rozpoczynające się w stanie początkowymtworzą drzewo poszukiwań.Węzły w drzewie poszukiwań odpowiadają stanom a rozwidleniaodpowiadają akcjom.Rozszerzenie (expanding) stanu, polega na zastosowaniu do niegowszystkich dopuszczalnych akcji, co generuje nowy zbiór stanów.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 94 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: przegląd drzewa

function TREE-SEARCH(problem) returns a solution, or failureinitialize the frontier using the initial state of problemloop do

if the frontier is empty then return failurechoose a leaf node and remove it from the frontierif the node contains a goal state then return the corresponding solutionexpand the chosen node, adding the resulting nodes to the frontier

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 95 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: przegląd grafu

function GRAPH-SEARCH(problem) returns a solution, or failureinitialize the frontier using the initial state of probleminitialize the explored set to be emptyloop do

if the frontier is empty then return failurechoose a leaf node and remove it from the frontierif the node contains a goal state then return the corresponding solutionadd the node to the explored setexpand the chosen node, adding the resulting nodes to the frontier

only if not in the frontier or explored set

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 96 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: infrastruktura dla algorytmu poszukiwania

Dla każdego węzła n w drzewie, mamy strukturę zawierającą następująceskładowe:

n.STATE: stan z przestrzeni stanów odpowiadający węzłowi;n.PARENT: węzeł w drzewie z którego wygenerowano ten węzeł;n.ACTION: akcja jaką zastosowano u rodzica aby wygenerować tenwęzeł;n.PATH-COST: koszt, oznaczany tradycyjnie przez g(n), ścieżki odstanu początkowego do węzła, zgodnie ze wskaźnikami na rodziców.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 97 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: infrastruktura dla algorytmu poszukiwania

function CHILD-NODE(problem, parent, action) returns a nodereturn a node with

STATE = problem.RESULT(parent.STATE, action),PARENT = parent, ACTION = action,PATH-COST = parent.PATH-COST + problem.STEP-COST(parent.STATE, action)

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 98 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: infrastruktura dla algorytmu poszukiwania

Granica (frontier) będzie przechowywana w strukturze kolejki (queue) znastępującymi operacjami:

EMPTY?(queue) zwraca true tylko wtedy gdy nie ma więcejelementów w kolejce.POP(queue) usuwa element z kolejki i zwraca go.INSERT(element, queue) wstawia element i zwracaotrzymaną nową kolejkę.

Możliwe są następujące kolejki:FIFO usuwa najstarszy element w kolejce;LIFO usuwa najnowszy element w kolejce (nazywa się też stosem);kolejka priorytetowa usuwa element o najwyższym priorytecie.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 99 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: infrastruktura dla algorytmu poszukiwania

1

23

45

6

7

81

23

45

6

7

8

Node

STATE

PARENT

ACTION = RightPATH-COST = 6

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 100 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: ocena algorytmu poszukiwania

Zupełność: Czy algorytm gwarantuje znalezienie rozwiązania gdy onoistnieje?Optymalność: Czy algorytm znajduje rozwiązanie o najmniejszymkoszcie ścieżki?Złożoność czasowa: Jak długo trwa poszukiwanie rozwiązania?Złożoność pamięciowa: Ile pamięci potrzeba na wykonanieposzukiwania?

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 101 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Poszukiwanie rozwiązania: miary wydajności

rozmiar przestrzeni stanów |V |+ |E |współczynnik rozgałęzienia b równy maksymalnej liczbie następnikówdowolnego węzłagłębokość równa liczbie kroków od korzenia do danego węzła

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 102 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: przeszukiwanie wszerz

function BREADTH-FIRST-SEARCH(problem) returns a solution, or failurenode a node with STATE = problem.INITIAL-STATE, PATH-COST = 0if problem.GOAL-TEST(node.STATE) then return SOLUTION(node)frontier a FIFO queue with node as the only elementexplored an empty setloop do

if EMPTY?(frontier) then return failurenode POP(frontier) /* choose the shallowest node in frontier */add node.STATE to exploredfor each action in problem.ACTIONS(node.STATE) do

child CHILD-NODE(problem, node, action)if child .STATE is not in explored or frontier then

if problem.GOAL-TEST(child .STATE) then return SOLUTION(child)frontier INSERT(child , frontier)

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 103 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: przeszukiwanie wszerz

Głębokość Węzły Czas Pamięć2 110 0.11 milisekund 107 kilobytes4 11110 11 milisekund 10.6 megabytes6 106 1.1 sekund 1 gigabyte8 108 2 minuty 103 gigabytes

10 1010 3 godziny 10 terabytes12 1012 12 dni 1 petabytes14 1014 3.5 roku 99 petabytes16 1016 350 lat 10 exabytes

Przy założeniu, że współczynnik rozgałęzienia b = 10; 1 milionwęzłów/sekundę; 1000 bajtów/węzeł.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 104 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: przeszukiwanie z jednolitym kosztem

function UNIFORM-COST-SEARCH(problem) returns a solution, or failurenode a node with STATE = problem.INITIAL-STATE, PATH-COST = 0if problem.GOAL-TEST(node.STATE) then return SOLUTION(node)frontier a priority queue ordered by PATH-COST, with node as the only elementexplored an empty setloop do

if EMPTY?(frontier) then return failurenode POP(frontier) /* choose the lowest-cost node in frontier */if problem.GOAL-TEST(node.STATE) then return SOLUTION(node)add node.STATE to exploredfor each action in problem.ACTIONS(node.STATE) do

child CHILD-NODE(problem, node, action)if child .STATE is not in explored or frontier then

frontier INSERT(child , frontier)else if child .STATE is in frontier with higher PATH-COST then

replace that frontier node with child

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 105 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: przeszukiwanie wgłąb

function DEPTH-FIRST-SEARCH(problem) returns a solution, or failurenode a node with STATE = problem.INITIAL-STATE, PATH-COST = 0if problem.GOAL-TEST(node.STATE) then return SOLUTION(node)frontier a LIFO queue with node as the only elementexplored an empty setloop do

if EMPTY?(frontier) then return failurenode POP(frontier) /* choose the deepest node in frontier */add node.STATE to exploredfor each action in problem.ACTIONS(node.STATE) do

child CHILD-NODE(problem, node, action)if child .STATE is not in explored or frontier then

if problem.GOAL-TEST(child .STATE) then return SOLUTION(child)frontier INSERT(child , frontier)

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 106 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: ograniczone przeszukiwanie wgłąb

function DEPTH-LIMITED-SEARCH(problem, limit) returns a solution, or failure/cutoffreturn RECURSIVE-DLS(MAKE-NODE(problem.INITIAL-STATE), problem, limit)

function RECURSIVE-DLS(node, problem, limit) returns a solution, or failure/cutoffif problem.GOAL-TEST(node.STATE) then return SOLUTION(node)else if limit = 0 then return cutoffelse

cuto↵ _occured? falsefor each action in problem.ACTIONS(node.STATE) do

child CHILD-NODE(problem, node, action)result RECURSIVE-DLS(child , problem, limit � 1)if result = cuto↵ then cuto↵ _occured? trueelse if result 6= failure then return result

if cuto↵ _occured? then return cuto↵ else return failure

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 107 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: iteratywne ograniczone przeszukiwanie wgłąb

function ITERATIVE-DEEPENING-SEARCH(problem) returns a solution, or failurefor depth = 0 to 1 do

result DEPTH-LIMITED-SEARCH(problem, depth)if result 6= cuto↵ then return result

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 108 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: przeszukiwanie dwukierunkowe

GoalStart

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 109 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Strategie poszukiwania bez wiedzy: porównanie strategii

Kryterium BFS UCS DFS DLS IDS BI-DIRZupełna? tak? tak? nie nie tak tak?Czas O(bd) O(b1+bC⇤/"c) O(bm) O(bl) O(bd) O(bd/2)Pamięć O(bd) O(b1+bC⇤/"c) O(bm) O(bl) O(bd) O(bd/2)Optymalna? tak? tak nie nie tak? tak?

Gdzie b jest współczynnikiem rozgałęzienia; d jest głębokością najpłytszegorozwiązania; m jest maksymalną głębokością drzewa poszukiwania; l jestograniczeniem głębokości; " jest dolnym ograniczeniem kosztu kroku; C ⇤

jest kosztem optymalnego rozwiązania.Znak zapytania oznacza, że strategia ma tę własność ale przy pewnychdodatkowych założeniach.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 110 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: najpierw najlepszy

strategia najpierw najlepszy jest ogólnym podejściem doprzeszukiwaniajest przykładem algorytmu TREE-SEARCH albo GRAPH-SEARCH, wktórym węzeł do rozszerzenia jest wybierany na podstawie funkcjioceny (evaluation function) f (n)

funkcja f (n) estymuje kosztnależy zastąpić w algorytmie UNIFORM-COST-SEARCH funkcję g(n)funkcją f (n)

większość strategii najpierw najlepszy używa funkcję heurystyczną:

h(n) = estymacja kosztu najtańszej ścieżki od stanu w węźle n do celu

funkcja heurystyczna zawiera dodatkową wiedzę o problemiewykorzystywaną w algorytmie przeszukiwania

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 111 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: zachłannie najpierw najlepszy

strategia zachłanna najpierw najlepszy stara się rozszerzać węzeł,który jest najbliższy celowiza funkcję oceny przyjmuje funkcję heurystyczną:

f (n) = h(n)

ExampleZgodnie ze strategią zachłanną, algorytm wyznaczający drogę międzymiastami może w pierwszej kolejności kierować się do miast, które są w liniiprostej najbliżej celu (funkcja hSLD STRAIGHT-LINE DISTANE)

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 112 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A*

szczególną formą strategii najpierw najlepszy jest algorytm A*w algorytmie A* ocenia się węzeł za pomocą następującej funkcji:

f (n) = g(n) + h(n)

stosowana funkcja f (n) jest oceną najtańszego rozwiązaniaprzechodzącego przez węzeł nalgorytm A* różni się od algorytmu przeszukiwania z jednolitymkosztem (UNIFORM-COST-SEARCH) jedynie tym, że zamiast funkcjig(n) używa funkcję g(n) + h(n)

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 113 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – przykład

Giurgiu

UrziceniHirsova

Eforie

Neamt

Oradea

Zerind

Arad

Timisoara

Lugoj

Mehadia

Drobeta

Craiova

Sibiu Fagaras

Pitesti

Vaslui

Iasi

Rimnicu Vilcea

Bucharest

71

75

118

111

70

75

120

151

140

99

80

97

101

211

138

146 85

90

98

142

92

87

86

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 114 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – przykład

(a) The initial state

(b) After expanding Arad

(c) After expanding Sibiu

Arad

Sibiu Timisoara

447=118+329

Zerind

449=75+374393=140+253

Arad

366=0+366

(d) After expanding Rimnicu Vilcea

(e) After expanding Fagaras

(f) After expanding Pitesti

Zerind

Arad

Sibiu

Arad

Timisoara

Rimnicu VilceaFagaras Oradea

447=118+329 449=75+374

646=280+366 413=220+193415=239+176 671=291+380

Zerind

Arad

Sibiu Timisoara

447=118+329 449=75+374

Rimnicu Vilcea

Craiova Pitesti Sibiu

526=366+160 553=300+253417=317+100

Zerind

Arad

Sibiu

Arad

Timisoara

Sibiu Bucharest

Fagaras Oradea

Craiova Pitesti Sibiu

447=118+329 449=75+374

646=280+366

591=338+253 450=450+0 526=366+160 553=300+253417=317+100

671=291+380

Zerind

Arad

Sibiu

Arad

Timisoara

Sibiu Bucharest

Oradea

Craiova Pitesti Sibiu

Bucharest Craiova Rimnicu Vilcea

418=418+0

447=118+329 449=75+374

646=280+366

591=338+253 450=450+0 526=366+160 553=300+253

615=455+160 607=414+193

671=291+380

Rimnicu Vilcea

Fagaras Rimnicu Vilcea

Arad Fagaras Oradea

646=280+366 415=239+176 671=291+380

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 115 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – warunki na optymalność

dopuszczalność h(n) jest dopuszczalna jeśli nigdy nie przeszacowuje kosztuosiągnięcia celu

monotoniczność h(n) jest monotoniczna jeśli dla każdego węzła n i każdegojego następnika n0 wygenerowanego akcją a zachodzi:

h(n) c(n, a, n0) + h(n0)

TheoremKażda heurystyczna funkcja monotoniczna jest dopuszczalna.

ExampleFunkcja hSLD jest monotoniczna.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 116 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – optymalność

TheoremWersja A* w formie przeglądu drzewa (TREE-SEARCH) jest optymalnajeśli h(n) jest dopuszczalna.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 117 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – optymalność

TheoremWersja A* w formie przeglądu grafu (GRAPH-SEARCH) jest optymalnajeśli h(n) jest monotoniczna.

Dowód.

1 Jeśli h(n) jest monotoniczna, to wartości f (n) na dowolnej ścieżce sąniemalejące:

f (n0) = g(n0) + h(n0) = g(n) + c(n, a, n0) + h(n0) � g(n) + h(n) = f (n)

2 Jeśli A* wybiera węzeł n do rozszerzenia, to optymalna ścieżka do n zostałaznaleziona. W przeciwnym przypadku w granicy byłby inny węzeł n0 naoptymalnej ścieżce od węzła początkowego do n, ale z nierosnących wartościf na ścieżce, węzeł n0 powinien być wybrany wcześniej.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 118 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – optymalność

Wewnątrz konturu dla wartości V znajdują się węzły o ocenie f (n) V .

a) gdy h(n) = 0 b) gdy h(n) dokładniej oszacowuje

CEL CEL

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 119 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – przykład

Dla heurystycznej funkcji hSLD :O

Z

A

T

L

M

D

C

R

F

P

G

BU

H

E

V

I

N

380

400

420

S

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 120 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – optymalność

Niech C ⇤ będzie kosztem ścieżki optymalnego rozwiązania, wówczasA* rozszerza wszystkie węzły, dla których f (n) < C ⇤

A* może rozszerzyć niektóre węzły, dla których f (n) = C ⇤

A* nie rozszerza żadnego węzła, dla którego f (n) > C ⇤

żaden inny algorytm znajdujący optymalne rozwiązanie nie gwarantujerozszerzenia mniejszej liczby węzłów niż A*

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 121 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: A* – złożoność obliczeniowa

Załóżmy, że koszt kroku jest stały.niech � = h⇤ � h będzie błędem bezwzględnym, gdzie h⇤ jestrzeczywistym kosztem przejścia od korzenia do celuniech " = (h⇤ � h)/h⇤ będzie błędem względnymanaliza złożoności bardzo mocno zależy od przyjętej przestrzeni stanówzałóżmy, że jest jeden stan będący celem a akcje są odwracalne (np.układanka 8-puzzle)złożoność czasowa A* jest rzędu O(b�)

dla stałego kosztu kroku i głębokości rozwiązania d jest rzędu O(b"d)

bardzo istotna jest również złożoność pamięciowa ponieważ wszystkiealgorytmy przeszukujące grafy przechowują w pamięci wszystkiewygenerowane węzły

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 122 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: IDA*

najprostszą redukcją złożoności pamięciowej algorytmu A* jestzaadaptowanie w nim idei iteratywnego ograniczonego przeszukiwaniaalgorytm IDA* używa dla odcięcia f -wartości g + h zamiast głębokościIDA* jest praktyczny dla wielu problemów z jednostkowym kosztemkroku i unika pamiętania posortowanej kolejki węzłów

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 123 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: heurystyczna z ograniczoną pamięcią

function RECURSIVE-BEST-FIRST-SEARCH(problem) returns a solution, or failurereturn RBFS(problem,MAKE-NODE(problem.INITIAL-STATE),1)

function RBFS(problem, node, f _limit) returns a solution, or failure and a new f -cost limitif problem.GOAL-TEST(node.STATE) then return SOLUTION(node)successors []for each action in problem.ACTIONS(node.STATE) do

add CHILD-NODE(problem, node, action) into successorsif successors is empty then return failure,1for each s in successors do /* update f with value from previous search, if any */

s.f max(s.g + s.h, node.f )loop do

best the lowest f -value node in successorsif best.f > f _limit then return failure, best.falternative the second-lowest f -value among successorsresult, best.f RBFS(problem, best,min(f _limit, alternative))if result 6= failure then return result

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 124 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: heurystyczna z ograniczoną pamięcią – przykład

Zerind

Arad

Sibiu

Arad Fagaras Oradea

Craiova Sibiu

Bucharest Craiova Rimnicu Vilcea

Zerind

Arad

Sibiu

Arad

Sibiu Bucharest

Rimnicu VilceaOradea

Zerind

Arad

Sibiu

Arad

Timisoara

Timisoara

Timisoara

Fagaras Oradea Rimnicu Vilcea

Craiova Pitesti Sibiu

646 415 671

526 553

646 671

450591

646 671

526 553

418 615 607

447 449

447

447 449

449

366

393

366

393

413

413 417415

366

393

415 450417

Rimnicu Vilcea

Fagaras

447

415

447

447

417

(a) After expanding Arad, Sibiu, and Rimnicu Vilcea

(c) After switching back to Rimnicu Vilcea and expanding Pitesti

(b) After unwinding back to Sibiu and expanding Fagaras

447

447

417

417

Pitesti

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 125 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Heurystyczne strategie przeszukiwania: heurystyczna z ograniczoną pamięcią –

optymalność

TheoremJeśli h(n) jest dopuszczalna, to RBFS jest algorytmem optymalnym.

złożoność pamięciowa RBFS jest liniowa jest w stosunku do głębokościnajgłębszego optymalnego rozwiązaniaRBFS, podobnie jak IDA*, wykorzystuje za mało pamięci:

między iteracjami IDA* przechowuje tylko jedną wartość: limit f -kosztumiędzy iteracjami RBFS przechowuję więcej informacji ale używa tylkoliniowo dużej pamięci, nawet jeśli dostępne jest jej więcej

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 126 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: układanka 8-puzzle

Średnia długość rozwiązania dla losowego przykładu 8-puzzle wynosi22.Współczynnik rozgałęzienia wynosi około 3.Pełne drzewo przeglądu ma około 322 ⇡ 3.1 ⇥ 1010 stanów.Przeszukiwanie grafu zmniejsza tę liczbę około 170000 razy, gdyż jesttylko 9!/2 = 181, 440 różnych osiągalnych stanów.Układanka 15-puzzle ma jednak około 1013 różnych osiągalnychstanów, zatem konieczne jest opracowanie heurystyk.Dwie proste heurystyki opracowane dla 15-puzzle:

h1 liczba płytek nie znajdujących się na swoim docelowym miejscuh2 suma odległości płytek od ich docelowych miejsc (odległośćManhattan)

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 127 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: wpływ heurystyki na działanie

jeśli liczba węzłów generowanych przez A* wynosi N a głębokość d , toefektywny współczynnik rozwidlenia b⇤ jestśrednią liczbą potomków w zrównoważonym drzewie o N + 1 węzłach igłębokości d :

N + 1 = 1 + b⇤ + (b⇤)2 + · · ·+ (b⇤)d

dobrze zaprojektowana heurystyka ma wartość b⇤ bliską 1ocenę h1 i h2 przeprowadzono eksperymentalnie rozwiązując 1200przykładów po 100 dla każdej z długości rozwiązania 2, 4, . . . , 24

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 128 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: wpływ heurystyki na działanie

Tabela : Średnia ze 100 przykładów 8-puzzle dla każdej z długości rozwiązania d

Liczba generowanych węzłów Współczynnik efektywnego rozgałęzieniad IDS A⇤(h

1

) A⇤(h2

) IDS A⇤(h1

) A⇤(h2

)

2 10 6 6 2.45 1.79 1.794 112 13 12 2.87 1.48 1.456 680 29 18 2.73 1.34 1.308 6384 39 25 2.80 1.33 1.24

10 47127 93 39 2.79 1.38 1.2212 3644035 227 73 2.78 1.42 1.2414 – 539 113 – 1.44 1.2316 – 1301 211 – 1.45 1.2518 – 3056 363 – 1.46 1.2620 – 7276 676 – 1.47 1.2722 – 18094 1219 – 1.48 1.2824 – 39135 1641 – 1.48 1.26

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 129 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: wpływ heurystyki na działanie

dla d = 12 algorytm A* z heurystyką h2 jest 50000 razy bardziejefektywny od algorytmu IDS

heurystyka h2 dominuje heurystykę h1, gdyż dla dowolnego nh2(n) � h1(n)

heurystyka h2 jest lepsza od heurystyki h1

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 130 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: tworzenie dopuszczalnych heurystyk z relaksacji problemów

relaksacją problemu nazywamy takie przeformułowanie problemu, wktórym osłabiono warunki

Example (Relaksacje układanki 8-puzzle)

Z reguły opisującej akcję:

Płytka może być przesunięta z kwadratu A na kwadrat B jeśli A poziomo lubpionowo sąsiaduje z B i B jest pusty.

możemy wygenerować trzy relaksacje przez usunięcie jednego lub obu warunków:1

Płytka może być przesunięta z kwadratu A na kwadrat B jeśli A sąsiaduje z B.

2

Płytka może być przesunięta z kwadratu A na kwadrat B jeśli B jest pusty.

3

Płytka może być przesunięta z kwadratu A na kwadrat B.

Z relaksacji (1) można wyprowadzić h2, z (2) możnawyprowadzić heurystykę Gaschinga, natomiast z (3) możnawyprowadzić h1.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 131 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: tworzenie dopuszczalnych heurystyk z relaksacji problemów

załóżmy, że mamy kolekcję dopuszczalnych heurystyk h1, h2, . . . , hm iżadna z nich nie dominuje żadnej innejponiższa heurystyka jest dopuszczalna, monotoniczna i dominuje każdąze swoich składowych:

h(n) = max{h1(n), h2(n), . . . , hm(n)}

program ABSOLVER (Prieditis, 1993) generuje automatycznieheurystyki na podstawie relaksacji problemu i innych technikABSOLVER wygenerował nową heurystykę dla 8-puzzle, która byłalepsza od znanych wcześniej oraz wygenerowałpierwszą użyteczną heurystykę dla kostki Rubika

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 132 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: tworzenie dopuszczalnych heurystyk z podproblemów

Przykład podproblemu w układance 8-puzzle:

Start State Goal State

1

2

3

4

6

8

5

21

3 6

7 8

54

Należy ułożyć liczby 1, 2, 3, 4 nie przejmując się położeniem innych liczb.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 133 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: tworzenie dopuszczalnych heurystyk z podproblemów

Koszt rozwiązania podproblemu jest dolnym oszacowaniemrozwiązania pełnego problemu.Koszt rozwiązania podproblemu można traktować jakofunkcję heurystyczną h(n).Można rozpatrywać różne podproblemy odpowiadające wzorcom1 � 2 � 3 � 4, 2 � 4 � 6 � 8, 5 � 6 � 7 � 8 i innych.Uzyskane w ten sposób heurystyki można łączyć w jedną istotnielepszą od nich heurystyk.Nie każde oceny z różnych wzorców można dodawać (mogą miećwspólne ruchy).Mówimy, że dwa wzorce są rozłączne jeśli odpowiadają podproblemom,w których porusza się rozłączne zbiory płytek.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 134 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: tworzenie dopuszczalnych heurystyk z podproblemów

Tworzy się bazy rozłącznych wzorców. Oceny z takich wzorcówmożna dodawać nie naruszając dopuszczalności heurystyki.Stosując bazę rozłącznych wzorców można rozwiązać 15-puzzle wczasie kilku milisekund – liczba generowanych węzłów jest zmniejszona10000 krotnie w stosunku do odległości Manhattan.Dla układanki 24-puzzle przyspieszenie jest milionkrotne.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 135 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Funkcje heurystyczne: uczenie heurystyk

niech x1(n) i x2(n) będą dwiema miarami dla węzła n, np. x1(n) jestliczbą płytek nie na miejscu a x2(n) liczbą par sąsiadujących płytek,które nie sąsiadują w stanie będącym celemz ocen x1(n) i x2(n) można stworzyć liniową kombinację:

h(n) = c1 · x1(n) + c2 · x2(n)

współczynniki c1 i c2 są korygowane aby uzyskać jaknajlepszą ocenę heurystycznąpowyższa heurystyka spełnia warunek h(n) = 0 dla węzłaodpowiadającego stanowi końcowemupowyższa heurystyka nie musi być dopuszczalna ani monotoniczna

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 136 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Dodatek: kody źródłowe w Prologu

:- module(trans, [start/1, action/3, goal/1]).

start(s0).

action(s0, a1, s1).

action(s1, a2, s2).

action(s2, a3, s3).

action(a3, a4, s0).

action(s1, a5, s4).

action(s4, a6, s5).

action(s2, a7, s5).

goal(s5).

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 137 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Dodatek: kody źródłowe w Prologu

:- module(dfs, [dfs/1]).

dfs(Solution) :-

start(Start),

dfs(Start, [], Solution).

dfs(State, _, []) :-

goal(State).

dfs(State, Explored, [Action | Rest]) :-

action(State, Action, New),

\+ member(New, Explored),

dfs(New, [State | Explored], Rest).

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 138 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Dodatek: kody źródłowe w Prologu

:- module(bfs, [bfs/1]).

bfs(Solution) :-

start(Start),

bfs([(Start, [])], [], Solution).

bfs([(State, Solution) | _], _, Solution) :-

goal(State).

bfs([(State, Path) | Rest], Explored, Solution) :-

findall((New, [Action | Path]),

(action(State, Action, New), \+member(New, Explored)),

Successors),

append(Rest, Successors, Queue),

bfs(Queue, [State | Explored], Solution).

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 139 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Dodatek: kody źródłowe w Prologu

:- module(ids, [ids/1]).

ids(Solution) :-

start(Start),

nat(Limit),

rdls(Start, Limit, [], Solution).

rdls(State, _, _, []) :-

goal(State).

rdls(State, Limit, Explored, [Action | Rest]) :-

Limit > 0,

Limit1 is Limit - 1,

action(State, Action, New),

\+ member(New, Explored),

rdls(New, Limit1, [State | Explored], Rest).

nat(0).

nat(N) :- nat(N1), N is N1+1.

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 140 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Dodatek: kody źródłowe w Prologu

Example (Farmer-wilk-koza-kapusta)start([farmer, wilk, koza, kapusta] - []).

goal([] - _).

action(L1-P1, na_prawy, L2-P2) :- select(farmer, L1, L2), P2 = [farmer | P1],

dopuszczalny(L2).

action(L1-P1, na_lewy, L2-P2) :- select(farmer, P1, P2), L2 = [farmer | L1],

dopuszczalny(P2).

action(L1-P1, na_prawy(X), L3-P2) :- select(farmer, L1, L2), select(X, L2, L3),

P2 = [farmer, X | P1], dopuszczalny(L3).

action(L1-P1, na_lewy(X), L2-P3) :- select(farmer, P1, P2), select(X, P2, P3),

L2 = [farmer, X | L1], dopuszczalny(P3).

dopuszczalny(X) :- \+ (member(koza, X), member(kapusta, X)),

\+ (member(wilk, X), member(koza, X)).

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 141 / 198

Rozwiązywanie problemów przez przeszukiwanie (4g)

Rozwiązywanie problemów przez przeszukiwanie

Dodatek: kody źródłowe w Prologu

Example (cd.)?- time(dfs(X)).

% 276 inferences, 0.000 CPU in 0.000 seconds (94% CPU, 4524590 Lips)

X = [na_prawy(koza), na_lewy, na_prawy(wilk), na_lewy(koza), na_prawy(kapusta),

na_lewy, na_prawy(koza)] .

?- time(bfs(X)).

% 1,485 inferences, 0.001 CPU in 0.001 seconds (94% CPU, 2801887 Lips)

X = [na_prawy(koza), na_lewy, na_prawy(kapusta), na_lewy(koza), na_prawy(wilk),

na_lewy, na_prawy(koza)] .

?- time(ids(X)).

% 2,220 inferences, 0.000 CPU in 0.000 seconds (99% CPU, 4922395 Lips)

X = [na_prawy(koza), na_lewy, na_prawy(wilk), na_lewy(koza), na_prawy(kapusta),

na_lewy, na_prawy(koza)] .

P. Kobylański Wprowadzenie do Sztucznej Inteligencji 142 / 198