Informatyka, studia dzienne, inż. I st. semestr VI Sztuczna Inteligencja i Systemy Ekspertowe 2010/2011 Prowadzący: mgr Michał Pryczek piątek, 12:00 Data oddania: Ocena: Grzegorz Graczyk 150875 Marek Rogalski 150982 Zadanie 1: Piętnastka 1. Cel Celem zadania było doświadczalne sprawdzenie i ocena różnych strategii przeszukiwania przestrzeni stanów. W ramach zadania należało napisać program rozwiązujący układankę piętnastka. Program realizował zadanie przeszukując przestrzeń stanów z pomocą trzech strategii: przeszukiwania wszerz, przeszukiwania wgłąb, best first search, oraz przeszukiwania wiązką. 2. Wprowadzenie Przeszukiwanie przestrzeni stanów jest jednym z podejść do szukania rozwiązań problemów dla których możliwa jest reprezentacja w postaci zbioru stanów. Jeśli rozważany zbiór stanów określa dodatkowo przejścia między stanami, można do jego przeszukiwania zastosować bardziej systematyczne podejście. W szczególności, możliwe staje się szukanie rozwiązań optymalnych pod kątem odległości od stanu początkowego (liczonej w ilości krawędzi). Kolejną właściwością, która często pojawia się w podobnych zadaniach jest możliwość wprowadzenia pewnej funkcji oceny (kosztu). Obecność takiej funkcji pozwala na konstrukcję algorytmów, które przeszukując przestrzeń stanów skupiają się na stanach obiecujących pod kątem funkcji oceny (minimalizujących koszt). SVN: http://serce.ics.p.lodz.pl/svn/labs/sise/mp_pt1030/alois@591 1
Wszystkie powyższe własności występują w rozwiązywanym przez nas problemie. Aby je sprawdzić zbudowaliśmy program korzystający z następujących strategii: przeszukiwanie wszerz - w pierwszej kolejności stany o najmniejszej odległości od stanu początkowego. Taki model przeszukiwania możemy realizować dodając wszystkich nieodwiedzonych sąsiadów aktualnie odwiedzanego stanu do kolejki, a następnie odwiedzając kolejnego kandydata z kolejki według takiego samego schematu. przeszukiwanie wgłąb - kolejność przeszukiwania, w której przeszukując stany /zagłębiamy się/ w kolejne nieodwiedzone wierzchołki z aktualnie odwiedzanego wierzchołka. Model taki możemy zrealizować w sposób analogiczny do przeszukiwania wszerz, jednak zamiast kolejki, stosując stos. przeszukiwanie /best first/ - kolejność przeszukiwania, w której w pierwszej kolejności odwiedzamy najbardziej obiecujące stany (najniższa wartość funkcji kosztu). Analogicznie do poprzednich przypadków, i ta strategia może zostać zrealizowana za pomocą zbioru wierzchołków oczekujących na przejrzenie. W tym przypadku zbiór ten przybierze postać kolejki priorytetowej. przeszukiwanie wiązką - w tej kolejności przeszukiwania, odwiedzamy w pierwszej kolejności stany o najmniejszym koszcie. Dodając stany do zbioru wierzchołków oczekujących dbamy o to by nie przekroczyć pewnego ograniczenia powyżej którego ignorujemy nowo dodawane stany. 3. Manual Projekt składa się z 3 programów: game, display oraz show. Najprostszym sposobem użycia jest./game params in wczytujący opis planszy i wyświetlający wynik. Pozostałe sposoby użycia to:./display params < in./show - szukanie rozwiązania wyświetlając na żywo aktualnie przeszukiwany stan. (cat in; cat)./show - uruchomienie układanki w wersji interaktywnej. (cat in; cat out)./show 500 - prezentacja rozwiązania zapisanego w pliku out poprzez wykonywanie ruchu co pół sekundy 4. Opis implementacji W implementacji należy wyróżnić dwie struktury: strategię oraz stan. Strategia została zaimplementowana jako klasa abstrakcyjna posiadająca metody Push, Pop oraz metodę pozwalającą pobrać kolejność dodawania następników. Rolą strategii jest przechowanie zbioru stanów oraz pobieranie ich w odpowiedniej kolejności. Struktura stan posiada dwie implementacje - optymalną pod kątem czasu przechowującą stan jako tablicę ze stanami wszystkich pól oraz optymalną 2
pod kątem pamięci przechowującą stan jako numer permutacji odpowiadający danemu stanowi (numer jest ograniczony do 64 bitów, więc ta struktura nadaje się tylko dla mniejszych układanek). Wybór struktury następuje za pomocą flag kompilacji - domyślną strukturą jest optymalna pod kątem czasu. 5. Materiały i metody Doświadczenia wykonaliśmy na zestawie układanek: - czterech losowych układankach 3x3 (porównanie wszystkich metod) - czterech losowych układankach 3x4 (porównanie wszystkich metod) - dziesięciu układankach 4x4 których optymalne rozwiązania są długości od 1 do 16 (porównanie wszystkich metod) - czterech losowych układankach 4x4 (porównanie wszystkich metod) - trzech losowych układankach - 5x5, 6x6, oraz 7x7 (funkcje heurystyczne) 6. Wyniki Poniższa tabelka przedstawia długości rozwiązań dla 5 losowych testów o wymiarach 3x3: Test BFS DFS Heurystyka 1 Heurystyka 2 1 18 88962 46 20 2 18 83374 44 28 3 22 24348 52 40 4 20 21632 34 32 5 25 817 45 47 Ponadto podczas prób zauważono, że BFS nawet w wersji niedeterministycznej zwraca rozwiązanie tej samej długości, zaś DFS o długości losowej. Testy wydajnościowe przeprowadzono dla losowych układanek o różnych rozmiarach: Rozmiar BFS DFS Heurystyka 1 Heurystyka 2 3x3 0m0.116s 0m1.416s 0m0.004s 0m0.004s 3x4 0m0.004s 0m0.004s 4x4 0m0.004s 0m0.008s 5x5 0m0.016s 0m0.276s 6x6 0m0.024s 0m7.868s 7x7 0m0.156s 8x8 0m19.709s Przygotowano także testy dla układanek 4x4 o nielosowych stopniach skomplikowania. Pierwsza kolumna oznacza długość optymalnego rozwiązania, zaś + i - symbolizują powodzenie bądź porażkę algorytmu. 3
Optymalne BFS in BFS out BFS DFS in DFS out DFS 1 3 1 + 3 1 + 2 9 4 + 5 2 + 3 16 7 + 6 3 + 4 28 12 + 62155 31916 + 5 60 26 + 82394 42331 + 6 99 43 + 3640991 1870722-7 400 189 + 3641806 1871138-8 972 460 + 82394 42331 + 9 1758 836 + 3629611 1864756-10 3568 1711 + 3623708 1861674 - Optymalne nn1 in nn1 out nn1 nn2 in nn2 out nn2 1 3 1 + 3 1 + 2 5 2 + 5 2 + 3 6 3 + 6 3 + 4 8 4 + 8 4 + 5 10 5 + 10 5 + 6 11 6 + 11 6 + 7 16 8 + 13 7 + 8 24 11 + 15 8 + 9 470 204 + 16 9 + 10 469 203 + 18 10 + 4
7. Dyskusja Pierwsza seria testów pozawala wyciągnąć wnioski dotyczące optymalności rozwiązań. Rozwiązania uzyskane algorytmem DFS w widoczny sposób odbiegają od wyników uzyskanych innymi algorytmami. Na podstawie posiadanej wiedzy możemy stwierdzić, że rozwiązania uzyskane algorytmem BFS są najoptymalniejszymi istniejącymi rozwiązaniami. W wypadku heurystyk znalezione rozwiązania są tego samego rzędu co rozwiązania najoptymalniejsze - są zaledwie 2 dłuższe. Dowodzi to przeszacowania w użytych heurystykach pozwalając jednak odnajdywać rozwiązania znacznie szybciej. Testy wydajnościowe pokazały, że algorytmy BFS i DFS nie nadają się do rozwiązywania układanek większych niż 3x3. W wypadku układanki 3x4 liczba osiągalnych stanów wynosi 240 milionów co przekraczało możliwości naszego sprzętu badawczego. 5
8. Wnioski Algorytm BFS jako jedyny z badanych znajduje optymalne (najmniej ruchów) rozwiązania. Algorytm DFS znajduje rozwiązania bardzo nieoptymalne tysiące razy dłuższe niż optymalne. Z tego powodu nie nadaje się on do tego rodzaju przeszukiwania stanów. Algorytmy heurystyczne znajdują rozwiązania znacznie szybciej niż algorytmy BFS bądź DFS znajdując jednocześnie rozwiązania zaledwie kilka razy gorsze niż optymalne. Literatura [1] http://theory.stanford.edu/ amitp/gameprogramming/ [2] http://xkcd.com/688/ Na końcu należy obowiązkowo podać cytowaną w sprawozdaniu literaturę, z której grupa korzystała w trakcie prac nad zadaniem (przykład na końcu szablonu) 6