ESI 9 - Instytut Sterowania i Systemów Informatycznych

Transkrypt

ESI 9 - Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Wydział Elektrotechniki, Informatyki i
Telekomunikacji
Instytut Sterowania i Systemów Informatycznych
ELEMENTY SZTUCZNEJ INTELIGENCJI
Laboratorium nr 9
PRZESZUKIWANIE GRAFÓW Z WYKORZYSTANIEM METODY WSZERZ
Prowadzący: …………………………………………………..
Zakres ćwiczeń:
1. Idea metody przeszukiwania wszerz
2. Implementacja metody przeszukiwania wszerz
3. Złożoność obliczeniowa metody przeszukiwania wszerz
Wstęp teoretyczny
Jedną z metod automatycznego rozwiązywania zadań, problemów np. przez komputery jest
podejście opierające się na przeszukiwaniu możliwych stanów w jakich może znaleźć się
zadanie w celu znalezienia stanu odpowiadającego rozwiązaniu problemu. Aby możliwa była
implementacja wspominanych metod konieczne jest sprowadzenie zadania do odpowiedniej
formy, dla której wymaga się zdefiniowania dla danego problemu lub zadania następujących
pojęć:
•
•
•
•
•
•
stan początkowy, opisujący stan, z którego rozpoczynamy poszukiwania
rozwiązania
przestrzeń stanów czyli zbiór stanów osiągalnych ze stanu początkowego w
wyniku wykonania dozwolonych sekwencji akcji
sekwencje operacji prowadzącą z jednego stanu do innego nazwać będziemy
ścieżką
akcje są zbiorem operacji jakie można wykonać na zadaniu, problemie aby
przejść ze stanu bieżącego do innych dozwolonych stanów
test dotarcia do celu określa czy zadanie lub problem reprezentowane przez
odpowiedni stan zostało już rozwiązane
rozwiązanie problemu lub zadania reprezentowane jest przez odpowiednią
ścieżkę od stanu początkowego do znalezionego stanu docelowego.
Ogólną procedurę przeszukiwania przestrzeni stanów w poszukiwaniu docelowego stanu
można przedstawić w postaci następującej sekwencji operacji:
a) sprawdzenie czy bieżący stan jest stanem poszukiwanym
b) rozwinięcie bieżącego stanu czyli wygenerowanie nowych stanów, które są
osiągalne w wyniku wykonania dozwolonych akcji na stanie bieżącym
c) wybór jednego stanu ze zbioru stanów dozwolonych
d) uczynienie stanu bieżącego ze stanu wybranego w punkcie c
Cała procedura jest powtarzana aż do znalezienia rozwiązania albo do braku możliwości
rozwijania nowych stanów. W wyniku generowania kolejnych stanów tworzony jest graf
zawierający węzły reprezentujące rozwijane stany (Rys.1).
Rys. 1. Przykładowy graf
W przypadku grafu każdy ze stanów może być osiągnięty przez różne ścieżki co w
praktycznych zagadnieniach może prowadzić do wielu problemów. Z tego względu często
definiuje się dozwolone akcje rozwijające bieżący stan na nowe stany tak aby w wyniku tej
operacji powstawało drzewo czyli acykliczny graf skierowany. Drzewo charakteryzuje się
tym, że dowolna para stanów posiada dokładnie jedną ścieżkę, która je łączy co jest z punktu
widzenia implementacji algorytmów przeszukiwania drzew bardzo istotną zaletą.
Przykładowa struktura drzewa oraz elementy składowe drzewa przedstawiono na rys. 2.
Należy zauważyć, że podstawowym elementem drzewa jest węzeł, który przechowuje
informacje o stanie i dodatkowe informacje typu dowiązania do rodzica, dowiązania do
potomków, itp.
Rys. 2. Elementy drzewa
Zbiór wszystkich liści w drzewie w danym momencie przeszukiwania nazywamy krawędzią
(Rys. 3). Większość algorytmów przeszukiwania drzewa wymaga aby węzły drzewa, które
tworzą krawędź były przetrzymywane w pamięci komputera ponieważ spośród elementów
krawędzi wybierany jest jeden węzeł, który jest rozwijany w celu dalszych poszukiwań.
Rys.3 Węzły oznaczone na biało tworzą krawędź drzewa
Poszczególne metody przeszukiwania drzew różnią się strategią wybierania węzła z krawędzi
drzewa w celu dalszych poszukiwań. Poszczególne strategie ocenia się pod względem
następujących właściwości:
•
•
•
•
kompletności poszukiwań (czy algorytm zapewnia znalezienie rozwiązania jeżeli
rozwiązanie istnieje)
optymalności strategii (czy znaleziona ścieżka do celu jest najkrótszą z
możliwych)
złożoności pamięciowej (jak rośnie zapotrzebowanie na pamięć wraz ze
złożonością rozwiązywanego problemu)
złożoności czasowej (jak rośnie liczba analizowanych węzłów wraz ze wzrostem
złożoności problemu )
Istnieje wiele różnych metod i ich odmian nieinformowanego przeszukiwania drzew:
• metoda wszerz (breadth-first search)
• metoda w głąb (depth first search)
• metoda w głąb z limitem zagłębiania (depth-limited search)
• metoda dwukierunkowa (bidirectional search)
• metoda iteracyjnego zagłębiania (iterative deepening search)
• metoda stałych kosztów (uniform cost search)
W trakcie laboratorium analizie i implementacji poddane zostaną dwie najbardziej
podstawowe strategie wszerz oraz w głąb.
Strategia poszukiwań wszerz
Strategia wszerz, bada kolejno poziomy grafu o jednakowej głębokości, przyznaje wyższy
priorytet węzłom o mniejszej głębokości. Algorytm wyznacza węzeł celu o najmniejszej
głębokości (w porównaniu z innymi węzłami celu). Główna operacją strategii wszerz jest
ekspansja węzłów. Strategia ta daje gwarancję, że dla lokalnie skończonych grafów (czyli
każdy węzeł ma skończoną liczbę potomków) osiągnie się węzeł celu, jeżeli istnieje. Tak więc
strategia wszerz ma bardzo pożądaną cechę zbieżności. Dodatkowo, jako pierwsze wyznacza
rozwiązanie optymalne pod względem długości ścieżki rozwiązania. Strategia wszerz ma
jednak poważne wady. Analizowane są wszystkie węzły o głębokości mniejszej od głębokości
wyznaczonego węzła celu. Zamiast jednej ścieżki w pamięci są przechowywane wszystkie
węzły o danej głębokości przed wygenerowaniem jakiegokolwiek węzła o głębokości o jeden
większej. Tak więc w strategii tej występują duże wymagania dotyczące pamięci. W każdym
kroku strategii następują powroty do węzłów wygenerowanych i przechowywanych w
pamięci od wielu kroków.
Implementacja metody wszerz wymaga zdefiniowania dwóch list open oraz closed, na
których przechowywane są węzły drzewa. Na liście open przechowywane są węzły będące
krawędzią drzewa a na liście closed węzły, które były już wcześniej przeglądane. W kolejnych
krokach wybierany jest pierwszy węzeł na liście open i stosowna jest dla niego ogólna
procedura tzn. wybrany węzeł testowany jest czy przechowuje stan docelowy, jeśli tak to
koniec poszukiwań a jeśli nie to generowane są stany potomne, które dopisywane są na
koniec listy open a węzeł macierzysty przenoszony jest na listę closed. Prześledźmy
zachowanie się algorytmu oraz zawartości list open oraz closed w kolejnych krokach dla
przykładowego drzewa (Rys. 4). Inicjalizacja algorytmu wymaga umieszczenia węzła korzenia
na liście open. Każdy węzeł przechowywany na listach powinien zawierać informację na
temat swojego rodzica tak aby po znalezieniu stanu docelowego możliwe było odtworzenie
ścieżki będącej rozwiązaniem problemu.
Rys. 4. Przeszukiwanie wszerz (liczby określają kolejność przeglądania węzłów, węzeł G
przechowuje stan docelowy)
Kolejne stany list open i closed dla kolejnych kroków algorytmu (w nawiasach podawane są
węzły macierzyste):
a) Inicjalizacja:
open=A(-)
closed= pusta
b) Rozwinięcie węzła A:
open=B(A),C(A),D(A)
closed=A(-)
c) Rozwinięcie węzła B:
open=C(A),D(A),E(B),F(B)
closed=A(-),B(A)
d) Rozwinięcie węzła C:
open=D(A),E(B),F(B),G(C),H(C)
closed=A(-),B(A),C(A)
e) Rozwinięcie węzła D:
open=E(B),F(B),G(C),H(C),I(D),J(D)
closed=A(-),B(A),C(A),D(A)
f) Rozwinięcie węzła E:
open=F(B),G(C),H(C),I(D),J(D)
closed=A(-),B(A),C(A),D(A),E(B)
g) Rozwinięcie węzła F:
open= G(C),H(C),I(D),J(D)
closed=A(-),B(A),C(A),D(A),E(B),F(B)
h) Rozwinięcie węzła G (znaleziono cel):
open=H(C),I(D),J(D)
closed=A(-),B(A),C(A),D(A),E(B),F(B),G(C)
Po znalezieniu węzła docelowego następuje odtworzenie ścieżki, która doprowadziła do
rozwiązania na podstawie listy closed oraz informacji o rodzicach węzłów.
Właściwości strategii wszerz:
złożoność czasowa O(bd+1)
złożoność pamięciowa O(bd+1)
algorytm jest kompletny jeśli graf jest skończony
algorytm jest optymalny
gdzie b to współczynnik rozwijania a d głębokość, na której znajduje się węzeł docelowy
Zadania:
1. Zapoznaj się z problemem 8 elementowych puzli. Zadanie ułożenia puzzli sprowadza
się do wykonywania dozwolonych ruchów za pomocą poszczególnych elementów
puzzli tak aby osiągnąć zadany stan docelowy (rys. 6). Stan początkowy może być
generowany losowo.
Rys 6. Stan początkowy i stan docelowy
W celu uproszczenia rozważań oraz implementacji problemu należy pustą przestrzeń
w strukturze puzzli oznaczyć liczbą 0 i kolejne ruchy rozważać jako ruchy elementu 0.
Należy również zwrócić szczególną uwagę na stan początkowy, z którego rozpoczyna
się układanie puzzli ponieważ nie każdy stan końcowy może być osiągnięty z
wybranego stanu początkowego. Tylko połowa wszystkich możliwych stanów (czyli
rozkładów puzzli) może być osiągnięta z dowolnego stanu początkowego za pomocą
dozwolonych ruchów. W przypadku problemu układania puzzli przy użyciu metody
wszerz lub w głąb należy zwrócić uwagę na możliwość wystąpienia cykli w grafie, w
którym będzie poszukiwany stan docelowy (powtarzanie się tych samych ułożeń
puzzli). Implementowany algorytm musi śledzić ponowne wystąpienia stanów, które
wcześniej były już analizowane i odrzucać je co pozwoli uniknąć utykania algorytmu w
cyklach. Implementacja strategii wszerz oraz w głąb dla przedstawionego problemu
puzzli wymaga określenia struktury danych pozwalającej przechowywać pojedynczy
stan puzzli (np. tablica 3x3) oraz implementację list open i closed w postaci list
dynamicznych jednokierunkowych lub dwukierunkowych, na których będą
przechowywane węzły, które przechowują między innymi informację o stanie puzzli.
Poszczególne operacje na elementach list dynamicznych powinny zostać rozbite na
elementarne funkcje co znacząco ułatwia analizę algorytmu przeszukiwania oraz
przyśpiesza znajdowanie ewentualnych błędów.
2. Utwórz program do gry w puzzle gdzie decyzję o kolejnych ruchach będzie
podejmował komputer wykorzystując strategię przeszukiwania wszerz. Na wstępie
program powinien wylosować stan startowy a następnie po wyznaczeniu stanu
końcowego przedstawić sekwencje ruchów prowadzącą do stanu ułożenia,
Literatura:
1. Rutkowska D.,Piliński M., Rutkowski L.: Sieci neuronowe. Algorytmy genetyczne i
systemy rozmyte, PWN, Warszawa, 1997.
2. Mulawka J. J. Systemy ekspertowe, WNT, Warszawa 1996.
3. Brandys Cz, Fujarewicz K, Gałuszka A., Simek K., Świrniak K., Wojciechowski K. :
Metody sztucznej Inteligencji – Laboratorium, Wydawnictwo Politechniki Ślaskiej,
Gliwice 1998.
4. Rich E.: Artificial intelligence. McGraw-Hill, New York 1983.
5. http://aima.cs.berkeley.edu/