Zadanie 1 - przeszukiwanie przestrzeni stanów
Transkrypt
Zadanie 1 - przeszukiwanie przestrzeni stanów
Informatyka, studia dzienne, inż I st. semestr VI Sztuczna inteligencja i systemy ekspertowe 2011/2012 Prowadzący: dr inż. Krzysztof Lichy wtorek, 12:15 Data oddania: Ocena: Artur Angiel 157797 Piotr Jasiak 157853 Szymon Wawrzyniak 157986 Zadanie 1 - przeszukiwanie przestrzeni stanów∗ 1. Wprowadzenie Celem niniejszego zadania jest napisanie dwóch programów. Pierwszy z nich ma za zadanie odnaleźć rozwiązanie łamigłówki zwanej “Piętnastką”, a drugi ma na celu wizualizację rozwiązywania łamigłówki. 2. Opis programów 2.1. Rozwiązywanie łamigłówki Łamigłówka jest rozwiązywana za pomocą poniższych algorytmów (wybieranych z linii poleceń): — strategia ”w głąb”, swobodna oraz z iteracyjnym pogłębianiem — strategia ”wszerz” — strategia ”najpierw najlepszy”: A*, BF 2.1.1. Funkcje heurystyczne heuristic1 Heurystyka obliczająca odległość zera od punktu docelowego zera. heuristic2 Heurystka obliczająca odległość wszystkich pól od ich pożądanego miejsca. ∗ SVN: https://repo.mydevil.net/svn/pub/arturangiel/sise/ 1 heuristic3 Heurystka obliczająca ile pól nie znajduje się na swoich miejscach. 2.2. Wizualizacja rozwiązania Wizualizacja rozwiązania odbywa się poprzez przedstawienie planszy z ponumerowanymi klockami, zmieniającymi swoje położenie w czasie. 3. Opis algorytmów 3.1. DFS Algorytm przeszukiwania grafu “w głąb” (ang. Depth-First Search) jest algorytmem rekurencyjnym i polega na tym, że plansza przeszukiwana jest od korzenia wzdłuż jednej gałęzi, w zadanym z góry kierunku. Kiedy algorytm dojdzie do końca gałęzi, wraca do rodzica i przechodzi do kolejnego dziecka, które także jest zdefiniowane przez kolejność. 3.2. IDFS Algorytm przeszukiwania “w głąb” z iteracyjnym pogłębianiem jest rozszerzeniem algorytmu 3.1. W tym przypadku funkcja odpowiedzialna za rozwiązanie jest wywoływana w pętli i w każdym przebiegu jest powiększana dopuszczalna głębokość rekurencji, aż do uzyskania wyniku. 3.3. BFS BFS (ang. Breadth-first search) czyli algorytm przeszukiwania grafu “wszerz”. Jego działanie można traktować jako pewien schemat, którego usprawnionymi przykładami są m.in. takie algorytmy jak: “Best First Search”, “A”. Algorytm ten przeszukuje cały graf wszerz aż do znalezienia węzła docelowego. W przypadku rozwiązywania łamigłówki, jego działanie polega na tym, że pobiera stan początkowy i sprawdza czy spełnia on warunek stopu. Jeżeli nie, to przechodzi do wyznaczenia wszystkich możliwych stanów potomnych zgodnie z podaną kolejnością. Następnie każdy z potomnych stanów jest sprawdzany czy taki stan już był rozpatrywany, jeżeli nie to zostaje on dodany do kolejki z której pobierane są kolejne stany do przetworzenia i cały proces jest wykonywany na nowo do dopóty, dopóki w kolejce znajdują się stany do przetworzenia. BFS nie wykorzystuje żadnej heurystyki. 3.4. Best First BF (ang. Best First) jest algorytmem kierunkowanym na szybsze dotarcie do rozwiązania. Każdy stan posiada heurystyczną ocenę liczbową f (v), dzięki czemu możliwe jest poddanie ocenie jak daleko stan znajduje się od celu. Stany przechowywane są w kolejce priorytetowej, zatem w pierwszej kolejności rozpatrywane są najbardziej “obiecujące“ stany. 2 3.5. A* Algorytm ten wykorzystuję heurystykę. Jego działanie polega na tym, że wybierana jest ścieżka pomiędzy wierzchołkiem początkowym, a końcowym. Wybór kolejnego elementu ścieżki uzależniony jest od wartości funkcji f (x) = g(x) + h(x). Mianowicie, ze wszystkich dostępnych w danym momencie sąsiadujących wierzchołków wybieramy ten, dla którego funkcja f (x) jest najmniejsza. g(x) jest to droga przebyta w danej ścieżce do tej pory, a h(x) to wartość funkcji heurystycznej w danym ustawieniu. 4. Wynik działania 3 Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 131ms 3045 2053 BFS (DLPG) 21ms 792 402 A* (heuristic 1) 3ms 224 147 A* (heuristic 2) 1ms 49 33 A* (heuristic 3) 0ms 49 33 BestFirst (heuristic 2) 4ms 24 12 BestFirst (heuristic 3) 3ms 24 12 It./rek. Rozwiązanie 9/0 DGPPPDDD 198 PPPDDD 78 PPPDDD 17 PPPDDD 17 PPPDDD 7 PPPDDD 7 PPPDDD Tabela 1. 0 1 2 3 5 6 7 4 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 155ms 3778 2543 BFS (DLPG) 59ms 1292 687 A* (heuristic 1) 14ms 706 463 A* (heuristic 2) 3ms 100 64 A* (heuristic 3) 4ms 76 48 BestFirst (heuristic 2) 1ms 76 40 BestFirst (heuristic 3) 1ms 24 14 It./rek. Rozwiązanie 9/0 DGGPPDDD 323 GPPDDD 225 GPPDDD 33 GPPDDD 25 GPPDDD 20 GPPDDD 7 GPPDDD Tabela 2. 1 6 2 3 5 0 7 4 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 137ms 2900 1951 BFS (DLPG) 16ms 904 473 A* (heuristic 1) 5ms 428 282 A* (heuristic 2) 2ms 92 61 A* (heuristic 3) 3ms 100 67 BestFirst (heuristic 2) 4ms 64 32 BestFirst (heuristic 3) 2ms 36 19 It./rek. Rozwiązanie 9/0 DGLGPDDD 226 LGPDDD 139 LGPDDD 30 LGPDDD 32 LGPDDD 17 LGPDDD 10 LGPDDD Tabela 3. 1 2 7 3 5 6 4 0 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone DFS (DPGL) 1ms 15 6 IDFS (DPGL) 49ms 322 227 BFS (DPGL) 30ms 384 202 A* (heuristic 1) 4ms 192 131 A* (heuristic 2) 3ms 49 33 A* (heuristic 3) 2ms 49 33 BestFirst (heuristic 2) 3ms 24 12 BestFirst (heuristic 3) 3ms 24 12 Tabela 4. 0 2 3 4 1 6 7 8 5 10 11 12 9 13 14 15 4 It./rek. Rozwiązanie 6 DDDPPP 7/0 DDDPPP 96 DDDPPP 62 DDDPPP 17 DDDPPP 17 DDDPPP 7 DDDPPP 7 DDDPPP Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 57ms 1389 941 BFS (DLPG) 25ms 752 387 A* (heuristic 1) 7ms 199 132 A* (heuristic 2) 3ms 70 46 A* (heuristic 3) 1ms 74 49 BestFirst (heuristic 2) 12ms 36 20 BestFirst (heuristic 3) 4ms 28 17 It./rek. Rozwiązanie 9/0 LPPGGPDD 188 PGGPDD 64 PGGPDD 23 PGGPDD 24 PGGPDD 10 PGGPDD 8 PGGPDD Tabela 5. 1 2 3 4 5 6 11 7 9 10 15 8 13 0 14 12 Algorytm Czas Odwiedzone Przetworzone IDFS (DPGL) 81ms 1778 1209 BFS (DPGL) 23ms 1480 783 A* (heuristic 1) 20ms 1141 756 A* (heuristic 2) 3ms 132 88 A* (heuristic 3) 3ms 122 81 BestFirst (heuristic 2) 4ms 32 21 BestFirst (heuristic 3) 2ms 28 18 It./rek. Rozwiązanie 8/0 DLDPDPP 370 DLDPDPP 362 DLDPDPP 43 DLDPDPP 40 DLDPDPP 9 DLDPDPP 8 DLDPDPP Tabela 6. 1 0 3 4 6 2 7 8 5 9 11 12 13 10 14 15 Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 1989ms 13768 4203 IDFS (DLPG) 80ms 1893 1285 BFS (DLPG) 15ms 472 244 A* (heuristic 1) 2ms 120 77 A* (heuristic 2) 0ms 41 26 A* (heuristic 3) 1ms 44 28 BestFirst (heuristic 2) 11ms 20 11 BestFirst (heuristic 3) 0ms 20 11 It./rek. Rozwiązanie 4203 Zbyt długie 8/0 DGPPDDD 118 PPDDD 42 PPDDD 14 PPDDD 15 PPDDD 6 PPDDD 6 PPDDD Tabela 7. 1 0 2 3 5 6 7 4 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 88ms 1893 1282 BFS (DLPG) 19ms 596 316 A* (heuristic 1) 7ms 254 166 A* (heuristic 2) 5ms 68 43 A* (heuristic 3) 2ms 64 40 BestFirst (heuristic 2) 4ms 36 19 BestFirst (heuristic 3) 5ms 20 12 Tabela 8. 1 2 7 3 5 6 0 4 9 10 11 8 13 14 15 12 5 It./rek. Rozwiązanie 8/0 DGGPDDD 149 GPDDD 82 GPDDD 22 GPDDD 21 GPDDD 10 GPDDD 6 GPDDD Algorytm IDFS (DLPG) BFS (DLPG) A* (heuristic 1) A* (heuristic 2) A* (heuristic 3) BestFirst (heuristic 2) BestFirst (heuristic 3) Czas Odwiedzone Przetworzone 92ms 1413 962 13ms 332 175 10ms 114 77 14ms 46 31 6ms 42 28 8ms 20 12 3ms 20 12 It./rek. Rozwiązanie 8/0 DGLDPDD 83 LDPDD 38 LDPDD 16 LDPDD 15 LDPDD 6 LDPDD 6 LDPDD Tabela 9. 1 2 4 0 5 6 3 7 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 16ms 203 146 BFS (DLPG) 8ms 212 119 A* (heuristic 1) 15ms 88 60 A* (heuristic 2) 4ms 36 24 A* (heuristic 3) 3ms 42 28 BestFirst (heuristic 1) 13077ms 19484 8830 BestFirst (heuristic 2) 5ms 20 13 BestFirst (heuristic 3) 5ms 20 13 It./rek. Rozwiązanie 6/0 DLDDP 53 DLDDP 29 DLDDP 13 DLDDP 15 DLDDP 4872 DLDDP 6 DLDDP 6 DLDDP Tabela 10. 1 2 3 0 5 6 8 4 9 10 7 12 13 14 11 15 Algorytm Czas Odwiedzone Przetworzone IDFS (DLPG) 89ms 1389 940 BFS (DLPG) 25ms 544 290 A* (heuristic 1) 6ms 258 169 A* (heuristic 2) 5ms 76 48 A* (heuristic 3) 3ms 71 45 BestFirst (heuristic 2) 3ms 64 36 BestFirst (heuristic 3) 2ms 20 16 It./rek. Rozwiązanie 8/0 DGGPDDP 136 GPDDP 83 GPDDP 25 GPDDP 23 GPDDP 17 GPDDP 6 GPDDP Tabela 11. 1 2 3 4 5 10 6 8 9 0 7 12 13 14 11 15 Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 8ms 6 3 IDFS (DLPG) 5ms 27 22 BFS (DLPG) 6ms 32 17 A* (heuristic 1) 9ms 13 9 A* (heuristic 2) 2ms 13 9 A* (heuristic 3) 3ms 13 9 BestFirst (heuristic 2) 3ms 12 7 BestFirst (heuristic 3) 6ms 12 7 Tabela 12. 1 2 3 0 5 6 7 4 9 10 11 8 13 14 15 12 6 It./rek. Rozwiązanie 3 DDD 4/0 DDD 8 DDD 6 DDD 6 DDD 6 DDD 4 DDD 4 DDD Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 232ms 4435 1353 IDFS (DLPG) 25ms 398 274 BFS (DLPG) 4ms 120 61 A* (heuristic 1) 1ms 33 22 A* (heuristic 2) 1ms 21 14 A* (heuristic 3) 1ms 25 17 BestFirst (heuristic 2) 1ms 12 9 BestFirst (heuristic 3) 1ms 12 9 It./rek. Rozwiązanie 1353 Zbyt długie 6/0 DGPDD 30 PDD 11 PDD 7 PDD 8 PDD 4 PDD 4 PDD Tabela 13. 1 2 3 4 5 6 0 7 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 232ms 4435 1353 IDFS (DLPG) 25ms 398 274 BFS (DLPG) 4ms 120 61 A* (heuristic 1) 1ms 33 22 A* (heuristic 2) 1ms 21 14 A* (heuristic 3) 1ms 25 17 BestFirst (heuristic 2) 1ms 12 9 BestFirst (heuristic 3) 1ms 12 9 It./rek. Rozwiązanie 1353 Zbyt długie 6/0 DGPDD 30 PDD 11 PDD 7 PDD 8 PDD 4 PDD 4 PDD Tabela 14. 1 2 3 4 5 6 0 7 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 1342ms 13341 4070 IDFS (DLPG) 59ms 880 600 BFS (DLPG) 6ms 208 110 A* (heuristic 1) 11ms 44 28 A* (heuristic 2) 1ms 24 14 A* (heuristic 3) 0ms 24 14 BestFirst (heuristic 2) 12ms 16 9 BestFirst (heuristic 3) 0ms 16 9 It./rek. Rozwiązanie 4070 Zbyt długie 7/0 DGPDDD 52 PDDD 15 PDDD 9 PDDD 9 PDDD 5 PDDD 5 PDDD Tabela 15. 1 2 0 3 5 6 7 4 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 143ms 4437 1354 IDFS (DLPG) 6ms 161 115 BFS (DLPG) 1ms 156 82 A* (heuristic 1) 1ms 48 30 A* (heuristic 2) 1ms 32 20 A* (heuristic 3) 1ms 32 20 BestFirst (heuristic 2) 0ms 16 11 BestFirst (heuristic 3) 1ms 16 11 Tabela 16. 1 2 0 4 5 6 3 7 9 10 11 8 13 14 15 12 7 It./rek. Rozwiązanie 1354 Zbyt długie 5/0 DPDD 39 DPDD 17 DPDD 11 DPDD 11 DPDD 5 DPDD 5 DPDD Algorytm Czas Odwiedzone Przetworzone DFS (DLPG) 148ms 4574 1396 IDFS (DLPG) 23ms 845 574 BFS (DLPG) 2ms 248 126 A* (heuristic 1) 2ms 68 43 A* (heuristic 2) 0ms 39 24 A* (heuristic 3) 1ms 39 24 BestFirst (heuristic 2) 1ms 16 12 BestFirst (heuristic 3) 0ms 16 12 It./rek. Rozwiązanie 1396 Zbyt długie 7/0 DGPPDD 62 PPDD 22 PPDD 12 PPDD 12 PPDD 5 PPDD 5 PPDD Tabela 17. 1 2 3 4 5 0 6 7 9 10 11 8 13 14 15 12 Algorytm Czas Odwiedzone Przetworzone A* (heuristic 2) 369ms 4694 3105 A* (heuristic 3) 12748ms 17305 11268 BestFirst (heuristic 2) 48ms 1056 522 BestFirst (heuristic 3) 75ms 2264 1151 Tabela 18. 1 2 3 4 6 11 7 8 5 9 15 12 13 10 14 0 8 It./rek. 1494 5550 265 LGGLLDP 567 LGLGLDPPDLGLD 5. Wnioski Najwydajniejszymi algorytmami okazały się, zgodnie z oczekiwaniami, algorytmy wykorzystujące heurystykę. Spowodowane jest to tym, że wybierane są tutaj drogi, które są najbliżej rozwiązania porzucając pozostałe. Funkcjonalności tej pozbawione są algorytmy nie wykorzystujące heurystyk, przez co rośnie czas poszukiwania. Najmniej wydajnym algorytmem okazał się DFS, ponieważ liczba rekurencji jest tutaj największa. Literatura [1] T. Oetiker, H. Partl, I. Hyna, E. Schlegl. Nie za krótkie wprowadzenie do systemu LATEX2e, 2007, dostępny online. [2] Przemysław Klęsk. Algorytmy przeszukiwania grafów i drzew dla gier i łamigłówek, http://wikizmsi.zut.edu.pl/uploads/b/be/2_search.pdf [3] Wikipedia, wolna encykolpedia Breadth-first search, http://en.wikipedia. org/wiki/Breadth-first_search [4] Wikipedia, wolna encyklopedia Algorytm A*, http://pl.wikipedia.org/ wiki/Algorytm_A* 9