Algorytmy przeszukiwania grafów i drzew dla gier i łamigłówek

Podobne dokumenty
Algorytmy przeszukiwania grafów i drzew dla gier i łamigłówek

Algorytmy przeszukiwania grafów i drzew dla gier i łamigłówek

Rozwiązywanie problemów metodą przeszukiwania

Algorytm Stentz a D. Przemysław Klęsk Katedra Metod Sztucznej Inteligencji i Matematyki Stosowanej

Heurystyczne metody przeszukiwania

Wyznaczanie strategii w grach

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

SZTUCZNA INTELIGENCJA

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

Wstęp do Sztucznej Inteligencji

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

Metody SI w grach komputerowych Gra Policjanci i złodziej (Algorytmy przeszukiwania grafów)

Heurystyki. Strategie poszukiwań

Ogólne wiadomości o grafach

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

Zadanie 1: Piętnastka

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Algorytmy mrówkowe. H. Bednarz. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

a) 7 b) 19 c) 21 d) 34

Algorytmy i struktury danych

Znajdowanie wyjścia z labiryntu

0-0000, , , itd

Podstawy sztucznej inteligencji

3. MINIMAX. Rysunek 1: Drzewo obrazujące przebieg gry.

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmiczna teoria grafów

9.9 Algorytmy przeglądu

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Matematyczne Podstawy Informatyki

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Struktury danych: stos, kolejka, lista, drzewo

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Wybrane podstawowe rodzaje algorytmów

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Czy istnieje zamknięta droga spaceru przechodząca przez wszystkie mosty w Królewcu dokładnie jeden raz?

Drzewa poszukiwań binarnych

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Złożoność obliczeniowa zadania, zestaw 2

Adam Meissner. SZTUCZNA INTELIGENCJA Gry dwuosobowe

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Algorytmy sztucznej inteligencji

TEORIA GIER W EKONOMII WYKŁAD 2: GRY DWUOSOBOWE O SUMIE ZEROWEJ. dr Robert Kowalczyk Katedra Analizy Nieliniowej Wydział Matematyki i Informatyki UŁ

Wstęp do programowania

Planowanie drogi robota, algorytm A*

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Podstawy Sztucznej Inteligencji (PSZT)

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Metoda podziału i ograniczeń

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A

Algorytmy z powrotami. Algorytm minimax

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Lista 4. Kamil Matuszewski 22 marca 2016

Algorytmy dla gier dwuosobowych

LABORATORIUM 2: Przeszukiwanie grafów cz. 2 strategie heurystyczne

Teoria gier. Wykład7,31III2010,str.1. Gry dzielimy

TEORETYCZNE PODSTAWY INFORMATYKI

Wykład z modelowania matematycznego. Zagadnienie transportowe.

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Metody przeszukiwania

Wysokość drzewa Głębokość węzła

D. Miszczyńska, M.Miszczyński KBO UŁ 1 GRY KONFLIKTOWE GRY 2-OSOBOWE O SUMIE WYPŁAT ZERO

Teoria gier. wstęp Teoria gier Zdzisław Dzedzej 1

Teoria gier. Teoria gier. Odróżniać losowość od wiedzy graczy o stanie!

Plan wykładu. Przykład. Przykład 3/19/2011. Przykład zagadnienia transportowego. Optymalizacja w procesach biznesowych Wykład 2 DECYZJA?

Matematyka Dyskretna - zadania

Sztuczna Inteligencja i Systemy Doradcze

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Rodzina i pas płaszczyzn sieciowych

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Sztuczna inteligencja w programowaniu gier

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Porządek symetryczny: right(x)

Algorytmy przeszukiwania wzorca

Programowanie dynamiczne i algorytmy zachłanne

Digraf. 13 maja 2017

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Algorytmy i Struktury Danych

Pomorski Czarodziej 2016 Zadania. Kategoria C

Szachy INSTRUKCJA. rekwizyty: 1) Bierki - 32 szt. 2) plansza - 1 szt.

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Wykład 8. Drzewo rozpinające (minimum spanning tree)

ANALIZA ALGORYTMÓW. Analiza algorytmów polega między innymi na odpowiedzi na pytania:

SZACHY mini INSTRUKCJA. rekwizyty: 1) Bierki - 32 szt. 2) plansza - 1 szt.

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Problem skoczka szachowego i inne cykle Hamiltona na szachownicy n x n

Teoretyczne podstawy informatyki

Teoria gier. dr Przemysław Juszczuk. Wykład 2 - Gry o sumie zero. Instytut Informatyki Uniwersytetu Śląskiego

TEORIA GRAFÓW I SIECI

Klasyczne zagadnienie przydziału

Programowanie dynamiczne

Transkrypt:

Algorytmy przeszukiwania grafów i drzew dla gier i łamigłówek Przemysław Klęsk pklesk@wi.zut.edu.pl Katedra Metod Sztucznej Inteligencji i Matematyki Stosowanej

Zagadnienia i algorytmy 1 Algorytm Breadth-First-Search 2 Algorytm Best-First-Search 3 Algorytm A 4 Algorytm MIN-MAX 5 Algorytm przycinanie α-β Przemysław Klęsk (KMSIiMS, ZUT) 2 / 44

Algorytm Breadth-First-Search Czy istnieje ścieżka do celu? v 1 v 6 v 7 v 2 v 4 v5 v 8 v 3 Przemysław Klęsk (KMSIiMS, ZUT) 3 / 44

Algorytm Breadth-First-Search Własności algorytmu Breadth First Search Wykonuje zachłanne (w skrajnym przypadku wyczerpujące) przeszukiwanie całego grafu wszerz,aż do natrafienia na węzeł docelowy. Algorytm ten można traktować, jako ogólny schemat, którego szczególne (usprawnione) przypadki to algorytmy: Best First Search, A, algorytm Dijkstry, i inne. Breadth First Search operuje na dwóch zbiorach: Open (zawiera węzły, które mają być jeszcze rozpatrzone) i Closed (zawiera węzły, które już rozpatrzono). Każdy z węzłów ma możliwość zapamiętania jednego swojego poprzednika, tak aby po znalezieniu rozwiązania można było prześledzićścieżkę. Przemysław Klęsk (KMSIiMS, ZUT) 4 / 44

Algorytm Breadth-First-Search Breadth First Search Algorytm 1 Ustaw w węźle początkowym pustego poprzednika i dodaj ten węzeł do zbioru Open. 2 Dopóki zbiór Open pozostaje niepusty powtarzaj: 1 Pobierz (i usuń) jeden węzeł ze zbioru Open. Nazwijmy ten węzeł v. 2 Jeżeli v jest węzłem docelowym (spełnia warunek stopu), to przerwij cały algorytm i zwróć v jako wynik. 3 Włóż do zbioru Open tych wszystkich potomków węzła v, którzy nie występują w zbiorze Closed. Zapamiętaj w nich v jako ich poprzednika. 4 Włóż v do zbioru Closed. Przemysław Klęsk (KMSIiMS, ZUT) 5 / 44

Algorytm Breadth-First-Search Breadth First Search Śledzenie ścieżki 1 Przypisz do roboczego węzła o nazwie v,węzeł będący rozwiązaniem. 2 Zainicjalizuj ciąg reprezentujący ścieżkę zawartością v: Path = (v). 3 Dopóki v ma niepustego poprzednika, powtarzaj: 1 Przypisz w miejsce v jego poprzednika (v v.parent). 2 Dopisz z przodu ścieżki Path zawartość v. Przemysław Klęsk (KMSIiMS, ZUT) 6 / 44

Algorytm Breadth-First-Search Przykładowe działanie (dla grafu ze str. 3) 1 Open = {v 1 }, Closed = {}. 2 Open = {v 1 } więc wykonujemy ciało pętli: 2.1 v = v 1, Open = {}. 2.2 v = v 1 v 8 (warunek stopu niespełniony). 2.3 Open = {v 2, v 3, v 6 }. 2.4 Closed = {v 1 }. 2 Open = {v 2, v 3, v 6 } więc wykonujemy ciało pętli: 2.1 v = v 2, Open = {v 3, v 6 }. 2.2 v = v 2 v 8 (warunek stopu niespełniony). 2.3 Open = {v 3, v 6 } (uwaga: v 3 jako potomek v 2 nie jest po raz drugi dodawany do Open). 2.4 Closed = {v 1, v 2 }. 2 Open = {v 3, v 6 } więc wykonujemy ciało pętli: 2.1 v = v 3, Open = {v 6 }. 2.2 v = v 3 v 8 (warunek stopu niespełniony). 2.3 Open = {v 6, v 4 } (uwaga: v 1 jako potomek v 3 nie jest dodawany do Open, bo jest już w Closed.) 2.4 Closed = {v 1, v 2, v 3 }. 2... Przemysław Klęsk (KMSIiMS, ZUT) 7 / 44

Algorytm Breadth-First-Search Uwagi o Breadth First Search Zbiory Open i Closed w przypadku Breadth First Search zazwyczaj implementuje się jako zwykłe kolejki FIFO. Dopiero w specjalizowanych wersjach algorytmu tj. w algorytmach BestFirstSearch i A, zbiory te implementuje się odpowiednio jako: kolejkę priorytetową i hashmapę. Jeżeli przeszukiwanie dotyczy drzewa (grafu bez cykli), to zbiór Closed można pominąć. Breadth First Search nie jest w żaden sposób ukierunkowany na szybsze dotarcie do rozwiązania (przeszukuje wszerz): nie minimalizuje długości ścieżki, nie wykorzystuje żadnej heurystyki. Przemysław Klęsk (KMSIiMS, ZUT) 8 / 44

Algorytm Best-First-Search Własności algorytmu Best First Search (Judea Pearl) Każdemu przeszukiwanemu stanowi (węzłowi) v nadawana jest heurystyczna ocena liczbowa f (v), szacująca, na ile daleko dany stan jest od docelowego. Algorytm przeszukuje w pierwszej kolejności stany o najniższej wartości funkcji heurystycznej. Zbiór Open implementowany jest przez kolejkę priorytetową (ang. PriorityQueue) porządkującą stany wg heurystyki. Wstawienie nowego elementu do kolejki z zachowaniem porządku ma złożoność O(log n). Wyciągnięcie elementu z kolejki ma złożoność O(1). Zbiór Closed implementowany jest przez hashmapę. Sprawdzenie, czy pewien stan już był rozpatrzony i jest w zbiorze Closed, ma złożoność O(1). Każdy stan przechowuje dotychczas najkorzystniejszego dla niego poprzednika. Przemysław Klęsk (KMSIiMS, ZUT) 9 / 44

Sudoku Algorytm Best-First-Search Mając dany pewien stan początkowy planszy 9 9, podzielonej dodatkowo na 9 podkwadratów o wymiarach 3 3każdy, należy napełnić planszę tak, aby w każdym wierszu, w każdej kolumnie i w każdym podkwadracie były wykorzystane wszystkie liczby ze zbioru {1, 2,...,9}. 1*5 *37 **8 *7* *** *** **8 1** *** **3 *7* **1 74* *1* *63 2** *4* 9** *** **5 1** *** *** *8* 4** 62* 5*7 195 237 648 674 859 312 328 164 759 853 976 421 749 512 863 216 348 975 962 785 134 537 491 286 481 623 597 (Best First Search w Javie: czas = 1607 ms (procesor 2 GHz), odwiedzonych stanów = 3168.) Przemysław Klęsk (KMSIiMS, ZUT) 10 / 44

Sudoku Algorytm Best-First-Search Ogólne sudoku n 2 Mając dany pewien stan początkowy planszy n 2 n 2, podzielonej dodatkowo na n 2 podkwadratów o wymiarach n n każdy, należy napełnić planszę tak, aby w każdym wierszu, w każdej kolumnie i w każdym podkwadracie były wykorzystane wszystkie liczby ze zbioru {1, 2,...,n 2 }. Przemysław Klęsk (KMSIiMS, ZUT) 11 / 44

Algorytm Best-First-Search Problem n-hetmanów Na szachownicy n n należy ustawić n hetmanów, w taki sposób, aby żaden przez żadnego nie był szachowany. Dla n = 2, 3 rozwiązanie nie istnieje. Przykład rozwiązania dla n = 4: Q Q Q Q Przemysław Klęsk (KMSIiMS, ZUT) 12 / 44

Best First Search Algorytm Best-First-Search Algorytm 1 Ustaw w stanie początkowym pustego poprzednika i dodaj ten stan do zbioru Open. 2 Dopóki zbiór Open pozostaje niepusty powtarzaj: 1 Pobierz (i usuń) jeden stan v ze zbioru Open (jest to stan najlepszy w sensie zadanej heurystyki). 2 Jeżeli v jest stanem docelowym (spełnia warunek stopu), to przerwij cały algorytm i zwróć v jako wynik. 3 Wygeneruj wszystkie stany potomne dla v i dla każdego z nich wykonaj: 1 Jeżeli stan występuje w Closed, to nie badaj go dalej. 2 Policz wartość heurystyki dla tego stanu. 3 Jeżeli stan nie występuje w Open, to dodaj go ustawiając v jako jego poprzednik. 4 Jeżeli stan występuje w Open, to podmień w nim wartość heurystyki i poprzednika, o ile nowo obliczona wartość jest korzystniejsza, i uaktualnij jego pozycję wopen. 4 Włóż v do zbioru Closed. Przemysław Klęsk (KMSIiMS, ZUT) 13 / 44

Algorytm Best-First-Search Przykładowe heurystyki Sudoku (heurystyka naiwna) Rozpoczynamy od zadanej planszy (stan początkowy) i dostawiamy w puste pola (dowolne) dopuszczalne liczby (maks. 9 potomków na każdym poziomie drzewa). Mówimy, że stan jest tym bliższy rozwiązaniu, im mniej ma pustych pól. f (v) = liczba pustych pól w v., jeżeli stan jest niepoprawny; Przemysław Klęsk (KMSIiMS, ZUT) 14 / 44

Algorytm Best-First-Search Przykładowe proste heurystyki Sudoku (heurystyka wg minimum pozostałych możliwości) Utożsamijmy v z tablicą sudoku. Niech R v (i, j) oznacza pozostałe możliwości dla komórki (i, j) tablicy v pozostałe poprzez wyeliminowanie liczb obecnych w wierszu i, kolumnie j i podkwadracie, do którego należy (i, j). Mówimy, że stan jest tym bliższy rozwiązaniu, im ma mniej pozostałych możliwości dla pewnej komórki. Dzieci podpinamy w tej właśnie komórce. f (v) = min #R v (i, j). i,j Przemysław Klęsk (KMSIiMS, ZUT) 15 / 44

Algorytm Best-First-Search Przykładowe proste heurystyki Sudoku (heurystyka wg sumy pozostałych możliwości) Mówimy, że stan jest tym bliższy rozwiązaniu, im ma mniejszą sumę pozostałych możliwości wziętą po wszystkich komórkach. Dzieci podpinamy w komórce: arg min i,j #R v (i, j). f (v) = #R v (i, j). i,j Przemysław Klęsk (KMSIiMS, ZUT) 16 / 44

Algorytm Best-First-Search Przykładowe proste heurystyki n-hetmanów (heurystyka naiwna) Rozpoczynamy od pustej szachownicy i dostawiamy w kolejnych wierszach hetmany. Mówimy, że stan jest bliższy rozwiązaniu im ma mniej pustych wierszy., jeżeli hetmany szachują się; f (v) = liczba pustych wierszy w v. Przemysław Klęsk (KMSIiMS, ZUT) 17 / 44

Algorytm Best-First-Search Przykładowe proste heurystyki n-hetmanów (heurystyka wg minimum pozostałych możliwości) Niech R v oznacza liczbę pozostałych nieszachowanych pól w v. Mówimy, że stan jest bliższy rozwiązaniu im ma mniej nieszachowanych pól. f (v) = R v., jeżeli hetmany szachują się; Przemysław Klęsk (KMSIiMS, ZUT) 18 / 44

Algorytm Best-First-Search Minimalne sudoku Problem (w ogólności dla sudoku n 2 ) Znaleźć wszystkie początkowe układy sudoku, dla których istnieje dokładnie jedno rozwiązanie i które mają minimalną liczbę ustalonych pól w stanie początkowym. Dowód, że takie stany istnieją Poczynając od dowolnej rozwiązanej planszy (całkowicie wypełnionej) odbieramy kolejno po jednej liczbie i sprawdzamy, czy nadal można będzie rozwiązać sudoku jednoznacznie. Przerywamy, gdy będzie istniało więcej niż jedno rozwiązanie. Zważywszy na fakt, że całkowicie pusta plansza nie jest jednoznacznie rozwiązywalna, widać że takie postępowanie będzie miało punkt stopu przy pewnym częściowym zapełnieniu planszy. Przemysław Klęsk (KMSIiMS, ZUT) 19 / 44

Algorytm Best-First-Search Poszukiwanie minimalnych sudoku Zarys algorytmu zachłannego Rozpoczynamy od pełnej (rozwiązanej) planszy. Potomkami danego stanu są stany powstałe przez odebranie jednej liczby z rodzica. Zatem możemy utworzyć n 2 potomków tyle, ile jest pól. Dla każdego potomka sprawdzamy, wykonując algorytm Best First Search dla zwykłego problemu sudoku, czy istnieją co najmniej 2 rozwiązania. Jeżeli pewien stan ma jedno rozwiązanie, a wszystkie jego potomki mają więcej niż jedno, to należy go zapamiętać jako kandydata na minimalne sudoku. Algorytm musimy jednak wykonać, aż do przejrzenia pełnego grafu. Nie można zatrzymać się na pierwszym rozwiązaniu, jako że w innych rejonach grafu, mogą istnieć rozwiązania o mniejszej liczbie elementów na planszy początkowej. Przemysław Klęsk (KMSIiMS, ZUT) 20 / 44

Algorytm Best-First-Search Poszukiwanie minimalnych sudoku Dla n = 2 rozpoczynając od poniższej planszy znaleziono 128 minimalnych sudoku (mających 4 pozycje ustalone). 12 34 34 12 23 41 41 23 12 4 3, 12 41, 12 1 4,... Oczywiście, aby poznać prawdziwą liczbę wszystkich rozwiązań bazowych należałoby: (1) utożsamić wszystkie układy równoważne sobie ze względu na jedną z osi symetrii planszy, (2) utożsamić wszystkie stany równoważne sobie ze względu na permutację symboli, (3) uruchomić przeszukiwanie dla wszystkich nietożsamych układów początkowych. Przemysław Klęsk (KMSIiMS, ZUT) 21 / 44

Algorytm Best-First-Search Poszukiwanie minimalnych sudoku Dla n = 3 Nie udało się wykonać programu do końca przy 2GB pamięci RAM, a swap owanie bardzo istotnie spowalnia pracę programu. Sugestia: można próbować zadanie obliczyć w sposób rozproszony (na wielu maszynach). Udało się na pewno wykryć, że minimalne sudoku 3 2 sąo liczności początkowej 18. Przemysław Klęsk (KMSIiMS, ZUT) 22 / 44

Algorytm Best-First-Search Uwagi o Best First Search Best First Search przeszukuje w głąb (a nie wszerz) coraz bardziej oddalając się od stanu początkowego. Przy natknięciu się na stan niepoprawny (w szczególności, gdy wszyscy potomkowie są niepoprawni), algorytm wycofuje siędo stanów o gorszej wartości heurystyki. Liczba takich wycofań zależy od: jakości podanej heurystyki i od sposobu budowania stanów potomnych (pewną wiedzęo problemie można zawrzećjuż tu, aby nie dopuszczać do stanów bezpośrednio niepoprawnych). Przemysław Klęsk (KMSIiMS, ZUT) 23 / 44

Algorytm A Własności algorytmu A (Hart, Nilsson, Raphael, 1968) Funkcja decydująca o porządku wyciągania stanów ze zbioru Open jest sumą dwóch funkcji: f (v) = g(v) + h(v), gdzie g(v) wyraża faktyczny koszt (odległość) przebyty od stanu początkowego do v, natomiast h(v) jest heurystyką szacującą koszt (odległość) od stanu v do stanu docelowego. Funkcja h musi być tzw. dopuszczalną heurystyką, tzn. nie wolno jej przeszacowywać kosztu (odległości) do stanu docelowego (o tym dokładniej jeszcze później... ). W zastosowaniach path-finding czy routing (gdzie mamy fizyczny/geograficzny graf) częstym i poprawnym wyborem dla h, jest zwykła odległość w linii prostej od v do stanu docelowego (na pewno nie przeszacowujemy). Przemysław Klęsk (KMSIiMS, ZUT) 24 / 44

Algorytm A Własności algorytmu A (Hart, Nilsson, Raphael, 1968) W odróżnieniu od Best First Search, A bierze pod uwagę także g(v), a nie tylko heurystykę zorientowaną na cel. A zatem w budowanej ścieżce z jednej strony preferowane są stany bliskie początkowemu, azdrugiej jednocześnie bliskie końcowemu (w sensie minimalizacji tej sumy). W algorytmie, każdy stan v musi miećmożliwość zapamiętania swoich trzech wartości: g(v), h(v), f (v). Przechodząc od pewnego stanu v do pewnego stanu w, wartość funkcji g wyznaczamy jako: g(w) = g(v) + d(v, w), gdzie d(v, w) oznacza koszt przejścia z v do w. Przemysław Klęsk (KMSIiMS, ZUT) 25 / 44

Algorytm A A Algorytm 1 Dla stanu początkowego wyznacz wartość h, a następnie ustaw: g = 0, f = 0 + h. Ustaw także pustego poprzednika i wstaw stan początkowy do zbioru Open. 2 Dopóki zbiór Open pozostaje niepusty powtarzaj: 1 Pobierz (i usuń) jeden stan v ze zbioru Open (jest to stan najlepszy w sensie wartości f ). 2 Jeżeli v jest stanem docelowym (spełnia warunek stopu), to przerwij cały algorytm i zwróć v jako wynik. 3 Wygeneruj wszystkie stany w potomne dla v i dla każdego z nich wykonaj: 1 Jeżeli stan w występuje w Closed, to nie badaj go dalej. 2 Policz: g(w) = g(v) + d(v, w)if (w) = g(w) + h(w). 3 Jeżeli stan nie występuje w Open, to dodaj go ustawiając v jako jego poprzednik. 4 Jeżeli stan występuje w Open, to podmień w nim wartości g i f (oraz poprzednika), o ile f korzystniejsze, i uaktualnij jego pozycjęwopen. 4 Włóż v do zbioru Closed. Przemysław Klęsk (KMSIiMS, ZUT) 26 / 44

Zastosowania A Algorytm A Ogólnie: poszukiwanie najkrótszej ścieżki w grafie... poruszanie się postaci (boot ów) w grach komputerowych, przechodzenie labiryntów, routing problems, układanki, łamigłówki, gdzie należy dodatkowo zminimalizować liczbę ruchów (np. puzzle n 2 1),... Przemysław Klęsk (KMSIiMS, ZUT) 27 / 44

Algorytm A Labirynty wyniki A Rozmiary siatki: 30 30, odwiedzonych stanów do momentu rozwiązania: 258. Przemysław Klęsk (KMSIiMS, ZUT) 28 / 44

Algorytm A Labirynty wyniki A Rozmiary siatki: 30 30, odwiedzonych stanów do momentu rozwiązania: 331. Przemysław Klęsk (KMSIiMS, ZUT) 29 / 44

Algorytm A Labirynty wyniki A Rozmiary siatki: 50 50, odwiedzonych stanów do momentu rozwiązania: 1441. Przemysław Klęsk (KMSIiMS, ZUT) 30 / 44

Algorytm A Dobra i zła (przeszacowująca) heurystyka h(v) = (v x goal x ) 2 + (v y goal y ) 2 lub h(v) = v x goal x + (v y goal y ) h(v) = 4 (v x goal x ) 2 + (v y goal y ) 2 Przemysław Klęsk (KMSIiMS, ZUT) 31 / 44

Puzzle n 2 1 Algorytm A Dla n = 3 Wychodząc od stanu początkowego i przesuwając pola z liczbami w miejsce puste 9 (w ogólności niech pole puste równe jest n 2 ), należy w jak najmniejszej liczbie ruchów dojść do stanu docelowego: 1 2 3 4 5 6 7 8 9 Przemysław Klęsk (KMSIiMS, ZUT) 32 / 44

Puzzle n 2 1 Algorytm A Przykładowa heurystyka Dla danego węzła v niech v ix oraz v iy oznaczają odpowiednio współrzędne x i y, na których położona jest liczba i w układance. Niech lewe górne pole ma współrzędne (0, 0) a prawe dolne (n 1, n 1). Przykładowa funkcja heurystyczna może mieć wówczas postać: h(v) = 1 ( vix ((i 1) mod n) + v iy (i 1)/n ). 2 i {1,2,...,n 2 } Przemysław Klęsk (KMSIiMS, ZUT) 33 / 44

Algorytm A Przykładowa ścieżka A dla puzzle 2 2 1 Odwiedzonych stanów: 15. Przemysław Klęsk (KMSIiMS, ZUT) 34 / 44

Algorytm A Przykładowa ścieżka A dla puzzle 3 2 1 Odwiedzonych stanów: 19. Przemysław Klęsk (KMSIiMS, ZUT) 35 / 44

Algorytm A Własności A i monotoniczność heurystyki Heurystyka jest na pewno dopuszczalna, jeżeli jest monotoniczna, tzn.: v, w h(v) d(v, w) + h(w). (1) Innymi słowy, dodanie do jakiejkolwiek ścieżki dodatkowego węzła powoduje, że nowa ścieżka jest niekrótsza od poprzedniej. A równość może mieć miejsce tylko, gdy dodamy węzeł poruszając się po prostej do celu. Jeżeli heurystyka h spełnia w/w warunek to algorytm A gwarantuje, że: (1) znalezione rozwiązanie jest optymalne (ścieżka najkrótsza), (2) sam algorytm jest optymalny w ramach h, tj. żaden inny algorytm używający h jako heurystyki nie odwiedzi mniejszej liczby stanów niż A. Niech h oznacza doskonałą heurystykę tj. taką, która ani nie przeszacowuje, ani nie niedoszacowuje. Algorytm pracujący na podstawie h jest także doskonały odwiedza możliwie najmniej węzłów. Stąd też oryginalnie rozróżniano dwie nazwy tego algorytmu A i A. Przemysław Klęsk (KMSIiMS, ZUT) 36 / 44

Algorytm A Jak A ma się do algorytmu Dijkstry i Best First Search? Przy ustawieniu v h(v) = 0 algorytm A staje się klasycznym algorytmem Dijkstry do poszukiwania najkrótszej ścieżki w grafie z punktu do punktu. Przy ustawieniu v g(v) = 0 algorytm A staje się algorytmem Best First Search. Nieistotna jest długośćścieżki, liczy się tylko osiągnięcie/odkrycie rozwiązania/rozwiązań (np. sudoku, problem n hetmanów). Przemysław Klęsk (KMSIiMS, ZUT) 37 / 44

Algorytm MIN-MAX Algorytm MIN-MAX (lub MINIMAX) Stosuje się do gier dwuosobowych jak np. szachy, warcaby, GO, itp.. Algorytm w wersji niezmodyfikowanej składa się z dwóch części: (1) budującej drzewo gry do zadanej głębokości (np. poprzez Breadth First Search), (2) przechodzącej drzewo od dołu w górę i nadającej oceny poszczególnym stanom gry, tak że w efekcie ocenione zostają możliwe ruchy pochodzące od stanu podstawowego. Przechodzenie drzewa w górę rozpoczyna się od wystawienia ocen stanom końcowym (liściom). Zwykle jest to heurystyka np. różnica pomiędzy liczbą bierek białych i czarnych. Następnie drzewo przechodzone jest poziomami w górę. Każdy poziom jest skojarzony z ruchami jednego z graczy. Jeden z graczy nazywany jest minimalizującym, drugi maksymalizującym. Przemysław Klęsk (KMSIiMS, ZUT) 38 / 44

Algorytm MIN-MAX Algorytm MIN-MAX (lub MINIMAX) Zwycięstwo gracza maksymalizującego reprezentowane jest przez (w szachach: białe matują czarne), a minimalizującego (czarne matują białe). Pozycje inne niż zwycięskie musimy oceniać heurystycznie. Np. jedna z najprostszych heurystyk dla szachów mierzy różnicę pomiędzy materiałem białych a czarnych, licząc piony za 1 pkt., skoczki za 3 pkt., gońce za 3.5 pkt, wieże za 5 pkt., hetmana za 9 pkt. Tylko poziom najniższy (stany liście) jest oceniany heurystycznie. Oceny dla wyższych poziomów wynikają z minimaksowej procedury przechodzenia drzewa w górę. Uwaga: w literaturze ruch jednego z graczy nazywany jest często półruchem (ang. ply), a przesuwanie się o jeden poziom w drzewie liczone jest jako ± 1 2. Dopiero 2 ruchy obu graczy traktowane są jako całe posunięcie. Przemysław Klęsk (KMSIiMS, ZUT) 39 / 44

Algorytm MIN-MAX Ilustracja fragmentu drzewa gry dla szachów Przemysław Klęsk (KMSIiMS, ZUT) 40 / 44

Algorytm MIN-MAX Algorytm MIN-MAX (lub MINIMAX) Rysunek: Źródło: http://en.wikipedia.org/wiki/image:minimax.svg Przemysław Klęsk (KMSIiMS, ZUT) 41 / 44

Algorytm MIN-MAX Algorytm MIN-MAX (lub MINIMAX) Podstawowym problemem algorytmu w wersji niezmodyfikowanej jest duża złożoność pamięciowa. Niech dla uproszczenia n oznacza średnią lub stałą liczbę ruchów dostępną nakażdym poziomie dla każdego z graczy (dla szachów n 40). Wówczas przejrzenie m poziomów głębokości wymaga O(n n n) = O(n } {{ } m ) pamięci. m Najbardziej znaną modyfikacją algorytmu, która redukuje w pewnym stopniu złożoność pamięciową, jest przycinanie α-β (ang. α-β cutoffs). Przemysław Klęsk (KMSIiMS, ZUT) 42 / 44

Algorytm MIN-MAX Algorytm MIN-MAX (lub MINIMAX) Efekt horyzontu Z uwagi na ograniczonągłębokość przeszukiwania, algorytm może cierpieć na tzw. efekt horyzontu następny ruch poza najgłębszym przejrzanym poziomem może okazać się katastrofalny dla jednego z graczy, mimo że poziom wyżej oceny są dla niego korzystne (np. w szachach nie rozpatrzenie aż do tzw. pozycji martwej kombinacji zbić). Przemysław Klęsk (KMSIiMS, ZUT) 43 / 44

Algorytm przycinanie α-β Algorytm przycinanie α-β Nie ma wydzielonych osobnych dwóch części (budowanie drzewa, minmax), drzewo jest po części budowane i oceniane równocześnie. Dla każdego stanu przechowywana jest para (α, β) oznaczająca odpowiednio gwarantowane dotychczas: minimalny zysk gracza maksymalizującego i maksymalną stratę gracza minimalizującego. Poddrzewa, które na pewno nie mogą wpłynąćna(α, β), są pomijane (nie byłyby one wynikiem optymalnego postępowania obu graczy). W optymistycznym przypadku złożoność O(n m/2 ). W efekcie algorytmowi można zadać większą głębokość przeszukiwania. Przemysław Klęsk (KMSIiMS, ZUT) 44 / 44