Sprawozdanie z projektu "metody i algorytmy sztucznej inteligencji"

             Budowa strategii gracza oparta na grze logicznej warcaby.

Autor: Dariusz  Wielgosz
Prowadzący:
dr inż. Witold Paluszyński
Data: 11 czerwiec 2006



Rozpatrywany Problem:

Głównym zadaniem projektu było opracowanie algorytmu wyznaczającego najlepszy ruch pionka w oparciu o wartość funkcji oceniającej. Do tego celu wykorzystany został standardowy algorytm MiniMax.


Historia gry w warcaby:

Historia gry w warcaby sięga 3000 lat p.n.e. kiedy to w starożytnym Egipcie, znana była planszowa gra Senet - prekursorka dzisiejszych warcabów. Jej twórcą, wedle wierzeń dawnych Egipcjan, był bóg Tot - bóg mądrości i wynalazca pisma (hieroglifów). W starożytnej Helladzie Grecy pasjonowali się grą w Petteia (kamyki) - warcaby greckie. Według mitologii greckiej jeden z jej bohaterów Palamades wynalazł grę w warcaby podczas oblężenia Troi. Grecka Petteia w starożytnym Rzymie przekształciła sie w Latrunculi (grę w rozbójników) - obecnie znana głównie pod nazwą warcabów rzymskich. Współczesne warcaby, powstałe na południu Europy w średniowieczu, pochodzą prawdopodobnie od gry nazywanej Alquerque (opartej na znanej przed 1000 r. Arabom grze El-Quirkat). Istnieją uzasadnione podejrzenia, że to właśnie do gry w Alquerque, na południu Francji, pierwszy raz użyto planszy złożonej z ułożonych na przemian jasnych i ciemnych pól - czyli dzisiaj znanej nam szachownicy.

W pierwszej połowie XVIII w. na terenie Francji pojawiła się nowa wówczas odmiana gry w warcaby na 100-polowej planszy nazwana przez samych Francuzów "warcabami na wzór polski", dziś nosząca miano warcabów międzynarodowych. Według legendy twórcą nowych warcabów miał być polski oficer Franciszek Żubr. Z Francji poprzez Belgię i Holandię warcaby polskie podbiły niemal cały kontynent europejski. Dziś są najbardziej znaną oraz popularną odmianą warcabów na całym świecie, szczególnie jako dyscyplina sportowa.



Wykorzystane algorytmy:

W grze został wykorzystany algorytm "mini-max".Jest to algorytm składający się z dwóch typów węzłow : max i mini. Algorytm jest standardowo stosowany we wszelkich programach grających w gry planszowe i nie tylko. Celem algorytmu jest wskazanie w danej sytuacji ruchu dającego graczowi strategię wygrywającą, lub przynajmniej dającego możliwie duże prawdopodobieństwo zwycięstwa.

Nazwa algorytmu bierze źródło od przyjętej w nim strategii postępowania: symulując na zmianę ruchy własne i przeciwnika, znajdując się na poziomie przeciwnika wybieramy ruch najgorszy dla gracza, natomiast na poziomie gracza wybieramy ruch dla niego najlepszy. Poniższe drzewo ilustruje tą strategię. Stan gry oceniany jest następująco: 

                                                                   
                                                      bb


Łatwo się domyślić, że analizując drzewo gry w ten sposób, nie da się dojść do liści drzewa, tj. do sytuacji w której gra jest rozegrana. Zmusza to do zastosowania heurystycznych funkcji oceniających stan gry. Algorytm przeszukuje wtedy drzewo gry do pewnego ustalonego poziomu na którym stan gry jest ustalany przez zadaną funkcję. Odpowiednie tej funkcji jest kluczem do sukcesu programu.                                                                                                            Rys. 1





 
Funkcje oceniające:



                                                                              Funkcja trzech obszarów:

                                                                               aaa

                                                                                                                           Rys.2

Na Rys. 2 przedstawiona jest plansza do gry w warcaby wraz z początkowym ustawieniem pionków do gry, a także zaznaczone są  trzy obszary oznaczone odpowiednio kolorami: niebieskim, zielonym i czerwonym. Funkcja oceny polega na rozpoznaniu położenia pionka  i przyporządkowaniu mu wartości tego obszaru (punktujemy każdego pionka znajdującego się w obszarze niebieskim, czerwonym, zielonym odpowiednio x, y, z punktami,damkę traktujemy jako n pionków).Następnie wyznaczamy sumę wszystkich wartośći pionków gracza oraz przeciwnika i odejmujemy sumę wartości pionków gracza od sumy wartośći pionków przeciwnika.


                                                                                                          Funkcja pionkowa (prosta):

                                      rt

                                                                                                                                 Rys.3

Powyższy rysunek przedstawia sposób  realizacji  funkcji pionkowej. Jest to bardzo prosta funkcja oceniająca polegająca  na  punktowaniu  każdego pionka gracza i pionka przeciwnika taką samą  liczbą punktów, (każdego pionka punktowałem 2 pkt natomiast damke 5 pkt), następnie obliczamy liczbę pionków obu graczy i  dla każdego z nich sumujemy ich punkty w zależności od wartości pionka. Po wykonaniu operacji sumowania wyznaczamy ich różnice. Otrzymany wynik porównujemy z pozostałymi ocenami.. 


                                                                                                             Funkcja krawędziowa:

                                         df

                                                                                                           Rys.4


W funkcji tej rozróżniamy dwa rodzaje pionków. Pionki krawędziowe znajdujące sie na polach  przylegających  do krawędzi  planszy , a także pionki  środkowe znajdujący się poza obszarem oznaczonym czerwoną linia. Każdy z pionków  krawędziowych  punktujemy podwójnie w przypadku damek sytuacja jest podobna.
Następnie wykonujemy standardową operację sumowania i odejmowania.



Testowanie funkcji oceniających:

Po zaimplementowaniu poszczególnych funkcji oceniających przyszedł czas na ich testowanie. Każda z funkcji podłączona została do drzewa w którym głębokość przeszukiwania wynosiła 6. Dla każdej funkcji oceniającej przeprowadzono po dziesięć partii gier kontrolnych które pozwoliły uzyskać  podstawowe informacje  o  efektywności każdej z funkcji oceniających. W tym teście najlepiej  wypadła  funkcja  oceniająca  "trzech obszarów" dlatego tez na niej skupiłem największą uwagę.
W celu poprawienia efektywności  powyższego algorytmu  wykonywałem  pewne zamiany  położenia i wielkości punktowanych obszarów. Wykonywane w tym celu testy nie przyniosły większych efektów w postaci poprawienia funkcji oceniającej.
 


Opis wykonanego programu:


                                         qwe

                                                                                             Rys.5

Do testowania funkcji oceny wykorzystałem w całości napisany przeze mnie program do gry w warcaby. Ruchy pionków gracza  wykonywane są za pomocą myszki. Gra rozpoczyna się od  ruchu gracza. Wszystkie ruchy gracza i komputera  zapisywane są  w kolumnach  obok planszy. Program został napisany  w środowisku programistycznym Borland Builder6. Poszczególne funkcje oceniające były podpinane do kodu źródłowego.

                         


Ciekawostka:   

Jaki jest poziom mistrzów świata?

Program grający w warcaby implementujący podejście zaproponowane przez Chellapila i Fogel'a został wpisany do Księgi Rekordów Guiness'a jako pierwszy komputer, który pokonał ludzkiego mistrza świata w jakiejkolwiek grze. Głębokość analizy w tym programie sięgała powyżej 70. Dla porównania, aby pokonać początkującego gracza wystarczy analiza 5-7 ruchów wgłąb, dla gracza średnio zaawansowanego potrzeba ich 11.



Podsumowanie:

Ważnym czynnikiem jaki możemy zauważyć podczas stosowania funkcji oceny jest czas wykonywania ruchów poszczególnych pionków , wraz ze zwiększeniem głębokości przeszukiwania drzewa. Przedstawione powyżej funkcje oceniające nazwałem w zależnośći od ich charakterystycznych cech, gdyż nie spotkałem się  z  podobną funkcją lub jej sprecyzowną nazwą.
 


Wykorzystane materiały:

1.  Algorytm MiniMax - http://binboy.sphere.pl/index.php?show=122&lang=en&drukuj=true.
2. 
Paweł Pelc, Zastosowanie metod przeszukiwania heurystycznego w grach opartych na zasadach warcabów.,Praca magisterska napisana pod   kierunkiem prof. dr hab. Krzysztofa Lorysia
3.   http://www.wpk.p.lodz.pl/~pawian/warcaby/algorytm.html
4.
Algorytm MiniMax - http://binboy.sphere.pl/index.php?show=122&lang=en&drukuj=true.
5.
Czesc druga -warcabyhttp://www.gutenberg.org/files/15201/15201-8.txt -czesc druga warcaby













Valid HTML 4.01 Transitional