Wnioskowanie jako przeszukiwanie przestrzeni stanów

Podobne dokumenty
Wprowadzenie do Sztucznej Inteligencji

Wprowadzenie do Sztucznej Inteligencji

Heurystyki. Strategie poszukiwań

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

Wstęp do Sztucznej Inteligencji

Sztuczna Inteligencja i Systemy Doradcze

Algorytmy dla gier dwuosobowych

Heurystyczne metody przeszukiwania

Metody przeszukiwania

Wyznaczanie strategii w grach

Wprowadzenie do Sztucznej Inteligencji

Rozwiązywanie problemów metodą przeszukiwania

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

Tworzenie gier na urządzenia mobilne

Heurystyczne przeszukiwanie grafów gier dwuosobowych

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

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

Wybrane podstawowe rodzaje algorytmów

SZTUCZNA INTELIGENCJA

9.9 Algorytmy przeglądu

Programowanie dynamiczne i algorytmy zachłanne

Podstawy sztucznej inteligencji

Sztuczna Inteligencja i Systemy Doradcze

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

Wykład 7 i 8. Przeszukiwanie z adwersarzem. w oparciu o: S. Russel, P. Norvig. Artificial Intelligence. A Modern Approach

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

Sztuczna Inteligencja i Systemy Doradcze

Podstawy Sztucznej Inteligencji (PSZT)

Sortowanie topologiczne skierowanych grafów acyklicznych

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

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Ogólne wiadomości o grafach

Partition Search i gry z niezupełną informacją

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

TEORETYCZNE PODSTAWY INFORMATYKI

Poprawność semantyczna

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

Porządek symetryczny: right(x)

Podstawy Informatyki. Sprawność algorytmów

Heurystyczne przeszukiwanie przestrzeni stanów

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Rekurencja, schemat rekursji i funkcje pierwotnie rekurencyjne

Risk-Aware Project Scheduling. SimpleUCT

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Podstawy sztucznej inteligencji

Planowanie drogi robota, algorytm A*

Zaawansowane algorytmy i struktury danych

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

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

ĆWICZENIE 1: Przeszukiwanie grafów strategie heurystyczne

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Metody Optymalizacji: Przeszukiwanie z listą tabu

Znajdowanie wyjścia z labiryntu

Zaawansowane programowanie

Algorytmy z powrotami. Algorytm minimax

Wstęp do programowania

Matematyczne Podstawy Informatyki

Efektywność algorytmów

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Algorytmy i Struktury Danych

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

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

Programowanie w VB Proste algorytmy sortowania

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

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

Alfa-beta Ulepszenie minimax Liczba wierzchołk ow w drzewie gry. maksymalnie wd. minimalnie wbd/2c + wdd/2e Algorytmy przeszukiwania drzewa gry 5

Elementy kognitywistyki II: Sztuczna inteligencja. WYKŁAD V: Agent wciąż szuka rozwiązania (choć już nie na ślepo)

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

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

Matematyka dyskretna dla informatyków

Luty 2001 Algorytmy (4) 2000/2001

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.

Heurystyczne przeszukiwanie przestrzeni stanów

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

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

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

Heurystyczne przeszukiwanie grafów w gier dwuosobowych

WHILE (wyrażenie) instrukcja;

Programowanie dynamiczne cz. 2

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

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

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

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

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Algorytmy i struktury danych

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Jeśli czas działania algorytmu zależy nie tylko od rozmiaru danych wejściowych i przyjmuje różne wartości dla różnych danych o tym samym rozmiarze,

SID Wykład 4 Gry Wydział Matematyki, Informatyki i Mechaniki UW

WHILE (wyrażenie) instrukcja;

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

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

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

CZYM JEST SZTUCZNA INTELIGENCJA? REPREZENTACJA WIEDZY SZTUCZNA INTELIGENCJA PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

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

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

WPROWADZENIE DO SZTUCZNEJ INTELIGENCJI

Transkrypt:

Plan wykładu Wnioskowanie jako przeszukiwanie przestrzeni stanów Rozwiązywanie problemów jako poszukiwanie ścieżki rozwiązania Przestrzeń stanów jako graf skierowany Dokładne metody przeszukiwania przestrzeni stanów Przybliżone metody przeszukiwania przestrzeni stanów Systemy produkcyjne ba ab (1) ca ac (2) cb bc (3) Przestrzeń stanów jest to czwórka uporządkowana [N, A, S, GD], gdzie: cbac (3) (1) bcac cabc (2) (2) bacc acbc (1) (3) abcc abcc N jest zbiorem wierzchołków odpowiadających stanom w procesie rozwiązywania problemu A jest zbiorem łuków, odpowiadających krokom w procesie rozwiązywania problemu S jest niepustym podzbiorem N, zawierającym stany początkowe problemu GD jest niepustym podzbiorem N, zawierającym stany docelowe problemu. N zbiór stanów cbac (3) (1) Systemy produkcyjne N zbiór stanów A zbiór kroków cbac (3) (1) S zbiór stanów początkowych bcac cabc (2) (2) bcac cabc (2) (2) bacc (1) abcc acbc (3) abcc bacc (1) abcc acbc (3) abcc GD zbiór stanów docelowych 1

Stany w GD są opisane: 1. przez podanie własności stanów występujących w przeszukiwaniu 2. przez podanie własności ścieżki tworzonej podczas przeszukiwania Ścieżką rozwiązania nazywamy ścieżkę wiodącą przez ten graf z wierzchołka z S do wierzchołka w GD. cbac (3) (1) bcac cabc (2) (2) bacc acbc (1) (3) abcc abcc Dwie ścieżki rozwiązania dog(x) animal(x) (1) die(x) animal(x) (2) dog(fido) (3) die(fido) (4) (1) i (2) (1) i (3) dog(x) animal(x) (1) die(x) animal(x) (2) dog(fido) (3) die(fido) (4) dog(fido) die(fido) (5) dog(x) animal(x) (1) die(x) animal(x) (2) dog(fido) (3) die(fido) (4) animal(fido) (5) die(fido) (6) (4) i (6) (5) i (2) dog(x) animal(x) (1) die(x) animal(x) (2) dog(fido) (3) die(fido) (4) animal(fido) (5) dog(x) animal(x) (1) die(x) animal(x) (2) dog(fido) (3) die(fido) (4) animal(fido) (5) die(fido) (6) Klauzula pusta (7) Przykład przestrzeni stanów (4,3) (0,-3) (-4,0) 4l 3l (4,0) (0,3) (-4,0) (4,0) (3,-3) (0,0) (1,3) (4,3) (3,0) (-3,3) (-3,0) (0,3) (1,0) (4,3) (4,0) (0,3)(1,0) (...) (0,0) (3,3) (4,0) (0,3) (1,-1) (0,1) (0,3) (3,0) (4,2) (4,3) (-4,0) (4,1) (4,0) (0,2) (4,3) (2,3) (2,-2) (0,0) (2,0) (4,2) (2,0) (0,3)? 2l Metody rozwiązywania problemó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 jest ono optymalne? Jaka jest czasowa i pamięciowa złożoność obliczeniowa algorytmu? W jaki sposób interpreter może najlepiej zredukować złożoność przeszukiwania? Jak można zaprojektować interpreter najbardziej efektywny z punktu widzenia wykorzystanego języka reprezentacji wiedzy? Algorytmy przeszukiwania Zadaniem algorytmów przeszukiwania jest znalezienie ścieżki rozwiązania w przestrzeni problemu. Strategie przeszukiwania: wszerz w głąb w przód w tył Implementacja przeszukiwania: rekurencja. 2

Strategia przeszukiwania a złożoność Adam Małysz jest potomkiem Adama Mickiewicza. Adam Mickiewicz (179-155) dziecko1 dziecko 2 N 3 7... dziecko m... = 217... ojciec matka ojciec matka ojciec N = 2 7 Adam Małysz (197- ) = 12 matka Kiedy stosować przeszukiwanie w tył? Gdy cel lub hipoteza jest dana w sformułowaniu problemu, np. w dowodzeniu twierdzeń matematycznych, systemach diagnostycznych. Gdy liczba reguł możliwych do zastosowania rośnie szybko, a wczesna eliminacja celów może wyeliminować przeszukiwanie pewnych gałęzi. Gdy stan początkowy nie jest dany explicite, ale musi być rozpoznany. Przeszukiwanie wstecz może pomóc w pokierowaniu pozyskiwaniem danych (np. diagnostyka medyczna). Kiedy stosować przeszukiwanie w przód? Gdy wszystkie lub większość danych jest zawartych w sformułowaniu problemu (np. interpretacja). Gdy występuje duża liczba potencjalnych celów, ale jest tylko kilka możliwości zastosowania faktów i informacji wejściowych do konkretnej instancji problemu. Gdy trudno jest sformułować hipotezę docelową. Przeszukiwanie heurystyczne Funkcja oceny heurystycznej f(n) = g(n) + h(n) gdzie: g(n) mierzy aktualną długość ścieżki od stanu n do stanu początkowego h(n) jest heurystycznym oszacowaniem odległości stanu n od celu. Jeżeli taka funkcja jest realizowana ze strategią przeszukiwania best-first-search, to algorytm nazywa się algorytmem A. Przykład przestrzeni stanów (4,3) g * (n) g(n) (0,-3) (-4,0) 4l 3l (4,0) (0,3) 2l (-4,0) (4,0) (3,-3) (0,0) (1,3) (4,3) (3,0) (-3,3) (-3,0) (0,3) (1,0) h * (n) (4,3) (4,0) (0,3)(1,0) (...) (0,0) (3,3) (4,0) (0,3) (1,-1) (0,1) (0,3) (3,0) (4,2) (4,3) h(n) (4,1) (4,0) (-4,0) (0,2) (4,3)? Algorytm A * Jeżeli algorytm A wykorzystuje funkcję oceny heurystycznej taka, że h(n) h * (n), to otrzymany w ten sposób algorytm nazywa się algorytmem A *. (2,3) (2,0) (2,-2) (0,0) (2,0) (4,2) (0,3) 3

Dopuszczalność Algorytm przeszukiwania jest dopuszczalny (admissible), gdy gwarantuje znalezienie najkrótszej ścieżki do rozwiązania, jeżeli taka ścieżka istnieje. Wszystkie algorytmy A * są dopuszczalne. Algorytm przeszukiwania wszerz jest algorytmem A *. f(n) = g(n) + 0 Monotoniczność Funkcja h(n) jest monotoniczna, gdy: 1. h(n i ) - h(n j ) cost(n i, n j ) gdzie cost(n i, n j ) jest rzeczywistym kosztem (liczbą kroków) przejśćia od stanu n i do stanu n j 2. Ocena heurystyczna stanu docelowego h(goal) = 0. Heurystyka monotoniczna osiąga każdy stan najkrótszą ścieżką. Twierdzenie 1 Każda heurystyka monotoniczna jest dopuszczalna. DOWÓD Niech s 1, s 2,..., s g będzie dowolną ścieżką od jakiegoś stanu początkowego s 1 do celu s g. Na podstawie definicji monotoniczności, dla każdej pary kolejnych stanów na tej ścieżce zachodzi: h(s 1 ) - h(s 2 ) cost(s 1, s 2 ) h(s 2 ) - h(s 3 ) cost(s 2, s 3 )... h(s g-1 ) - h(s g ) cost(s g-1, s g ) h(s 1 ) - h(s g ) cost(s 1, s g ) = h * (s 1 ) h(s g ) = 0 h(s 1 ) h * (s 1 ) Poinformowanie Dla dwóch heurystyk h 1 i h 2 typu A *, jeżeli h 1 (n) h 2 (n) dla wszystkich stanów w przeszukiwanej przestrzeni, to o h 2 mówimy, że jest lepiej poinformowana niż h 1. h 1 (n) h 2 (n) h * (n) h 1 cbac (3) (1) bcac bacc abcc cabc (2) (2) (1) acbc abcc (3) h 2 NIM NIM 4

Algorytm - NIM Graczy oznaczamy i Liczba punktów wygrana przez gracza jest równocześnie liczbą punktów przegraną przez gracza. Zatem suma wygranych jest równa zero: gra o sumie zerowej. +1 Wartością gry nazywamy wygraną gracza. Gracz stara się zmaksymalizować wartość gry. +1-1 Gracz stara się zminimalizować wartość gry. Wartość gry 5 4 0 5 4 0 5 4 0 +1 +1-1 Procedura i Przeciwnicy posiadają taką samą wiedzę o przestrzeni stanów i stosują tę wiedzę konsekwentnie w celu wygrania gry. Jeżeli ojcem jest, to nadaj mu najmniejszą wartość spośród dzieci. Jeżeli ojcem jest, to nadaj mu największą wartość spośród dzieci. Podsumowanie Przeszukiwanie przestrzeni stanów jest ogólnym modelem rozwiązywania problemów Algorytmy dokładne przeszukiwania są zwykle zbyt pracochłonne Algorytmy heurystyczne wymagają dostosowania do charakterystyki rozwiązywanego problemu Można zdefiniować ogólne własności heurystyk: dopuszczalność, monotoniczność i poinformowanie evalutemin(u, B) //u is a min node Alpha=+infinity; if u =leaf return the score; else for all children v of u Val = evalutemax(v, B); alpha= Minalpha, Val; if Alpha<=beta then exit loop; Return alpha; evalutemax(u,b) // u is a Max node alpha=-infinity; if u=leaf return the score; else for all children v of u Val = evalutemin(v, B); Alpha = MaxAlpha, Val; if Alpha >= Beta then exit loop; Return Alpha; 5

Heurystyczne metody przeszukiwania przestrzeni stanów Plan wykładu Reprezentacja gry w postaci minimax i nega-max Zasady implementacji algorytmu minimax Algorytm alfa-beta Algorytm B* Podsumowanie Algorytm mini-max Algorytm mini-max A A B C D () (3) (-2) B C D E F G H I J K E F G H I J K Algorytm mini-max Algorytm mini-max A A -2 () (3) (-2) B C D -6-2 -4 B C D (9) (-6) (0) (0) (-2) (-4) (-3) E F G H I J K (9) (-6) (0) (0) (-2) (-4) (-3) E F G H I J K bestmin(x) = miny succ(x): Evaluate(Y) bestmax(x) = maxy succ(x): Evaluate(Y) 6

Algorytm nega-max -2 A 6 2 4 B C D E (9) (-6) F G (0) (0) H I (-2) (-4) J (-3) K best(x) = maxy succ(x): ( Evaluate(Y)) Implementacja przeszukiwania Reprezentacja aktualnego stanu w grze NIM Kółko i krzyżyk Szachy (2) (1,1,5) Generowanie kolejnych stanów ruchy odwrotne (undo) Funkcja oceny heurystycznej szybkość (złożoność obliczeniowa) dokładność (1,6) (1) (1,2,4) Np. liczba dopuszczalnych ruchów (min) pos depth Evaluate best succ Implementacja przeszukiwania przestrzeni stanów Successors pozycja w grze liczba poziomów w grafie do przeszukania funkcja obliczająca wartość gry z punktu widzenia gracza, który wykonuje ruch najlepsza wartość znaleziona na kolejnym poziomie funkcja generująca zbiór pozycji osiągalnych w jednym ruchu z aktualnej pozycji zbiór pozycji osiągalnych w jednym ruchu z aktualnej pozycji Jeżeli został osiągnięty ostatni poziom, to oblicz NegaMax watrość funkcji oceny heurystycznej dla int NegaMax (pos, depth) aktualnego stanu if (depth == 0) return Evaluate(pos); best = -INFINITY; succ = Successors(pos); while (not Empty(succ)) pos = RemoveOne(succ); value = -NegaMax(pos, depth-1); if (value > best) best = value; return best; NegaMax Wygeneruj zbiór int NegaMax (pos, depth) następników aktualnego stanu if (depth == 0) return Evaluate(pos); best = -INFINITY; succ = Successors(pos); while (not Empty(succ)) pos = RemoveOne(succ); value = -NegaMax(pos, depth-1); if (value > best) best = value; return best; wybiera stan ze zbioru succ NegaMax int NegaMax (pos, depth) if (depth == 0) return Evaluate(pos); best = -INFINITY; succ = Successors(pos); while (not Empty(succ)) pos = RemoveOne(succ); value = -NegaMax(pos, depth-1); if (value > best) best = value; return best; 7

NegaMax int NegaMax (pos, depth) if (depth == 0) return Evaluate(pos); Rekurencyjne wywołanie procedury best = -INFINITY; NegaMax z succ = Successors(pos); odpowiednio while (not Empty(succ)) zaktualizowaną wartością depth pos = RemoveOne(succ); value = -NegaMax(pos, depth-1); if (value > best) best = value; return best; NegaMax int NegaMax (pos, depth) if (depth == 0) return Evaluate(pos); best = -INFINITY; succ = Successors(pos); while (not Empty(succ)) pos = RemoveOne(succ); value = -NegaMax(pos, depth-1); if (value > best) best = value; return best; Wykładnicza złożoność obliczeniowa! Procedura alfa-beta Założenia: 1. Reguły gry nie pozwalają na wygenerowanie nieskończonej ścieżki. 2. Z każdego stanu można osiągnąć tylko skończoną liczbę stanów. 3. (Lemat nieskończoności): dla każdego stanu p istnieje liczba N(p) taka, że żadna rozgrywka startująca ze stanu p nie będzie trwała dłużej niż N(p) ruchów. Algorytm alfa beta alfa=- Algorytm alfa beta Algorytm alfa beta 9 alfa=- alfa=- beta=9 9 9

Algorytm alfa beta Algorytm alfa beta 7 alfa=- alfa=- beta=7 beta=7 Algorytm alfa beta alfa=- 7 Odcięcie alfa alfa=7 Cokolwiek będzie w tej gałęzi, to nie powiększy wartości alfa=7 beta=7 beta=7 6 6 Odcięcie alfa Odcięcie beta alfa=7 Przeszukiwanie można zakończyć poniżej dowolnego wierzchołka typu o wartości mniejszej lub równej wartości alfa dowolnego z jego poprzedników (typu ). beta=7 beta= 9

Odcięcie beta alfa=7 Cokolwiek będzie w tej gałęzi, to nie pomniejszy wartości beta = Odcięcie beta beta=7 9 beta= Przeszukiwanie można zakończyć poniżej dowolnego wierzchołka typu o wartości większej lub równej wartości beta dowolnego z jego poprzedników (typu ). 9 int AlphaBeta (pos, depth, alpha, beta) if (depth == 0) return Evaluate(pos); best = -INFINITY; succ = Successors(pos); while (not Empty(succ) && best < beta) pos = RemoveOne(succ); if (best > alpha) alpha = best; value = -AlphaBeta(pos, depth-1, -beta, -alpha); if (value > best) best = value; return best; Algorytm alfa-beta Jest algorytmem dokładnym W najgorszym razie przeszukuje całą przestrzeń (tak jak I, O(N D ) W najlepszym razie przeszukuje N ((D+1)/2) +N (D/2) 1 stanów W najlepszym razie pozwala dwukrotnie zwiększyć głębokość przeszukiwania N brachingfactor; D -głębokość Modyfikacje algorytmu alfa-beta Kolejność ruchów (Move ordering) Odcięcie alfa alfa=7 Cokolwiek będzie w tej gałęzi, to nie powiększy wartości beta Rezultaty wcześniejszych przeszukiwań Dynamiczne porządkowanie ruchów Statyczne porządkowanie ruchów beta=7 6 6 10 5 10 10

Odcięcie alfa alfa=7 7 1,6 2,5 3,4 beta=7 10 6 10 1,1,5 1,2,4 1,2,4 2,2,3 1,3,3 1,2,4 5 10 1,1,2,3 1,1,1,4 1,1,2,3 1,1,2,3 1,2,2,2 1,1,2,3 1,1,2,3 1,1,1,2,2 1,1,1,1,3 1,1,1,2,2 1,1,1,2,2 1,1,1,2,2 1,1,1,2,2 Nie ma podstaw do odcięcia Hashtables Killer moves History heuristics Static ordering Move ordering Move ordering Transposition table (Hashtable) Polega na haszowaniu identycznych stanów w różnych gałęziach. Może skrócić przeszukiwanie nawet czterokrotnie (co oznacza jeden poziom w grafie więcej w tym samym czasie). Move ordering Killer moves Polega na zapamiętywaniu ruchów, które we wcześniejszych fazach przeszukiwania doprowadziły do odcięcia. Takie ruchy są wykonywane jako pierwsze podczas eksploracji stanu. Po znalezieniu innego ruchu odcinającego, poprzedni jest zastępowany nowym. Move ordering History heuristics Jest rozszerzeniem poprzedniej heurystyki, polegającym na zapamiętywaniu wszystkich dobrych ruchów. Każde skuteczne zastosowanie ruchu zwiększa jego priorytet. W ten sposób tworzy się pewne uporządkowanie ruchów. 11

Move ordering Static ordering Jest heurystyką zależną od gry. Mimo, że preferowane są strategie niezależne od gry, to jednak w praktyce często korzysta się z informacji charakterystycznej dla rodzaju gry, aby zwiększyć efektywność heurystyki. Np. w warcabach można preferować ruchy, które zbijają więcej pionów przeciwnika itd. Modyfikacje algorytmu alfa-beta Aspiration search (windowing) W korzeniu przeszukiwanego drzewa przyjmuje się ograniczony przedział [alfa, beta] nazywany aspiration window. AlphaBeta (pos, depth, -, + ) AlphaBeta (pos, depth, -window, +window) Początkowe wywołanie procedury przyjmuje postać Jeżeli rozwiązanie leży poza oknem, to trzeba powtórzyć przeszukiwanie. Modyfikacje algorytmu alfa-beta Principal variation search (PVS) Polega na przeszukiwaniu gałęzi poza principal variation z oknem [localalfa, localalfa+1]. Zakłada się, że jest mało prawdopodobne, aby ruchy poza principal variation były dobre (przy założeniu perfect ordering) Modyfikacje algorytmu alfa-beta MTD(f) (Memory enhanced test) Polega na kilkakrotnym wywołaniu procedury alfa-beta ze zmieniającymi się oknami. Za każdym razem uzyskujemy dolne lub górne ograniczenie, które są zbieżne do prawdziwej wartości mini-max. int mtdf(struct position p, int firstguess,int depth) wartość int g,lowerbound, upperbound,beta; początkowa g=firstguess; upperbound=infinity; Aktualizacja lowerbound=-infinity; okna while(lowerbound<upperbound) if(g==lowerbound) beta=g+1; else beta=g; g=alphabeta(p,depth,beta-1,beta); if(g<beta) upperbound=g; else lowerbound=g; return g; Modyfikacje algorytmu alfa-beta Enhanced transposition cutoffs (ETC) W algorytmie alfa-beta z tablicą haszującą przegląda się wszystkie następniki bieżącego stanu przed rekurencyjnym wywołaniem procedury alfa-beta. W praktyce jest to koncepcja kosztowna i nakład zwraca się tylko w węzłach odległych od liści. 12

Modyfikacje algorytmu alfa-beta Quiescence search Jest to procedura wywoływana często zamiast funkcji Evaluate na głębokości depth=0. Ma to zapobiec tzw. efektowi horyzontu, który polega na ukryciu rychłej przegranej przez fakt, że nie przeszukujemy dalej przestrzeni. Quiescence search ma zapewnić, że Evaluate będzie wywoływana tylko w stabilnych stanach (w których nie ma bezpośredniego zagrożenia przegraną). Przeszukuje się tylko takie stany, które zwykle wiążą się z zagrożeniem (np. utrata piona w szachach). Modyfikacje algorytmu alfa-beta Iteracyjne pogłębianie Polega na wielokrotnym wywoływaniu przeszukiwania na określoną głębokość, przy czym w kolejnych powtórzeniach głębokość przeszukiwania rośnie. W kolejnych powtórzeniach można wykorzystać zdobytą wcześniej informację (zapisaną np. w tablicy transpozycji, czy w postaci okna aspiracji). Modyfikacje algorytmu alfa-beta Null move heuristics Polega na zaprzestaniu przeszukiwania w tych obszarach, gdzie znaleziono zadowalająco dobrą pozycję w grze. Wykrycie takiej pozycji polega na wykonaniu pustego ruchu i powtórzeniu przeszukiwania poziom niżej. Jeżeli wynik jest większy niż beta, to przeszukiwanie kończy się, w przeciwnym razie jest kontynuowane normalnie. Algorytm B * Strategia PROVEBEST polega na tym, że próbuje się zwiększać dolne ograniczenie najbardziej lewego wierzchołka tak, aby była ona nie gorsza od górnego ograniczenia dowolnego wierzchołka spośród rodzeństwa. Strategia DISPROVEREST polega na tym, że próbuje się zmniejszać górne ograniczenie wszystkich wierzchołków na głębokości 1 tak, aby żadna z nich nie była lepsza od dolnego ograniczenia najbardziej lewego wierzchołka. Przykład algorytmu B* Przykład algorytmu B* [-, ] [15,30] [,22] [15,25] [10,30] 13

Przykład algorytmu B* Przykład algorytmu B* [22,30] [22,30] [,22] [22,25] [10,30] [,22] [22,25] [10,30] [25,30] [22,26] [23,25] [25,30] [22,26] [23,25] [25,30] Przykład algorytmu B* [22,30] [,22] [22,25] [10,30] [22,26] [23,25] Deep Blue - podejście siłowe Analizuje 2*10 (200 mln) stanów w ciągu sekundy. Przestrzeń stanów dla szachów wynosi 10 120. W czasie dozwolonym analizuje 6 ruchów do przodu. Kasparow analizuje 3 ruchy do przodu. Deep Junior Analizuje mniej stanów, ale ma lepszą heurystykę. Kasparow również nauczył się specyfiki gry z komputerem. Deep Blue - podejście siłowe Deep Junior vs. Deep Fritz The latest iteration of the Deep Blue computer is a 32- node IBM RS/6000 SP high-performance computer, which utilizes the new Power Two Super Chip processors (P2SC). Each node of the SP employs a single microchannel card containing dedicated VLSI chess processors, for a total of 256 processors working in tandem. Deep Blue's programming code is written in C and runs under the AIX operating system. Deep Blue is able to explore 200,000,000 positions per second. Incidentally, Garry Kasparov can examine approximately three positions per second. Deep Fritz is running on an eight-core machine out of Hamburg Germany. The program is searching 13-14 million nodes per second, reaching a search depth of 20-21 ply. Deep Junior, playing out of London England, is employing the latest Intel Server technology with 16 cores. The program is running at 24 million nodes per second and consistently reaching search depths of 24 ply. http://www.chessbase.com/newsdetail.asp?new sid=3920 14