Wykonali: Aleksandra Kuchta, Łukasz Wójcik

Transkrypt

Wykonali: Aleksandra Kuchta, Łukasz Wójcik
Sztuczna Inteligencja,
Semestr trzeci,
Kierunek Informatyka,
Wydział Informatyki i Zarządzania,
Politechnika Poznańska
ATOLL
Wykonali:
Aleksandra Kuchta,
WFT, PP, nr 76690, rok IV
Łukasz Wójcik,
WIiZ, PP, nr 84908, rok II
Plan sprawozdania:
1. Strona tytułowa
2. Opis gry
3. Implementacja
3.1.
Reprezentacja stanu gry
3.2.
Generacja ruchów dopuszczalnych
3.3.
Metody przeszukiwania przestrzeni stanów gry - algorytmy grające
3.4.
Funkcja oceny heurystycznej stanu gry
4. Testy wydajności i porównania algorytmów
5. Wnioski, uwagi i podsumowanie
2. Opis gry.
Autorem gry, jej zasad i planszy jaką wykorzystaliśmy w implementacji jest Mark
Steere.
Il.1. Zdjęcia autora Marka Steere’a.
Jak utrzymuje autor pierwowzorem gry jest Hex, znana gra planszowa. Stanowi ona
pewien szczególny przypadek opisywanej przez nas gry. Różni się planszą i zasadą
podmiany za kamień przeciwnika zamiast ruchu na wolne pole (zasada ta nie
występuje w grze Atoll). O ile historia gry Atoll nie jest zbyt długa i barwna
(wymyślono ją w styczniu 2008 roku), to Hex ma za sobą wieloletnią tradycję. W
1942 roku, jak podaje Wikipedia ,„wynalazł” ją Piet Hein rozważając zagadnienie
„czterech barw”. Dotyczyło ono hipotezy, mówiącej o tym, że mapę można
pokolorować jedynie 4 kolorami tak, aby granica między państwami nie oddzielała
pól o tej samej barwie. Została wprowadzona w Instytucie Nielsa Bohra. Podobno
równocześnie grę wymyślił wybitny matematyk i laureat nagrody Nobla John Nash.
Historia głosi, że na uniwersytecie w Princeton (gdzie wykładał J. Nash), studenci
grywali w nią na heksagonalnych kafelkach na terenie uczelni.
Il. 2. Gra planszowa Hex, na której wzorował się autor projektując grę Atoll
Zasady gry którą się zajęliśmy są jasne i proste.
Została ona zaprojektowana dla 2 osób. Gra się na planszy, którą stanowi siatka
składająca się z heksagonalnych pół. Warianty plansz są różne, my opracowaliśmy
planszę w kształcie sześciokąta. Na obrzeżach znajdują się pokolorowane pola (tak
samo jak pionki-kamienie, które będziemy stawiać).
Il. 3. Różne warianty planszy gry Atoll.
My zaimplementowaliśmy wersję widoczną na ilustracji trzeciej po lewej stronie u
dołu.
Grę zaczyna gracz posiadający pionki czarne. Musi on postawić jeden kamień na
planszy, na wolnym polu. Nie ma możliwości odmowy ruchu. Po tym ruchu pora na
gracza białego, który postępuje podobnie jak gracz czarny.
Celem gry jest połączenie 2 przeciwległych wysp łańcuchem swoich pionków. Można
do tego wykorzystać obrzeża planszy.
W uogólnionej wersji plansza może mieć kształt dowolnej figury, na której
przeciwległych krańcach będą znajdować się pionki tego samego koloru.
Mimo, że nie wolno nam zmieniać zasad gry uznaliśmy, że kolor jest jedynie
wartością estetyczną i pozwoliliśmy na małą zmianę. Stawiamy pionki czerwone (w
zasadach czarne) i beżowe. Mamy nadzieje, że autor nie ma nic przeciwko.
3. Implementacja
3.1 Reprezentacja stanu gry
Plansza reprezentowana jest jako wektor 73 pól, z których każde posiada informacje o tym
do którego należy gracza oraz z którymi polami sąsiaduje.
 pion jest reprezentowany przez zmienną 'kto' w klasie pole – 0 oznacza puste pole, 1 gracza
czerwonego, 2 gracza białego.
 przykład planszy i jej reprezentacja w pamięci:

plansza[0] {
plansza[1] {
plansza[2] {
plansza[3] {
plansza[4] {
plansza[5] {
kto = 1; sasiedzi {1, 2, 61, 73}}
kto = 2; sasiedzi {0, 3, 4, 7, 73}}
kto = 0; sasiedzi {0, 4, 5, 8, 61}}
kto = 1; sasiedzi {1, 6, 7, 11, 72, 73}}
kto = 0; sasiedzi {0, 1, 2, 7, 8, 12}}
kto = 0; sasiedzi{2, 8, 9, 13, 61, 62}}
itd.
3.2 Generacja ruchów dopuszczalnych
Możliwe ruchy pamiętane są na liście.
 W grze nie występują żadne ruchy poza dostawianiem nowych pionów. Dostawienie pionu
powoduje usunięcie z listy możliwych ruchów numeru pola, na które postawiono pion.
 Lista wolnych pól jest mieszana przy każdym wywołaniu algorytmu Alfa-Beta lu Alfa-Beta FS
 Zastosowano także randomizację poprzez 60 krotne losowanie dwóch pozycji na liście i
zamianę ich.

3.3 Metody przeszukiwania przestrzeni stanów gry - algorytmy grające
W grze zastosowano następujące algorytmy:
algorytm AlfaBeta
 algorytm AlfaBeta z iteracyjnym pogłębianiem.

3.4 Funkcja oceny heurystycznej stanu gry






Zastosowana funkcja heurystyczna jest funkcją odległościową. Obliczane są najkrótsze
odległości pomiędzy przeciwległymi wyspami przy założeniu, że odległość do sąsiada o
kolorze gracza wynosi 0, do pustego pola 1, a do pola przeciwnika nieskończoność.
Wartością zwracaną przez funkcję jest 10 - (minimalna liczba ruchów gracza do wygranej)
pomniejszone o 2*(10-minimalna liczba ruchów gracza przeciwnego)
Funkcja domyślnie zwraca wartości z przedziału (-20, 10)
Wady:
• przy odpowiednim rozstawieniu pionków (tak, że 2 pionki tego samego gracza będą
miały dwóch wspólnych sąsiadów [układ kilku takich sytuacji]) algorytm może nie
wychwycić, że jest już na przegranej pozycji.
Zalety:
• dzięki składowej (2*10-min. gracza przeciwnego) algorytm gra w sposób
bezpieczniejszy – na pierwszym miejscu stawia blokowanie przeciwnika, a dopiero
potem atakuje.
Opis funkcji :
•
min1 = min(drogi gracza1)
•
min2 = min(drogi gracza2)
•
Ocena = (10 – min1) – 2*(10-min2)
4. Testy wydajności i porównania algorytmów
450000
400000
2
3
4
5
350000
300000
250000
AlfaBeta
324
6547
30918
404293
Iteracyjne
372
4760
22693
305549
AlfaBeta
200000
Iteracyjne
150000
100000
50000
0
1,5 2 2,5 3 3,5 4 4,5 5 5,5
Jak widać, algorytm z iteracyjnym pogłębianiem wypadł nieco lepiej od „czystej” AlfaBety. Nie
wpływa jednak znacząco na przeszukiwaną przestrzeń, przez co niemożliwe jest zwiększenie
głębokości przeszukiwania w sensownym czasie.
5. Wnioski, uwagi i podsumowanie






Z uwagi na cechy gry łatwo można zauważyć, że przestrzeń zmienia się w trakcie rozgrywki w
sposób stały, niezależnie od przebiegu rozgrywki. Odcięcia, które mogą powstać są bardzo
trudne do przewidzenia z uwagi na randomizację ruchów w każdym wywołaniu algorytmu.
Metoda z iteracyjnym pogłębianiem okazała się lepsza, dzięki niej powstało więcej odcięć w
trakcie działania alfa-bety.
Wygrana z komputerem nie sprawia większych trudności, wystarczy stawiać pionki tak, aby
miały wspólnych 2 sąsiadów. Nie udało się dostosować funkcji oceny heurystycznej tak, aby
wychwytywała takie sytuacje.
W grze nie ma prawa wystąpić cykl. Remis ogłaszany jest jedynie w przypadku, gdy żaden z
graczy nie będzie miał możliwości wygrania gry.
Funkcja oceny z pewnością może zostać ulepszona. Szansą na jej poprawę mogłoby być
znalezienie sposobu na wyeliminowanie przypadków gdy przeciwnik stawia pionki w sposób
opisany powyżej. Można ograniczyć też randomizację jedynie do pierwszego wywołania
algorytmu, kosztem jednak naturalnej gry algorytmu. Komputer grałby wtedy bardziej
schematycznie.
W trakcie wykonywania gry nie wystąpiły większe problemy natury implementacyjnej,
wszystkie drobne błędy spowodowane były słabą znajomością języka C#.

Podobne dokumenty