Metody i algorytmy sztucznej inteligencji
01.07.2007
Algorytm MinMax oraz uczenie ze wzmocnieniem w grze Mankala
Autor: Tomasz Elimer
Prowadzący: dr inż. Witold Paluszyński
Opis zadania
Celem zadania było zaimplementowanie algorytmu uczenia ze wzmocnieniem z wykorzystaniem metody MinMax w grze
Mankala. W tym celu wykorzystana została aplikacja znajdująca się pod adresem [1].
Program ten jest wynikiem podobnego zadania projektowego i zawiera gotową implementację gry oraz kilka
algorytmów graczy. Brak wśród nich metody badanej w tym projekcie, więc została ona zaimplementowana z
wykorzystaniem istniejących modułów.
Zasady gry
[5]
Plansza do gry złożona jest z ustawionych w dwóch rzędach pojemników, w których znajdują się 4 kulki (lub
ziarenka) oraz dwóch pojemników końcowych, na początku pustych. Każdy rząd należy do jednego z graczy. Ruch
odbywa się poprzez wyjęcie wszystkich kulek z jednego z własnych pojemników i umieszczaniu po jednej w
kolejnych pojemnikach, w kierunku przeciwnym do ruchu wskazówek zegara, włącznie z własnym pojemnikiem
końcowym. Jeżeli ostatnią kulkę umieścimy we własnym pojemniku końcowym, to przysługuje nam kolejny ruch. W
przeciwnym przypadku rusza się przeciwnik. Jeżeli mamy więcej kulek, umieszczamy je w pojemnikach
przeciwnika, a gdy dotrzemy do ostatniego z nich zostawiamy w nim wszystkie pozostałe kulki. Jeżeli
zakończymy ruch we własnym pojemniku i jest on pusty, to ostatnią kulkę oraz wszystkie kulki z położonego
naprzeciw pojemnika drugiego gracza przenosimy do naszego pojemnika końcowego. Gdy jeden z graczy pozbędzie
się wszystkich kulek ze swoich pojemników, gra kończy się, a przeciwnik dodaje kulki ze swoich pojemników do
swojego pojemnika końcowego. Wygrywa gracz, który zebrał więcej kulek.
Opis zastosowanego algorytmu
Dokładne omówienie metody MinMax oraz uczenia ze wzmocnieniem można znaleźć na stronach
[2],[3]. W tej części przedstawione zostanie tylko ich dostosowanie do postawionego zadania.
Uczenie ze wzmocnieniem
Algorytm uczenia ze wzmocnieniem zakłada nagradzanie i karanie podjętych działań w zależności od ich efektu.
Oceny dokonujemy po zakończeniu rozgrywki, odpowiednio modyfikując wartości każdego działania podjętego w
zaistniałych w partii stanów.
Przyjete wartości nagród i kar:
- zwycięstwo -> +2
- remis -> +1
- przegrana -> -1
Algorytm MinMax
Zastosowana metoda MinMax przewiduje posunięcia graczy na głębokość 3 tur poniżej aktualnego stanu. Warto
zauważyć, że zgodnie z zasadami gry graczowi może przysługiwać więcej niż jeden ruch z rzędu, co dodatkowo
zwiększa wartość posunięć. Wartość każdego zagrania szacowana jest funkcją:
moveValue = myGoal - oppGoal + Q
- myGoal - ilość kulek w pojemniku końcowym gracza
- oppGoal - ilość kulek w pojemniku przeciwnika
- Q - ocena ruchu wg algorytmu uczenia (jeśli ocena jest ujemna, to wartość ruchu się zmniejsza)
Jeśli dwa lub więcej ruchów mają taką samą wartość, zagranie wybieramy losowo spośród nich.
Implementacja
Pomijając kilka poprawek w pobranym kodzie źródłowym, implementacja algorytmów sprowadzała się do modyfikacji
algorytmu Q-uczenia. Do przechowywania danych wykorzystana została baza danych mySQL składająca się z dwóch
tabel q oraz nsa , o polach state, action, value. State i action
określają odpowiednio stan planszy (zapisany jako String, w którym liczby rozdziela znak ':') i podjętą w nim
akcję. Pole value przechowuje wartość Q lub ilość wystąpień danego stanu, w zależności od tabeli.
Tabela nsa nie jest istotna w działaniu algorytmu, ale została zachowana w celu weryfikacji poprawności
działania programu i ewentualnych badań częstotliwości wystąpień stanów.
Uruchamianie
Program jest aplikacją konsolową napisaną w języku Java i może być uruchamiany z linii poleceń wywołaniem:
java MancalaAgentPlay player1 player2 games
player1, player2 - określają algorytmy graczy, dopuszczalne są wartości:
- human - człowiek, pojemnik wybieramy wpisując jego numer (1-6) i potwierdzając klawiszem enter
uwaga! pojemniki gracza zawsze znajdują się na dole planszy
- random - gracz dokonujący losowych posunięć
- simple - zawsze wybiera pojemnik najbliżej pojemnika końcowego
- table-q-learner - uczenie algorytmu Q-uczenie
- exploitative-table - gracz wykorzystujący wiedzę z algorytmu Q-uczenie
- ann-q-learner - uczenie sieci neuronowej
- exploitative-ann - gracz wykorzystujący wiedzę sieci neuronowej
- minmaxlearn - uczenie metodą MinMax
- minmaxplay - gracz wykorzystujący wiedzę algorytmu MinMax
games - określa ilość rozgrywek
W zależności od konfiguracji systemu może być konieczne pobranie oraz instalacja serwera bazy danych
mySQL oraz specjalnego pliku umożliwiającego aplikacji połączenie z nim. Pliki te znajdują się na stronie
[4]. Aplikacja została przetestowana na bazach danych w wersji 4.1 oraz 5.0. Do połączenia można
wykorzystać J/Connector w wersji 3.09 lub 3.1. Aplikację należy uruchomić z parametrem -cp "ścieżka do
pliku J/Connector.jar;"( pamiętając o średniku na końcu).
Badania eksperymentalne
Przeprowadzone badania miały na celu określenie wydajności uczenia badanego algorytmu oraz porónanie go
z metodami dostępnymi w programie. Autorzy programu zaimplementowali algorytm Q-uczenia z bazą wiedzy
przechowywaną w bazie danych mySQL oraz wersję ANN z bazą wiedzy przechowywaną w sieci neuronowej. Dokładniejszy
opis można znaleźć na stronie projektu [1].
W pierwszym etapie badań każdy zawodnik rozegrał po 100 partii z każdym z przeciwników.
W ten sposób oceniamy
jego poziom początkowy w każdej parze. Następnie przeprowadzona została sesja treningowa, czyli uczenie
algorytmów w sesjach po 200 gier z każdym przeciwnikiem, w tym także z samym sobą. Badania postępów polegały na ponownym rozegraniu
100 partii z każdym z pozostałych graczy, z wykorzystaniem zdobytej wiedzy. W tabelach zebrane zostały
wyniki badań.
Wyniki badań
Ilość wygranych i przegranych partii przed uczeniem
| random | simple | Q-Learning | MinMax | ANN |
Q-learning | 88:9 | 0:0 | X | 61:39 | 0:0 |
MinMax | 88:9 | 42:54 | ? | X | 52:46 |
ANN | 82:12 | 0:0 | ? | 59:41 | X |
? - algorytm z niewyjaśnionych przyczyn nie działa w roli drugiego gracza
Ilość wygranych i przegranych partii po uczeniu
| random | simple | Q-Learning | MinMax | ANN |
Q-learning | 78:18 | 100:0 | X | 22:62 | 84:11 |
MinMax | 92:7 | 100:0 | ? | X | 87:12 |
ANN | / | / | ? | / | X |
/ - "brak pamięci" uniemożliwił przeprowadzenie badań
Wnioski
Uzyskane wyniki są jedynie małą częścią badań, jakie należałoby przeprowadzić, aby w pełni obiektywnie
ocenić postępy w nauce algorytmów. Jednak już w takiej próbce można zaobserwować pewne różnice w
poziomie gry. Jak widać, nawet krótki trening wystarczy, aby całkowicie przewyższych najprostszą strategię.
W przypadku Q-uczenia okazuje się on niewystarczający, aby sprostać losowemu wybieraniu ruchów. Porażka
z algorytmem MinMax prawdopodobnie wiąże się z jego lepszym wyszkoleniem, co widać w uzyskanych wynikach.
Wpływ na jakość uczenia może mieć także kolejność trenowania poszczególnych zawodników. Ostatniemu
uczestnikowi treningu przeciwstawiani są zawodnicy już wyuczeni, co może pozwolić mu na poznanie ich gry
już podczas treningu (a oni takiej możliwości nie mieli), bądź też postawić go przed zadaniem trudniejszym
niż mieli jego poprzednicy. Przy większej ilości gier treningowych różnica ta prawdopodobnie nie byłaby,
aż tak istotna.
W trakcie badań natrafiono na liczne utrudnienia, ale na podstawie uzyskanych wyników można stwierdzić,
że algorytm MinMax okazał się najskuteczniejszy. Taka skuteczność ma jednak
swoją cenę. Serie z udziałem tego gracza trwały nawet 10-krotnie dłużej niż średnia seria innych zawodników.
Tak długi czas działania związany jest z dużą ilością możliwości sprawdzanych przed podjęciem decyzji,
dodatkowo obciążonych niezbyt szybkim dostępem do bazy wiedzy.
- Strona wykorzystanego projektu
http://www.public.iastate.edu/~cstras/cs572project/cs572project-webpage.html
- Omówienie algorytmu MinMax
http://ai-depot.com/articles/minimax-explained/
http://www.seanet.com/~brucemo/topics/minmax.htm
- Omówienie uczenia ze wzmocnieniem
http://www.cs.ualberta.ca/%7Esutton/book/ebook/the-book.html
- Strona domowa mySQL
http://www.mySQL.org
- Więcej o grze Mankala
http://www.wikimanqala.org/wiki/Main_Page