©AM
Wprowadzenie do Sztucznej Inteligencji
Wykład 3
Informatyka Studia InŜynierskie
Przeszukiwanie przestrzeni stanów
Przestrzeń stanówjest to czwórka uporządkowana [N, A, S, GD], gdzie:
N jest zbiorem wierzchołków odpowiadających stanom w procesie rozwiązywania problemu
A jest zbiorem krawędzi, odpowiadających krokom w procesie rozwiązywania problemu
S jest niepustym podzbiorem N, zawierającym stany początkowe problemu
GDjest niepustym podzbiorem N, zawierającym stany docelowe problemu.
Stany GD są opisane:
• przez podanie własności stanów występujących w przeszukiwaniu
• przez podanie własności ścieŜki tworzonej podczas przeszukiwania
ŚcieŜką rozwiązania nazywamy ścieŜkę wiodącą przez ten graf z
©AM
Podstawowe problemy teorii przeszukiwania przestrzeni stanów
• Czy metoda gwarantuje znalezienie rozwiązania?
• Czy algorytm zakończy się w kaŜdym przypadku, czy moŜe wpaść w pętlę nieskończoną?
• Czy jeśli rozwiązanie zostanie znalezione, to mamy gwarancję, Ŝe będzie to rozwiązanie optymalne?
• Jaka jest czasowa i pamięciowa ("przestrzenna") złoŜoność obliczeniowa procesu przeszukiwania?
• Czy i w jaki sposób moŜna zredukować złoŜoność obliczeniową?
Sformułowanie zadania dla algorytmów przeszukiwania
• Definicja stanu przestrzeni
• Stan początkowy problemu (ang. initial state)
• Zbiór dopuszczalnych operatorów/akcji (ang.
operator/action set) lub funkcja następnika (ang. successor function)
• Zbiór stanów docelowych (ang. goal states) lub funkcja weryfikacji celu (ang. goal test)
• Funkcja kosztu ścieŜki (ang. path cost) - z reguły jest to głębokość przeszukiwania
©AM
Własności przestrzeni stanów w reprezentacji grafowej
• Powtarzające się stany (cykle)
• Identyfikacja typu grafu reprezentującego przestrzeń przeszukiwania: drzewa, acykliczne grafy skierowane (DAG)
• Rozmiar przestrzeni stanów (ograniczanie złoŜoności)
Powtarzające się stany:
efektywność przeszukiwania
A
B
C
D
A
B
C
B
C C C
Przestrzeń stanów Graf przeszukiwania przestrzeni
©AM
Powtarzające się stany: charakterystyka
• Konieczność wykrywania ze względu na efektywność przeszukiwania
• Nieuniknione w niektórych zadaniach (np. z
odwracalnymi operatorami) - warunek zatrzymania
• Uwaga! Kompromis między kosztami
przeszukiwania a kosztami wykrywania powtórzeń stanów
Powtarzające się stany:
metody przeciwdziałania
• Zakaz powrotu do bezpośrednio poprzedzającego stanu
• Wykrywanie cykli w ścieŜce - zakaz generowania jakiegokolwiek stanu poprzedzającego (pośrednio)
• Wykrywanie dowolnego powtarzającego się stanu w całym grafie przeszukiwania (duŜe wymagania pamięciowe!)
©AM
Przykład przeszukiwania przestrzeni stanów:
problem komiwojaŜera
A B
E C
D
75
100 100 50
50 125
75 125 125
100
|ACDBEA| = 450
Przykład przeszukiwania przestrzeni stanów:
problem komiwojaŜera
A
B C D E
C D
E B D E
D
E
A E
D C
E E
C
A A A
175
125 100 75
100
225 250 175
150 225
250 275
300
375
325
425 275
400
475 225
400
525
©AM
Kierunki przeszukiwania przestrzeni stanów
• Przeszukiwanie w przód (ang. forward chaining)
• Przeszukiwanie w tył (ang. backward chaining)
• Przeszukiwanie dwukierunkowe (ang.
bidirectional search)
Przeszukiwanie w przód
Start
Cel
©AM
Przeszukiwanie w tył
Start
Cel
Branching factor - co to takiego?
2 2 2
3
3 3 3 3 3 3
©AM
Kiedy przeszukiwanie w przód?
• Wszystkie lub większość danych zawarta jest w początkowym sformułowaniu problemu - np. interpretacja i analiza duŜych zbiorów danych
• Występuje duŜa liczba potencjalnych celów, ale jest tylko kilka moŜliwości zastosowania faktów i informacji wejściowych dla konkretnej instancji problemu
• Trudno sformułować hipotezę docelową - np. określanie struktury związków chemicznych
Przeszukiwanie w przód wykorzystuje wiedzę i ograniczenia zawarte w danych i opisie stanu początkowego problemu, aby pokierować przeszukiwaniem zgodnie z zasadami opisanymi przez operatory zmiany stanów.
Kiedy przeszukiwanie w tył?
• Cel lub hipoteza jest dana w sformułowaniu problemu albo moŜna ją łatwo sformułować – np. dowodzenie twierdzeń matematycznych, systemy diagnostyczne
• Liczba reguł moŜliwych do zastosowania rośnie szybko i powoduje, Ŝe liczba odwiedzanych stanów jest bardzo duŜa; wczesna sekcja celów moŜe wyeliminować większość gałęzi tak, Ŝe przeszukiwanie będzie bardziej efektywne – np. dowodzenie twierdzeń
• Dane o problemie nie są znane explicite, tylko muszą być pozyskane przez rozwiązującego; przeszukiwanie w tył moŜe pomóc ukierunkować proces pozyskiwania danych - np. diagnostyka medyczna
Przeszukiwanie wstecz wykorzystuje informacje o Ŝądanym celu i kieruje procesem przeszukiwania poprzez dobór odpowiednich operatorów zmiany stanów oraz eliminację pewnych gałęzi z przestrzeni stanów.
©AM
Przeszukiwanie dwukierunkowe
Start
Cel
Przeszukiwanie dwukierunkowe
• Jednoczesne przeszukiwanie w przód i w tył
• Ograniczenie złoŜoności czasowej
• Problem generowania poprzedników stanu
• Problem wielu stanów docelowych (np. stany poprzedzające mata w szachach)
• Efektywna metoda sprawdzania występowania stanu w grafie przeszukiwania przeciwnego kierunku (problem wyminięcia!)
• Dobór odpowiedniej strategii przeszukiwania w kaŜdym kierunku
©AM
Praktyczna realizacja przeszukiwania - mechanizm nawrotów
Start
Cel
Strategie przeszukiwania przestrzeni stanów
• Przeszukiwanie wszerz (ang. breadth-first search)
• Przeszukiwanie w głąb (ang. depth-first search)
• Przeszukiwanie w głąb z nawrotami (ang. depth-first search with backtracking)
• Przeszukiwanie z iteracyjnym pogłębianiem (ang. iterative deepening search)
• Przeszukiwanie metodą jednolitego kosztu (ang. uniform-cost search)
©AM
Algorytm przeszukiwania w głąb
procedure depth_first_search(initial_state) begin
open = [initial_state];
closed = [];
while open ≠ [] do begin
remove the leftmost state from open, call it X;
if X is goal state then return(success);
generate all children of X;
put X on closed;
eliminate any children of X already on either open or closed, as this will cause loops in the search;
put the remaining descendants, in order of discovery, on the LEFT end of open;
end end.
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
nawrót
©AM
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
nawrót
©AM
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
eliminacja powtórzeń
Przeszukiwanie w głąb - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
itd.
Open
Closed
©AM
Algorytm przeszukiwania w głąb (rekurencja)
function depth_first_search(current_state) begin
if current_state is a goal then return(success) else
begin
add current_state to closed;
while current_state has unexamined children do begin
child := next unexamined child of current_state
if child is not a member of closed then {check for loops}
if depth_first_search(child) = success then return(success)
end end;
return(fail) end.
Przeszukiwanie w głąb - przykład
12 8
1 6 7
3 4 5
2 8 1 6 7 3 4 5
2 8 1 7 6
3 4 5
2 8 6 1 7 3 4 5
2 8 1 7 6 3 4 5
2 1 8 7 6 3 4 5
8 2 6 1 7 3 4 5
8 2 1 7 6 3 4 5
2 1 8 7 6 3 4 5 2 8
6 1 7
3 4 5
2 8 7 1 6 3 4 5
8 2 6 1 7 3 4 5
2 6 8 1 7 3 4 5
2 8 6 4 1 7 3 5
2 8 6 7 1
3 4 5 8 2 1 7 6 3 4 5
1 2 8 7 6 3 4 5 2 8 7 1 6
3 4 5
8 3 2 64
8 6 2
3 4
2 6 8 3 4
2 3 6 8 4
2 8 6 43
2 8 6 4 3 5
2 8 6 7 3 4
2 8 6 7 3 4
8 3 2 14
8 1 2
3 4
2 8 7
3 4
2 8 7 1 3 4
1 2 7 8 3 4
1 2 8
3 4 cel
2 18
3 19 28
4 8 20 24 29
5 9 12 15 21 25 30
©AM
Algorytm przeszukiwania wszerz
procedure breadth_first_search(initial_state) begin
open = [initial_state];
closed = [];
while open ≠ [] do begin
remove the leftmost state from open, call it X;
if X is goal state then return(success);
generate all children of X;
put X on closed;
eliminate any children of X already on either open or closed, as this will cause loops in the search;
put the remaining descendants, in order of discovery, on the RIGHT end of open;
end end.
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
Open
Closed
©AM
Przeszukiwanie wszerz - przykład
A
B C D
E F G H I J
K L M N O P Q R
S T U
itd.
Open
Closed
Przeszukiwanie wszerz - przykład
12 8
1 6 7
3 4 5
2 8 1 6 7 3 4 5
2 8 1 7 6
3 4 5
2 8 1 6 7 5 3 4
2 8 6 1 7 3 4 5
2 8 1 7 6 3 4 5
2 8 1 4 7 6 3 5 2
1 8 7 6 3 4 5
2 8 1 6 7 5 3 4
8 2 6 1 7 3 4 5
8 2 1 7 6 3 4 5
2 8 1 4 7 6 3 5 2
1 8 7 6 3 4 5
2 8 1 7 5
3 6 4 2 8
6 1 7
3 4 5
2 8 7 1 6 3 4 5
2 8 1 4 7 6 3 5 2 3
1 8 7 6 4 5
2 8 1 6 7 5 3 4
8 2 6 1 7 3 4 5
2 6 8 1 7 3 4 5
2 8 6 4 1 7 3 5
2 8 6 7 1
3 4 5 8 2 1 7 6 3 4 5
2 1 4 7 6 8 3 5 1 2
8 7 6 3 4 5 2 8 7 1 6
3 4 5
2 8 1 4 7
3 5 6 2 3
1 8 7 6 4 5
2 8 1 7 5 3 6 4 2 1 8 7 5 3 6 4
2 8 1 5 7
3 6 4
2 1 6 7 5 8 3 4
8 3 2 64
8 6 2
3 4
2 6 8 3 4
2 3 6 8 4
2 8 6 43
2 8 6 4 3 5
2 8 6 7 3 4
2 8 6 7 3 4
8 3 2 14
8 1 2
3 4
2 8 7
3 4
2 8 7 1 3 4
1 2 7 8 3 4
1 2 8
3 4 cel
2 3 4
5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33
©AM
Algorytm przeszukiwania z iteracyjnym pogłębianiem (1)
procedure iterative_deepening_search(initial_state) begin
for depth ← 0 to ∞ do begin
if depth_limited_search(initial_state, depth) = success then return(its result);
end;
return(failure);
end.
Algorytm przeszukiwania z iteracyjnym pogłębianiem (2)
function depth_limited_search(current_state, depth) begin
if current_state is a goal then return(success) else
if depth = 0 then return(failure) else
begin
add current_state to closed;
while current_state has unexamined children do begin
child := next unexamined child of current_state
if child is not a member of closed then {check for loops}
if depth_limited_search(child, depth-1) = success then return(success)
end end;
return(failure)
©AM
Iteracyjne pogłębianie - przykład
A depth=0
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
depth=1
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
depth=1
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
depth=1
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
depth=1
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
depth=2
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
K L M N O P Q R
depth=3
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
K L M N O P Q R
depth=3
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
K L M N O P Q R
depth=3
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
K L M N O P Q R
depth=3
Open Closed
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
K L M N O P Q R
depth=3
Open Closed
©AM
Iteracyjne pogłębianie - przykład
A
B C D
E F G H I J
K L M N O P Q R
depth=3
itd.
Open Closed
Algorytm Uniform-cost search
procedure uniform_cost_search(initial_state) begin
open = [initial_state];
closed = [];
while open ≠ [] do begin
remove the first state from open, not already on closed, call it X;
if X is a goal state then return(solution path that led to X);
generate all children of X;
put X on closed;
for each child of X do
assign path cost to the child state;
add the child state to the open;
end;
re-order states on open according to path cost value (lower values first) end
end.
©AM
Algorytm UCS - przykład(1)
A-0
B-5 C-5 D-6
E F G H I J
K L M N O P Q R
S T U
5 5 6 Open
Closed 6 koszt operacji
Algorytm UCS - przykład(2)
A-0
B-5 C-5 D-6
E F G H I J
K L M N O P Q R
S T U
5 5 6 Open
Closed 6 koszt operacji
©AM
Algorytm UCS - przykład(3)
A-0
B-5 C-5 D-6
E-9 F-9 G H I J
K L M N O P Q R
S T U
5 5 6
4 4
Open
Closed 6 koszt operacji
Algorytm UCS - przykład(4)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I J
K L M N O P Q R
S T U
5 5 6
4 4 4 3
Open
Closed 6 koszt operacji
©AM
Algorytm UCS - przykład(5)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K L M N O P Q R
S T U
5 5 6
4 4 4 3 6 7
Open
Closed 6 koszt operacji
Algorytm UCS - przykład(6)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K L M N Q R
S T U
5 5 6
4 4 4 3 6 7
2 3
Open
Closed
O-10 P-11
6 koszt operacji
©AM
Algorytm UCS - przykład(7)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K-15 L-12 M N O-10 P-11 Q R
S T U
5 5 6
4 6
4 4 3 6 7
3 2 3
Open
Closed 6 koszt operacji
Algorytm UCS - przykład(8)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K-15 L-12 M-13 N O-10 P-11 Q R
S T U
5 5 6
4 6
4 4 3 6 7
3 3 4 2 3
Open
Closed 6 koszt operacji
©AM
Algorytm UCS - przykład(9)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K-15 L-12 M-13 N-14 O-10 P-11 Q R
S T U
5 5 6
4 6
4 4 3 6 7
3 3 4 5 2 3
Open
Closed 6 koszt operacji
Algorytm UCS - przykład(10)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K-15 L-12 M-13 N-14 O-10 P-11 Q R
S T U
5 5 6
4 6
4 4 3 6 7
3 3 4 5 2 3
Open
Closed 6 koszt operacji
©AM
Algorytm UCS - przykład(11)
A-0
B-5 C-5 D-6
E-9 F-9 G-9 H-8 I-12 J-13
K-15 L-12 M-13N-14 O-10 P-11 Q R
S T U-12
5 5 6
4 6
4 4 3 6 7
3 3 4 5 2 3 1
Open
Closed
itd.
6 koszt operacji
Algorytm UCS: charakterystyka
Cechy szczególne
• Ocena stanu to koszt dojścia do tego stanu (koszt pokonanej ścieŜki od stanu początkowego) - koszt przejścia z dowolnego stanu do jego stanu potomnego musi być zawsze ≥ 0
• Stanowi uogólnienie algorytmu przeszukiwania wszerz - w algorytmie przesz. wszerz koszt, to głębokość na jakiej leŜy stan
• Optymalny (gwarantuje znalezienie najkrótszego rozwiązania)
Wady
• DuŜe wymagania czasowe i pamięciowe (rosnące wykładniczo!)
!!!
©AM
Porównanie strategii przeszukiwania
Kryterium Wszerz Uniform- cost
W głąb z nawrotami
Iteracyjne pogłębianie
Dwukie- runkowe
( jeśli moŜliwe)
Czas Bd Bd Bn Bd Bd/2
Pamięć Bd Bd Bn Bd Bd/2
Optymalny? Tak Tak Nie Tak Tak
Zupełny? Tak Tak Tak Tak Tak
B - średnia liczba następników kaŜdego stanu (ang. branching factor)
n - maksymalna głębokość przeszukiwania d - głębokość rozwiązania
Kryterium Wszerz Uniform- cost
W głąb z nawrotami
Iteracyjne pogłębianie
Dwukie- runkowe
( jeśli moŜliwe)
Czas Bd Bd Bn Bd Bd/2
Pamięć Bd Bd Bn Bd Bd/2
Optymalny? Tak Tak Nie Tak Tak
Zupełny? Tak Tak Tak Tak Tak
B - średnia liczba następników kaŜdego stanu (ang. branching factor)
n - maksymalna głębokość przeszukiwania d - głębokość rozwiązania
Zasady implementacji algorytmów przeszukiwania przestrzeni stanów
1. Reprezentacja rozwiązania problemu jako ścieŜki od stanu początkowego do stanu docelowego.
2. Przeglądanie systematyczne wszystkich ścieŜek w poszukiwaniu celu.
3. Powrót do poprzedniego stanu pozwalający na wznowienie przeszukiwania w sytuacji, gdy dotychczasowa ścieŜka nie prowadzi do celu - mechanizm nawrotów.
4. Struktury listowe umoŜliwiające utrzymywanie w sposób jawny danych o aktualnie analizowanych stanach:
• lista open, pozwalająca na powrót do nie odwiedzonych jeszcze stanów,
• lista closed stanów juŜ odwiedzonych, pozwalająca na wykrywanie pętli i uniknięcie powtarzania bezowocnych ścieŜek.
5. Zastosowanie stosu w algorytmie przeszukiwania w głąb i kolejki