AiSD - c minimax

advertisement
Algorytmy i struktury
danych
Drzewo stanów gry
Klasyfikacja gier
Przeglądanie drzew
Pozyskiwanie wiedzy
Status wybranych gier
Drzewo stanów
Stan S1
zdarzenie A
zdarzenie C
zdarzenie B
S2
S3
S4
D
E
F
S6
S7
S5
G
S8
I
H
S9
S10
Graf stanów
Stan S1
zdarzenie A
zdarzenie C
zdarzenie B
S2
S3
S4
D
E
F
S6
S7
S5
J
G
S8
I
H
S9
S10
Drzewo (graf) gry
Sytuacja S1
ruch A
ruch C
ruch B
S2
S3
S4
D
E
F
S6
S7
S5
G
S8
I
H
S9
S10
Definicja n-osobowej gry





Drzewo topologiczne z wyróżnionym wierzchołkiem A,
nazywanym punktem początkowym.
Funkcja wypłaty, która przyporządkowuje każdemu wierzchołkowi
końcowemu pewien wektor n-wymiarowy.
Rozbicie zbioru niekońcowych wierzchołków drzewa na n+1
zbiorów S0 , S1, ..... Sn , zwany zbiorami posunięć graczy.
Funkcję za pomocą, której możemy określić czy dany wierzchołek
topologicznego drzewa gry jest wierzchołkiem końcowym
Mówimy, że gra jest skończona, jeśli jej dendryt zawiera tylko
skończoną ilość wierzchołków. Większość gier towarzyskich to
gry skończone.
Definicja n-osobowej gry cd.



Rodzinę rozkładów prawdopodobieństwa, określonych dla
każdego wierzchołka ze zbioru S0 , na zbiorze wierzchołków
następujących bezpośrednio po nim.
Podrozbicie każdego ze zbiorów Si , dla i=1,...n, na zbiory Sij
zwane zbiorami informacyjnymi, takie że każde dwa wierzchołki z
tego samego zbioru informacyjnego mają tę samą ilość
wierzchołków następującą bezpośrednio po nich, ponadto żadne z
wierzchołków nie następuje po żadnym innym z tego samego
zbioru informacyjnego.
Określony dla każdego zbioru informacyjnego Sij zbiór
wskaźników Iij wraz z przyporządkowanym każdemu
wierzchołkowi X ze zbioru Sij wzajemnie jednoznacznym
odwzorowaniem zbioru Iij na zbiór wierzchołków następujących
bezpośrednio po X.
Strategia gry
Przez czystą strategię i-tego gracza rozumiemy funkcję,
która przyporządkowuje każdemu zbiorowi informacyjnemu Sij i-tego gracza jeden ze wskaźników z Iij .
Strategią mieszaną gracza (ang. mixed strategy) jest
rozkład prawdopodobieństwa na zbiorze jego czystych
strategii. W przypadku gier skończonych, gdzie gracz ma
tylko skończoną liczbę m strategii czystych, strategia
mieszana sprowadza się do wektora m-wymiarowego
x=(x1,.....,xm) spełniającego warunki:
Przykładowa gra
A
I
O
R
II
O
O
R
(-1,1)
(1,-1)
(1,-1)
R
(-1,1)
Gracz I wybiera orła (O) lub reszkę (R). Gracz II, nie znając wyboru
gracza I, wybiera również orła lub reszkę. Jeśli obydwaj wybrali to
samo, gracz II wygrywa złotówkę od gracza I, w przeciwnym przypadku
gracz I wygrywa złotówkę od gracza II.
Podział gier
Liczba graczy – gry mogą się różnić między sobą ilością graczy, przy
czym liczba graczy waha się od 1 do n
 Bilans gry – wektor wypłaty dla gry o n graczach przyjmuje postać
(p1,...,pn), gdzie pi jest wartością wypłaty przypadającego na gracza i
w końcowym wierzchołku drzewa ruchów.
 Złożoność gry – o złożoności gry decyduje przede wszystkim
rozmiar drzewa gry
 Popularność gry – w przypadku tej własności najlepszym kryterium
jest liczba aktualnych graczy oraz historia gry.
 Trudność gry – o trudności danej gry decyduje potrzeba ciągłego
nabywania doświadczenia przez gracza po to by podnosić swój
poziom gry.
 Kryterium zakończenia: „nagła śmierć” (o/x na nieskończonej
planszy) vs. stałe zakończenie (reversi).
 Informacje o stanie gry

Badania


Gry z dwoma graczami oraz brydż.
Gry z zerowym bilansem (o sumie zerowej) : w każdym wierzchołku
końcowym drzewa ruchów spełniony jest warunek :
n
p
i 1



i
0
Gdzie pi jest wypłatą przypadająca na gracza i. Strata jednego z
graczy powoduje tutaj jednoczesny zysk drugiego.
Gry nietrywialne: najlepsza strategia nie daje się otrzymać poprzez
matematyczną analizę wszystkich możliwych stanów gry przy
wykorzystaniu dostępnych obecnie komputerów.
Gry dobrze znane: uprawia je stosunkowo duża liczba graczy.
Gry wymagające doświadczenia: doświadczony gracz ma dużą
przewagę nad graczem początkującym, tj. istnieje wyraźna
zależności miedzy doświadczeniem gracza, a szansą zwycięstwa. Co
ciekawe dotyczy to równiez gier z czynnikiem losowym np. brydż,
trik-trak
Stan badań

Gry rozwiązane
• Go-Moku

Gry, dla których istnieją programy grające na
poziomie najlepszych graczy lub wyższym
• tryk-trak, warcaby (64), otello, szachy, brydż

Gry, w których dominują ludzie i prawdopodobnie
ten stan nie ulegnie zmianie w najbliższych latach
• go
Rozwiązywanie gier
Gry bardzo słabo rozwiązane (ang. ultra-weakly solved):
wszystkie początkowe pozycje mają określoną
teoretyczną wartość gry (np. Hex)
 Gry słabo rozwiązane (ang. weakly solved): dla
wszystkich początkowych pozycji można określić
strategię, dzięki której możemy osiągnąć teoretyczny
rezultat (przy rozsądnych zasobach obliczeniowych,
pamięciowych i czasowych)
 Gry mocno rozwiązane (ang. strongly solved): dla
wszystkich legalnych pozycji można wyznaczyć strategię
pozwalającą osiągnąć teoretyczną wartość.

Programy grające





Głębokie przeszukiwanie (Deep-blue: Deep Blue 32procesorowy komputer IBM SP-2, z każdym
procesorem połączonych było szesnaście
specjalizowanych procesorów szachowych: dwieście
milionów szachowych pozycji na sekundę.
Głębokość: co najmniej 12 pojedynczych ruchów.
Duży rozmiar pamięci (baza końcówek chinooka warcaby)
Pozyskiwanie wiedzy (automatyczne np. longistello –
othello lub od ekspertów np. komercyjne programy
szachowe)
Symulacje (brydż, poker, scrabble)
Rozumowanie bez zrozumienia (Proverb: krzyżówki)
Minimax
Określ – głebokość przeszukiwania
2. Dla węzłów oceń sytuację w kategoriach dobrej dla
programu (tj. wyższa wartość = lepsza sytuacja)
3. Propaguj sytuację dla węzłów wcześniejszych
wybierając odpowiednio
1.
•
•
dla węzła odpowiadającego sytuacji w której wykonuje
ruch program największą wartość spośród dzieci węzła
dla węzła odpowiadającego sytuacji w której wykonuje
ruch przeciwnik najmniejszą wartość spośród dzieci
węzła
Przeglądanie drzewa gry
S1
S2
S5
S6
S3
S7
S8
S9
S4
S10
S11
S12
S13
Ocena sytuacji
S1
S2
S5
S6
S3
S7
S8
S9
S4
S10
S11
S12
S13
5 3 8 3 4 0 6 1 2 1 1 5 8 0 4 4 6 4 2 1 2 5 7 4 5 7 2
Minimax
S1
S2
S5
8
S6
S3
4
S7
6
S8
5
S9
S4
8
S10
6
S11
2
S12
7
S13
7
5 3 8 3 4 0 6 1 2 1 1 5 8 0 4 4 6 4 2 1 2 5 7 4 5 7 2
Minimax
S1 5
S2 4
S5
8
S6
4
S3 5
S7
6
S8
5
S9
8
S4 2
S10
6
S11
2
S12
7
S13
7
5 3 8 3 4 0 6 1 2 1 1 5 8 0 4 4 6 4 2 1 2 5 7 4 5 7 2
AlfaBeta
Z: Podczas częściowej ewaluacji drzewa określone
zostają pewna wartości graniczne  węzła W
oznaczające najwyższą/najniższą aktualną wartość
2. Jeżeli podczas ewaliacji potomków w kolejnym
poddrzewie napotykamy węzeł podnoszący ocenę W
(dla ruchu przeciwnika) lub obniżający ocenę W
(dla ruchu programu) ignorujemy całe poddrzewo.
1.
Minimax – alfa-beta
S1 5
S2 4
S5
8
S6
4
S3 5
S7
6
S8
5
S9
8
S4 2
S10
6
S11
2
S12
7
S13
7
5 3 8 3 4 0 6 1 2 1 1 5 8 0 4 4 6 4 2 1 2 5 7 4 5 7 2
Ulepszenia




Zapamiętywanie uzyskanych dotychczas informacji – w ten
sposób unikamy powtarzania obliczeń dla tych samych lub
podobnych sytuacji występujących w drzewie ruchów.
Zapewnienie odpowiedniego porządku ruchów w drzewie –
dzięki temu zwiększa się prawdopodobieństwo wystąpienia
najlepszych ruch na początku przeszukiwania danego
poziomu drzewa.
Zmniejszanie okna przeszukiwania – początkowe okno
przeszukiwania można ustawić na oczekiwaną wartość +/zakładany/odgadnięty rozmiar okna (standardowo
początkowymi wartościami Alfy i Bety są +/ -) co może
zdecydowanie zredukować liczbę rozpatrywanych węzłów.
Ustalanie zmiennej głębokości szukania – metody te polegają
na dynamicznej zmianie głębokości przeszukiwania drzewa na
podstawie, zdobytej do tej pory informacji na temat sytuacji w
grze.
Symulacje
• Symulator losuje np. rozkład kart i rozgrywa partię.
• W ten sposób uzyskujemy pojedynczą wartość
•
•
•
•
symulacji,która składa się z liczby wziątek.
Cała partia zostaje następnie powtórzona poprzez rozdanie
innego układu kart dla przeciwników.
Badanie statystyczne zostanie wykonane wielokrotnie.
Zgromadzona wiedza pozwoli oszacować najlepsze
zagrania, z których wybieramy teoretycznie najlepsze.
Na przykład, jeśli 90% zagrań daną kartą prowadzi do
najlepszego rezultatu, gramy tą kartą. W oparciu o takie
badania, program może z dużą pewnością stwierdzić
zagranie jaką kartą jest najlepsze.
W programie musi być zaimplementowany algorytm
grający, korzystający z pełnej informacji, aby rozgrywać
poszczególne przypadki do końca.
Alternatywne podejście SSS*

SSS* (ang. State Space Search). Algorytm typu bestfirst, nie sprawdza potomków ostatnio sprawdzanego
węzła, lecz rozwija najlepiej oceniane z dotychczas
1
Fo   w  f
sprawdzanych. Udowodniono, że jest lepszy od alfa-beta
pod względem rozmiaru przeglądanego drzewa — każdy
węzeł odwiedzany przez SSS* jest też odwiedzany przez
alfa-beta, ale nie na odwrót.
n
i 1
i
i
• Problem: algorytm ten wymaga wykładniczej ilosci pamieci i
dlatego nie jest wykorzystywany w praktyce.
Alternatywne podejście B* i PB*

B*. Algorytm ten przypisuje pozycjom nie jedną wartość
lecz dwie: optymistyczne i pesymistyczne oszacowanie
wartości minimaksowej. Przegląda drzewo aktualizując
wartości potomków korzenia do momentu, aż ustali
wierzchołek, którego pesymistyczna wartość jest nie
mniejsza, niż optymistyczna każdego pozostałego.
Róznicą w stosunku do alfa-beta jest to, że B* nie ustala
wartości minimaksowej a jedynie znajduje najlepsze
posunięcie.
• Problem: konstrukcja funkcji oceniającej, która zwraca
wiarygodne optymistyczne i pesymistyczne wartości
minimaksowe.

(Probability-based B*). Rozwinieciem algorytmu B*, w
którym wartości graniczne zastąpiono rozkładem
prawdopodobienstwa.
Algorytm Liczb Spiskowych
Algorytm zakłada selektywne pogłębianie (ang. selective
deepening) tzn. niektóre gałęzie drzewa ruchów są głębiej
przeszukiwane od innych. Przeszukiwane są te części drzewa,
które dają największe prawdopodobieństwo zmiany wartości
korzenia drzewa. Ta strategia jest zarazem zaletą jak i wadą
algorytmu.
 Kolejnych wierzchołki drzewa są wybierane do rozwinięcia,
tak aby zawęzić możliwe wartości jakie może przyjmować
korzeń drzewa.
 Prawdopodobieństwo zmiany wartości korzenia drzewa
ruchów wyraża wartość liczby spiskowej.
 Liczba spiskowa przyjmuje wartość minimalnej liczby
węzłów końcowych, które muszą zmienić swoją wartość (
muszą zostać głębiej przeszukane) aby wartość korzenia
mogła ulec zmianie.

Algorytm Liczb Spiskowych



O tych końcowych węzłach mówi się, że spiskują aby
osiągnąć zamierzoną wartość korzenia. Zazwyczaj stosuje się
jakieś ograniczenie wielkości liczby spiskowej jako
kryterium zakończenia działania algorytmu: próg spiskowy
(CT).
CT (ang. conspiracy threshold) tj. minimalna liczba węzłów
konspiratorów wystarczająca do uznania danej wartości
korzenia za nieprawdopodobną.
Węzły w drzewie ruchów są tak rozwijane aby zawężać
przedział możliwych wartości korzenia, aż do momentu gdy
istnieje tylko jedna wartość korzenia, dla której liczba
spiskowa jest mniejsza od progu spiskowego.
• Jeżeli prawdopodobieństwo zmiany wartości korzenia przy
dalszym pogłębianiu drzewa ruchów będzie bardzo małe,
wtedy można zakończyć pogłębianie drzewa, jeśli nie wtedy
Algorytm Liczb Spiskowych
Dla przykładu: ile terminalnych węzłów musiało by zmienić wartość,
aby korzeń drzewa zmienił wartość na 4 (Vroot = 4).
Jeśli węzeł E zmieni swoją wartość na 4 wtedy korzeń drzewo
osiągnie wartość 4. Podobnie jeśli węzeł F zmieni swoją wartość na 4,
równieŜ wtedy korzeń drzewa osiągnie wartość 4. Wynika z tego, że
liczba spiskowa dla Vroot = 4 wynosi 1 (CN=1).
Algorytm Liczb Spiskowych
Przypadek gdy chcemy osiągnąć Vroot = 1.
 W tym przypadku węzły D lub E muszą osiągnąć wartość 1
oraz węzły F lub G muszą osiągnąć wartość 1. Wartość CN dla
Vroot =1 wynosi 2.
Algorytm Liczb Spiskowych

Na wyliczanie wartości liczby spiskowej istnieje prosta
metoda. Dla węzłów drzewa typu MAX, jeśli chcemy
zwiększyć jego wartość, wystarczy żeby zmieniła się wartość
tylko jednego z jego potomków.
 Wybieramy zawsze tego potomka, który wymaga najmniejszej
głębokości przeszukiwania potrzebnej do podniesienia jego
wartości.
 Jeśli chcemy obniżyć wartość węzła typu MAX, wtedy
musimy obniżyć wartości tych potomków, których wartość
jest większa od założonej.
 W tym przypadku musimy zsumować liczbę węzłów
spiskujących dla potomków MAXa.
 W przypadku węzła typu MIN sytuacja jest dokładnie
odwrotna.
Pozyskiwanie wiedzy




Tablice transpozycji (zapamiętywanie pewnych sytuacji w
grze razem z ich ocenami)
Bazy końcówek
Książka otwarć
Funkcja oceniająca
Funkcje oceniające
• Zbiór cech f, względem, których można oceniać pozycję gry. Dla
każdej z tych cech przyporządkujemy wagę w, której wartość
wyraża jak bardzo dana cecha wpływa na końcową ocenę pozycji.
Większość programów wykorzystuje liniową kombinację cech
oraz przypisanych do nich wag aby otrzymać wartość danej
n
pozycji.
Fo   wi  f i
i 1
• Zwykle takie strojenie funkcji oceniającej odbywa się ręcznie bez
pomocy algorytmów. Rozsądne dokładanie wiedzy do funkcji
oceniającej przynosi dużą poprawę jakości gry programu. Niestety
istnieją wyjątki od sprawdzonych zasad, które chcemy zawrzeć w
funkcji oceniającej.
Arcymistrz szachowy Kevin Spraggett: „Spędziłem połowę mojej
szachowej kariery ucząc się zasad silnej gry, a drugą połowę
swojego czasu poświęciłem ucząc się kiedy je łamać”.
Algorytm TDL (Temporal
Difference Learning)
• Algorytmów uczący się z krytykiem (ang. reinforcement
learning), tj. w trakcie uczenia nie są dostępne prawidłowe
odpowiedzi, a jedynie łączna ocena po całej serii reakcji.
Przykładem takiej sytuacji może być partia szachów, której wynik
jest oceną całej sekwencji ruchów.
• Celem uczenia z krytykiem jest propagacja wsteczna wyniku
końcowego gry, tak aby wpływać na ocenę węzłów drzewa,
poprawiając jakość tych ocen.
• Rozważmy serię ocen P1, P2, ..., PN. Są to oceny pozycji po
każdym ruchu (ruch programu i odpowiedź przeciwnika), a ich
wartości wyrażają szansę programu na zwycięstwo z ruchu na
ruch.
Na przykład w szachach dla pozycji początkowej P1 ma wartość
równą lub bliską zeru. W przypadku zwycięstwa PN =1, w
przypadku porażki PN =-1, dla ruchów pomiędzy pierwszym a Ntym oceny przybierają różne wartości z przedziału (-1,1).
Algorytm TDL cd.
• Jeśli wartość funkcji P dla pozycji t (Pt) jest mniejsza (większa) niż pozycji
t+1 (Pt+1), wtedy powinniśmy podnieść (obniżyć) ocenę pozycji t, żeby
lepiej przewidywała wartość pozycji t+1.
• Algorytmu TDL modyfikuje oceny, na podstawie różnic występujących po
sobie ocen.
• Uaktualnianie wektora wag w funkcji oceniającej odbywa się po zakończeniu
partii według wzoru:
gdzie:
 w – wektor wag
 N – liczba ruchów ( ruch zdefiniowany jest jako ruch programu i odpowiedź
przeciwnika)
 Dwt – zmiany wektora w obliczane po kaŜdym ruchu
Algorytm TDL cd.
• Różnice Dwt są obliczane po każdym ruchu programu i odpowiedzi
przeciwnika.





w – wektor wag, które podlegają strojeniu, t – numer aktualnie
analizowanego ruchu, Dwt – zmiana zbioru wag w ruchu t
Pt – wartość funkcji oceniającej w kroku t ( na końcu gry PN przyjmuje
wartość funkcji wypłaty),
Dt – różnica ocen kolejnych sytuacji po odpowiedzi przeciwnika
l (0<l<1) – współczynnik odpowiadający za to jak bardzo poprzednie oceny
wpływają na bieżącą zmianę wag (l =0 – brak wpływu, l=1 wszystkie
poprzednie ruchy są traktowane tak samo),
w Pk – zbiór cząstkowych pochodnych dla każdej składowej wektora w,
>0 – współczynnik uczenia ( małe  powoduje małe zmiany w, duże 
powoduje, że w bardziej się zmienia)
l i  są parametrami heurystyki, ich wartość powinna być dobierana
doświadczalnie
Algorytm TDL cd.
• Wzór na różnice wartości funkcji oceniającej między ruchem
t+1 a ruchem t
Dt = Pt+1 – Pt
Nauka powinna być przeprowadzana poprzez rozgrywanie serii
partii i modyfikację wag funkcji oceniającej po zakończeniu
każdej partii
TDL z powodzeniem zaimplementowano m.in. w
 najsilniejszym programie grającym w triktraka TD-Gammon
 programie szachowym Cilkchess
 programie szachowym KnightCap (tu jako wartości poczatkowe
zadano tylko ustalone wagi w części odpowiedzialne za ocenę
materialną pozycji pozostałe wagi zostały zestrojone przez
TDL)
Rozwiązane gry
Młynek (Nine Men Morris)
 Connect-Four
 Awari (gra typu Mankala)
 Go-Moku
 Qubic (trójwymiarowe kółko i krzyżyk 4x4x4)
 Nim
 L-game
 Fanorona

Bardzo słabo rozwiązane gry:
• Hex
Gry zdominowane przez
komputery





Warcaby (8x8) (Checkers)
Renju
Otello
Scrabble
Tryktrak (Backgammon)
Programy grające na poziomie

Mistrza świata
• Szachy
• Warcaby (10x10)

Najlepszych graczy
• Go (9x9)
• Chińskie szachy
• Brydż

Amatorskim
• Go
Download