Znajdowanie strategii w grach z niepełną informacją przez ewolucję
Transkrypt
Znajdowanie strategii w grach z niepełną informacją przez ewolucję
Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki Marek Kiszkis Nr albumu: 262948 Znajdowanie strategii w grach z niepełną informacją przez ewolucję sieci neuronowych, na przykładzie pokera Texas Hold’em ze stałym limitem Praca licencjacka na kierunku MATEMATYKA Praca wykonana pod kierunkiem dra hab. Dominika Ślęzaka Instytut Matematyki Zakład Logiki Matematycznej Maj 2012 Oświadczenie kierującego pracą Potwierdzam, że niniejsza praca została przygotowana pod moim kierunkiem i kwalifikuje się do przedstawienia jej w postępowaniu o nadanie tytułu zawodowego. Data Podpis kierującego pracą Oświadczenie autora (autorów) pracy Świadom odpowiedzialności prawnej oświadczam, że niniejsza praca dyplomowa została napisana przeze mnie samodzielnie i nie zawiera treści uzyskanych w sposób niezgodny z obowiązującymi przepisami. Oświadczam również, że przedstawiona praca nie była wcześniej przedmiotem procedur związanych z uzyskaniem tytułu zawodowego w wyższej uczelni. Oświadczam ponadto, że niniejsza wersja pracy jest identyczna z załączoną wersją elektroniczną. Data Podpis autora (autorów) pracy Streszczenie Praca jest opisem badań mających na celu znajdowanie strategii w grach z niepełną informacją przez ewolucję sieci neuronowych o ustalonej strukturze. Przedstawiony jest stan badań w tym temacie i wyniki eksperymentów przeprowadzonych w ramach pracy. Słowa kluczowe systemy decyzyjne, sieci neuronowe, algorytmy ewolucyjne, gry, strategie Dziedzina pracy (kody wg programu Socrates-Erasmus) 11.0 Matematyka, Informatyka 11.4 Sztuczna inteligencja Klasyfikacja tematyczna 91A35 Decision theory for games 92B20 Neural networks, artificial life and related topics 91A60 Probabilistic games; gambling Tytuł pracy w języku angielskim Finding robust strategies in imperfect information games with evolutionary neural networks, on the example of Fixed-Limit Texas Hold’em Spis treści Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0.1. Struktura pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 1. Podstawowe pojęcia . . . 1.1. Gry . . . . . . . . . . 1.2. Sieci neuronowe . . . . 1.3. Algorytmy ewolucyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 8 9 2. Poker i strategie w pokerze . . . . . . . . . . . . . . . . 2.1. Texas Hold’em ze stałym limitem . . . . . . . . . . . . 2.2. Texas Hold’em bez limitu . . . . . . . . . . . . . . . . 2.3. Strategie w pokerze Texas Hold’em ze stałym limitem 2.3.1. Strategie „oparte na wiedzy” (knowledge-based ) 2.3.2. Strategie oparte na symulacji rozgrywki . . . . 2.3.3. Strategie przybliżające równowagę Nasha . . . 2.3.4. Strategie wykorzystujące słabości . . . . . . . . 2.3.5. Inne podejścia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 12 12 13 13 13 13 14 3. Poprzednie prace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Klasyfikacja wzorców zachowań w pokerze bez limitu: podejście ewolucyjne head-start [4] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Opis modelu agenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2. Opis ewolucji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3. Problemy z pracą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Agenci pokera Texas Hold’em bez limitu tworzeni przez ewolucję sieci neuronowych [9] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1. Opis modelu agenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2. Problemy z pracą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Znajdowanie silnych strategii pokera Texas Hold’em przy użyciu ko-ewolucji Pareto i deterministycznego zagęszczania [10] . . . . . . . . . . . . . . . . . . 3.3.1. Opis modelu agenta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2. Opis ewolucji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3. Zalety pracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4. Problemy z pracą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4. Porównanie wyników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. Widoczne problemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.1. Kosztowna symulacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.2. Ciężko się dobrze porównać . . . . . . . . . . . . . . . . . . . . . . . . 15 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 16 16 18 18 18 19 19 20 20 21 21 21 21 22 4. Zakres eksperymentów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5. Wyniki eksperymentów . 5.1. Opis eksperymentów . 5.2. Rezultaty . . . . . . . 5.2.1. Słabe wyniki . . . . . 25 25 26 27 . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 . . . . . . . . . . . . 6. Wnioski i praca na przyszłość . . . . . . . . . . . . . . . . . . . . 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wstęp Gry są coraz bardziej popularnym tematem badań. Nie powinno to nikogo dziwić – wszak pojawiają się one w wielu dziedzinach nauki; na przykład w ekonomii, biologii, czy oczywiście, informatyce. Logicy już dawno zauważyli wartość gier i poza klasycznymi ich zastosowaniami w logice, jak gry Ehrenfeuchta–Fraïsségo, nauczyli się wykorzystywać teorię gier do dziedzin, wydawałoby się, z grami niezwiązanych: modelowania systemów wieloagentowych czy obliczeń interaktywnych. A na styku teorii gier i projektowania algorytmów mamy algorytmiczną teorię gier. Chyba każdy z nas nieustannie w coś gra; czy to dla rozrywki i przyjemności, czy jako trening umysłu, wreszcie grają ludzie dla pieniędzy. Mamy tysiące istniejących gier do wyboru; wymyślamy też własne. Grać można samemu, we dwoje, lub z wieloma innymi graczami. Można nawet i z komputerem. Programy komputerowe grające w szachy grają, już od jakiegoś czasu, na poziomie przynajmniej porównywalnym z najlepszymi (ludzkimi) graczami na świecie. Łatwe gry można przy użyciu komputera rozwiązać, tzn. znaleźć strategię wygrywającą (jeśli istnieje), co pozwoli wygrać z każdym przeciwnikiem. Coraz więcej naukowców próbuje tworzyć wciąż lepsze programy (agentów) do gry w szachy, scrabble, pokera czy go. Koncepcyjnie, zasada działania takiego agenta jest prosta: wykonywać jak najlepsze ruchy. Niech agent przeszuka przestrzeń stanów gry i wybiera te ruchy, które są najlepsze. Tak naprawdę, używamy algorytmu minimax [13]. Jeśli przestrzeń stanów jest zbyt duża, stosujemy heurystyki, alfa-beta obcięcia. Ale co jeśli nie możemy tak po prostu przeszukać przestrzeni stanów? Jest tak na przykład w przypadku gier z niepełną informacją lub gier z elementem losowości. Do takich gier należy chociażby poker, brydż sportowy czy nawet scrabble, a prostym przykładem gry z niepełną informacją są statki. Nie mając pełnej informacji o stanie gry, nie możemy bezmyślnie użyć mocy obliczeniowej komputera do przejrzenia wszystkich możliwych stanów. Tworząc agenta do takiej gry, przed twórcą pojawia się jeden znaczny problem: skąd program komputerowy ma czerpać wiedzę? Jak go nauczyć grać? Szczególnie jeśli twórca programu nie jest ekspertem w tej dziedzinie. Weźmy brydża – dojście do pewnego poziomu profesjonalizmu zajmuje przecież wiele lat. Istnieją setki książek na temat brydża, tysiące ludzi poświęca na jego naukę całe życie. Nie sposób przerobić tak wielkich ilości materiału, a nawet jeśli ma się tę wiedzę – jak podzielić się nią z programem komputerowym? Może inne podejście byłoby bardziej odpowiednie? Na przykład: niech program sam się uczy. Niech przejrzy zapisy wszystkich dostępnych partii brydża i wywnioskuje, jakie ruchy są dobre w jakich sytuacjach. Niech uczy się też na swoich błędach i dopasowuje swoją strategię w miarę potrzeb. Ale to nadal wydaje się trudne do zrealizowania. Przeprowadzenie wystarczająco dużej ilości rozgrywek z graczami ludzkimi zajęłoby zbyt długo; ciężko też czasem jednoznacznie ocenić czy pojedynczy ruch jest zły czy dobry. Jest to wręcz niemożliwe, gdy nie znamy ogólnej strategii agenta. Należałoby więc raczej oceniać strategię jako całość. W tej pracy skupimy się na jeszcze całkiem innym podejściu do tego problemu: użyciu 5 algorytmów ewolucyjnych. Podejście to jest używane np. w [11], [10]. Idea jest prosta – na początku tworzona jest populacja graczy. Następnie, przez wiele pokoleń, odbywa się ich ewolucja, w której przeżywają najlepsi gracze. Oni też „rozmnażają się” tworząc nowych agentów. Spodziewamy się, że w wyniku takiej ewolucji, stopniowo w miarę upływu czasu będziemy uzyskiwali coraz lepszych agentów; a dzięki technikom mającym na celu urozmaicenie populacji, sprawdzimy wiele możliwych strategii. Jednymi z ważniejszych pytań, na które powinniśmy sobie odpowiedzieć wybierając takie podejście, są np.: • Jak reprezentować (modelować) strategie (agentów)? • Od jakich agentów zaczynamy ewolucję? • Jak mierzyć jakość agentów? • Jak "rozmnażać" agentów ? • Kiedy powinniśmy zakończyć obliczenia? Skupiamy się na jednej grze – pokerze Texas Hold’em ze stałym limitem. Należy jednak podkreślić, że prezentowane tu podejście daje się z powodzeniem uogólnić na inne gry - jeśli tylko umiemy w satysfakcjonujący sposób odpowiedzieć na pytania postawione powyżej. Naszym celem jest zbadanie, do jakich wyników prowadzi podejście pokrótce opisane powyżej; poker został wybrany z powodu istniejącej już na ten temat literatury i prowadzonych badań próbujących stosować podejścia tego typu. 0.1. Struktura pracy Struktura niniejszej pracy jest następująca: Rozdział 1 opisuje postawowe pojęcia używane w tej pracy, z zakresu teorii gier, sieci neuronowych i algorytmów ewolucyjnych. Rozdział 2 jest wprowadzeniem w tematykę pokera. Opisujemy w nim zasady gry w pokera Texas Hold’em ze stałym limitem i strategie w pokerze. Rozdział 3 jest analizą poprzednich prac traktujących o obliczaniu strategii gry w pokera przez ewolucję sieci neuronowych. Rozdział 4 opisuje zakres przeprowadzonych przez nas eksperymentów. W Rozdziale 5 prezentujemy wyniki tychże eksperymentów. Rozdział 6 zawiera wnioski i sugeruje prace na przyszłość w tym temacie. Głównym celem naszej pracy było poprawienie wyników Noble’a [10]. Wyniki przeprowadzonych eksperymentów pokazują, że rzeczywiście udało się tego dokonać. Wykazaliśmy, że nawet niewielkie zmiany w matematycznym modelu strategii czy w stosowanych algorytmach mogą prowadzić do dużo lepszych wyników. Należy jednak zaznaczyć, że równie małe zmiany mogą też odnieść zgoła przeciwny skutek i doprowadzić do powstania szczególnie słabych strategii. Cała trudność polega więc na tym, żeby przewidzieć, jakie zmiany mogą polepszyć wyniki, a jakie - pogorszyć. Odpowiedzi na to pytanie szukaliśmy właśnie w ramach tej pracy. 6 Rozdział 1 Podstawowe pojęcia W tym rozdziale opiszemy pojęcia używane w pracy: podstawowe pojęcia teorii gier, sieci neuronowe i algorytmy ewolucyjne. 1.1. Gry Definicja 1 (Strategia) Strategia to opis zachowań gracza, definiujący jego działanie w każdej możliwej sytuacji (stanie gry). Na ogół, decyzja nie jest wybierana jednoznacznie, ale raczej obliczane są prawdopodobieństwa z jakimi agent wykonuje każdy ruch. Dzięki podejmowaniu każdej z decyzji z pewnym niezerowym prawdopodobieństwem, nawet najprostsza strategia nie jest całkowicie przewidywalna. Strategie dzielimy na statyczne i dynamiczne, w zależności od tego, czy zmieniają się w trakcie gry. Będziemy utożsamiać graczy z ich strategiami. Definicja 2 (Równowaga Nasha) Rozważmy grę, w której bierze udział n graczy o ustalonych strategiach. Jeśli żadnemu z graczy nie opłaca się zmienić strategii (przy ustalonych strategiach przeciwników), powiemy, że strategie te są w równowadze Nasha. Innymi słowy, strategie są w równowadze Nasha jeśli każdy gracz gra optymalnie w stosunku do danych przeciwników. Kolejnym kryterium podziału strategii jest możliwość odniesienia przewagi nad innymi graczami. Strategie przybliżające równowagę Nasha mają na celu jak najlepszą grę z najgorszym (dla nas) możliwym przeciwnikiem. Ich głównym celem jest nie przegrać. Z drugiej strony są strategie maksymalne, tj. wykorzystujące możliwie najbardziej słabości przeciwników. Zauważmy jednak, że oddalając się od równowagi Nasha, strategie maksymalne przejawiają pewne słabości, przez co same stają się podatne na wykorzystanie przez innych graczy. Rozważmy teraz elementy pewnego uniwersum U. Załóżmy, że mamy m kryteriów oceny jakości elementów U; czyli jakość oceniamy funkcją f : U → Rm . Kryteria oceny są, z założenia, nieporównywalne. Przyjmijmy też, dla ułatwienia, że większe wartości f oznaczają lepszą ocenę. Definicja 3 (Pareto dominacja) Niech û, v̂ ∈ U, f (û) = (u1 , u2 , . . . , um ), f (v̂) = (v1 , v2 , . . . , vm ). Powiemy że û Pareto-dominuje v̂, wtedy i tylko wtedy gdy ∀i : ui ≥ vi . 7 Nieformalnie mówiąc, û dominuje v̂ jeśli jest od niego lepszy przy każdym kryterium oceny. Zauważmy, że jeżeli û nie dominuje v̂ ani v̂ nie dominuje û, to dla pewnego j mamy uj > vj , i dla pewnego k mamy uk < vk , czyli û i v̂ są nieporównywalne. Definicja 4 (Front Pareto) Dla danego zbioru U ⊆ U, frontem Pareto zbioru U nazywamy zbiór wszystkich elementów z U , które nie są zdominowane (w sensie Pareto) przez żaden inny element z U . 1.2. Sieci neuronowe Definicja 5 (Sieć neuronowa) (Sztuczną) siecią neuronową z jedną warstwą ukrytą, o wejściach X = {x1 , x2 , . . . , xn }, neuronach ukrytych Y = {y1 , y2 , . . . , ym } i wyjściach Z = {z1 , z2 , . . . zk }, z funkcją aktywacji h : R → R, nazywamy parę funkcji f1 : X × Y → R, f2 : Y × Z → R. Funkcje te nazywamy wagami krawędzi sieci neuronowej. Definicja 6 Wartością [z] wyjścia z sieci neuronowej zdefiniowanej tak jak powyżej jest X [z] = h [y] · f2 (y, z) y∈Y gdzie X [y] = h [x] · f1 (x, y) x∈X gdzie [x] ∈ R oznacza wartość wejścia x. Należy wspomnieć, że nie ma chyba uniwersalnej definicji sieci neuronowej. Istnieją modele znacznie bardziej skomplikowane niż zdefiniowany powyżej, taka definicja jednak wystarcza w naszym przypadku. Obszerniejszy opis sieci neuronowych można znaleźć np. w [14]. Przykład 1 (Sieć neuronowa) Poniżej przedstawiamy przykładową sieć neuronową o trzech wejściach, dwóch neuronach ukrytych i jednym wyjściu. Dla jasności, pominięte zostały zerowe wagi. x1 0.32 & y1 −0.42 & 8 x2 −0.17 z1 0.72 & 8 y2 1.09 x3 Przyjmijmy że funkcja aktywacji jest zdefiniowana jako h(x) = wacji została użyta w pracy Noble’a [10]. 8 x 1+|x| . Taka funkcja akty- Dla sieci neuronowej z powyższego przykładu, dla [x1 ] = 0.11, [x2 ] = 0.6, [x3 ] = −0.26 mamy [y1 ] = h([x1 ] · 0.32) = h(0.0352) = 0.034, [y2 ] = h([x2 ] · (−0.17) + [x3 ] · 1.09) = h(−0.102 + 0.2834) = h(0.1814) = 0.1535 i wreszcie [z1 ] = h([y1 ] · (−0.42) + [y2 ] · 0.72) = h(−0.0143 + 0.1105) = h(0.0962) = 0.0878. Należy wspomnieć tutaj o jednej szczególnej własności sieci neuronowych. Jeśli traktujemy sieć neuronową jako aproksymację funkcji wielu zmiennych, to prawdziwe jest Twierdzenie 1 (Cybenko) Użycie dwóch warstw ukrytych umożliwia osiągnięcie dowolnej dokładności aproksymacji dowolnej funkcji, przy dostatecznie dużej liczbie neuronów ukrytych. A przy pewnych założeniach na aproksymowaną funkcję wystarczy jedna warstwa ukryta: Twierdzenie 2 (Cybenko, Hornik et al.) Dowolna ciągła nieliniowa funkcja może być zaproksymowana z żądaną dokładnością za pomocą sieci neuronowej z jedną warstwą ukrytą zawierającą dostatecznie dużo neuronów ukrytych. Dowody tych twierdzeń można znaleźć w [3] i [6]. Problemem jest jednak to, że powyższe twierdzenia są niekonstruktywne. Dzięki nim wiemy, że dowolną funkcję możemy aproksymować pewną siecią, nie wiemy jednak jaką. Co prawda istnieją pewne dobre praktyki sugerujące strukturę sieci odpowiednią dla danego problemu. Na przykład uznaje się, że liczba neuronów w warstwie ukrytej powinna być równa mniej więcej pierwiastkowi z iloczynu liczby neuronów wejściowych i wyjściowych. Dokładniejszy opis można znaleźć np. w [8] czy [16]. Należy jednak pamiętać, że są to jedynie wskazówki i nie ma żadnej gwarancji, że zastosowanie tych rad będzie prowadzić do osiągnięcia dobrych wyników w każdym problemie. Sieć która dobrze aproksymuje daną funkcję może mieć dowolnie wiele neuronów ukrytych. Nie jest znany żaden sposób na obliczanie takich sieci. Z pomocą przychodzą nam algorytmy ewolucyjne. 1.3. Algorytmy ewolucyjne Historia algorytmów ewolucyjnych sięga połowy XX wieku [1]. Idea działania takich algorytmów jest prosta - mają służyć do symulowania procesu ewolucji biologicznej. Algorytmy ewolucyjne mogą być użyte do przeszukiwania przestrzeni rozwiązań pewnego problemu w celu znalezienia optymalnego (lub prawie optymalnego) rozwiązania, zwłaszcza tam gdzie inne metody zawodzą (np. przestrzeń rozwiązań jest zbyt duża). Rozwiązania problemu traktujemy jako osobników w procesie ewolucji. Zarys działania algorytmu ewolucyjnego wygląda następująco: 1. Wylosowanie początkowej populacji osobników 2. Proces ewolucji, w którym w każdym pokoleniu następuje: (a) Ocena obecnej populacji (selekcja) (b) Najlepiej ocenione osobniki biorą udział w reprodukcji poprzez krzyżowania (wytworzenie nowego elementu na podstawie dwóch wybranych) i mutacje (drobne losowe zmiany w pojedynczym osobniku) (c) W populacji zostają nowe osobniki i te najlepsze z poprzedniego pokolenia. Osobniki o słabej ocenie są odrzucane. 9 3. Ewolucja kończy się, gdy zostaną spełnione pewne warunki końcowe, np. przeminięcie określonej liczby pokoleń lub uzyskanie osobników o odpowiednio wysokiej ocenie. Obszerniejszy opis algorytmów ewolucyjnych można znaleźć w [5]. W tej pracy chcemy modelować strategie do gry w pokera przez sieci neuronowe (o ustalonej strukturze) i dokonywać ewolucji tych strategii za pomocą algorytmu ewolucyjnego opisanego powyżej. Należy wspomnieć, że takie podejście było badane już od długiego czasu; obszerne prace na ten temat można znaleźć np. w [7] czy [15]. W naszym zastosowaniu, ewolucja sieci neuronowych nie będzie zmieniać struktury sieci: liczba warstw i neuronów ukrytych pozostaje ta sama. Mutacje wprowadzają losowe zmiany w połączeniach między neuronami, a w wyniku krzyżowania dwóch sieci (rodziców) powstaje sieć, w której waga każdego połączenia między neuronami jest średnią z wag odpowiednich połączeń u rodziców. 10 Rozdział 2 Poker i strategie w pokerze 2.1. Texas Hold’em ze stałym limitem W tym podrozdziale opiszemy pokrótce zasady gry w Pokera Texas Hold’em ze stałym limitem (Fixed-Limit Texas Hold’em). Obszerniejsze opisy zasad znajdują się w źródłach, np. [17]. Rozgrywka składa się z wielu rozdań, w których uczestniczy od 2 do 10 graczy. Dopuszcza się zmiany graczy (przyjście nowego gracza lub opuszczenie stolika przez obecnego gracza), ale tylko pomiędzy rozdaniami (skład nie może zmieniać się podczas rozdania). W każdym rozdaniu jeden z graczy jest rozdającym (dealer ), a dwóch kolejnych (na lewo od rozdającego, zgodnie z ruchem wskazówek zegara) wnosi do puli wymuszone stawki: tzw. małą ciemną i dużą ciemną. Następnie każdemu z graczy rozdawane są po dwie karty, poczynając od gracza na lewo od rozdającego i rozdając zgodnie z ruchem wskazówek zegara. Są to tzw. zakryte karty (hole cards), widoczne tylko ich właścicielom. W tym momencie zaczyna się pierwsza runda licytacji (pre-flop). W każdej z czterech rund licytacji, każdy z graczy ma do wyboru trzy możliwości: • spasować (fold ) Gracz który spasuje, traci wszystkie żetony, które wniósł do puli w tym rozdaniu i nie bierze już udziału w dalszej części rozdania. • sprawdzić (call ) Gracz może wyrównać wartość obecnego zakładu, wnosząc do puli odpowiednią ilość żetonów • podbić stawkę (raise) Gracz może podbić wartość obecnego zakładu. W wersji pokera ze stałym limitem, można podbijać tylko o ustalone stawki, np. $1 w pierwszych dwóch rundach i $2 w kolejnych trzech rundach. Każdą rundę licytacji zaczyna gracz na lewo od gracza który wniósł dużą ciemną, a licytacja postępuje zgodnie z ruchem wskazówek zegara. Runda kończy się, jeśli wysokość zakładu zostanie ustalona przez graczy (po tym jak żaden z graczy nie ma zamiaru podbijać, czyli gdy wszyscy sprawdzą lub spasują). W wersji pokera ze stałym limitem mamy też dodatkowe ograniczenie: w jednej rundzie licytacji żaden gracz nie może podbić więcej niż trzy razy. Po pierwszej rundzie licytacji, rozdawany jest flop: trzy karty wspólne (community cards), widoczne dla każdego z graczy. Dochodzi wtedy do drugiej tury licytacji, w której biorą udział wszyscy gracze którzy dotychczas nie spasowali, i ponownie licytując, ustalają wysokość 11 zakładu. Ponownie, kiedy wszyscy aktywni gracze wniosą do puli taką samą ilość żetonów, wykładana jest czwarta karta (turn). Na tych samych zasadach dochodzi do trzeciej rundy licytacji, po której wykładana jest piąta karta (river ), po czym ma miejsce ostatnia runda licytacji. Po ostatniej rundzie licytacji następuje wyłożenie kart w celu wyłonienia zwycięzcy. Wygrywa (i zdobywa wszystkie żetony z puli) ten z graczy, który z pięciu kart wspólnych i (swoich) dwóch zakrytych ułoży najlepszy układ. Zwycięzca może też zostać wyłoniony wcześniej, jeśli w którymkolwiek momencie wszyscy poza jednym graczem spasują. Możliwymi układami kart są, od najmocniejszego: • Poker (5 kolejnych kart w jednym kolorze; np. 4 karo – 8 karo) • Kareta (4 karty tej samej wartości) • Full (trójka i para) • Kolor (5 kart w tym samym kolorze) • Strit (5 kolejnych kart nie w kolorze) • Trójka (3 karty tej samej wartości) • Dwie pary • Para • Wysoka karta Jeśli więcej niż jeden gracz ma ten sam układ (np. karetę), wygrywa ten, który ma najwyższe karty. W przypadku remisu, pula jest dzielona pomiędzy zwycięzców. Nie będziemy tutaj wchodzić w szczegóły zasad, można je znaleźć w źródłach. Celem gry jest zdobycie jak największej liczby żetonów w całej rozgrywce. 2.2. Texas Hold’em bez limitu Należy tutaj wspomnieć także o innej, bardziej popularnej odmianie pokera Texas Hold’em: wersji bez limitu. Od opisanej powyżej różni się tylko tym, że stawki można podbijać dowolnie wysoko; gracz może nawet wnieść do puli wszystkie swoje żetony (tzw. wejście za wszystko, all in). Mimo że coraz więcej graczy wybiera wersję bez limitu, nie będziemy się nią zajmować, z kilku powodów. Po pierwsze, decyzja do podjęcia jest trudniejsza: jest więcej możliwych decyzji niż tylko pas, sprawdzenie, podbicie. Po drugie wydaje się, że nawet drobna zmiana strategii może mieć drastyczny wpływ na wynik, dużo większy niż w wersji ze stałym limitem. Nawet jeden zły ruch (np. wejście all-in w złym momencie) może zepsuć całą dobrą grę. Wersję bez limitu, jako trudniejszą, zostawiamy na przyszłe badania. Reszta naszych rozważań dotyczy tylko wersji pokera Texas Hold’em ze stałym limitem. 2.3. Strategie w pokerze Texas Hold’em ze stałym limitem W kontekście pokera ze stałym limitem, strategia (patrz definicja 1) odwzorowuje stan gry w jedną z trzech decyzji jaką podejmuje agent: pas, sprawdzenie, podbicie. 12 Strategie gry w pokera, zwłaszcza te zrealizowane w postaci programu komputerowego, są często określane mianem pokerbotów. Badania nad nimi są prowadzone już od długiego czasu. Pokrótce opiszemy teraz różne podejścia do pokerbotów prezentowane w publikacjach naukowych. Należy pamiętać, że przedstawiona tu lista możliwych podejść zdecydowanie nie jest kompletna, nie staramy się też opisywać ich zbyt szczegółowo. Dokładniejszy opis można znaleźć w [12], a niezmiernie dokładny przegląd w [2]. 2.3.1. Strategie „oparte na wiedzy” (knowledge-based ) Do stworzenia strategii opartej na wiedzy potrzebny jest znawca tematu pokera. Taki znawca stara się zaprojektować wygrywającą strategię, korzystając ze swojej wiedzy i doświadczenia. Najprostszym przykładem jest zestaw pewnych reguł: np. „ jeśli masz parę asów, zawsze podbijaj” albo „ jeśli obie twoje karty są niższe niż 9 i pewien gracz podbił, to spasuj”. Trochę bardziej wyrafinowane jest użycie pewnych wskaźników opisujących np. siłę ręki gracza czy ryzyko jakie trzeba podjąć żeby pozostać w grze. Problemy są łatwe do zauważenia: jest niezwykle trudne stworzyć niesprzeczny zbiór reguł pokrywający wszystkie przypadki w grze. Dlatego, pokerboty tego typu często utożsamiają ze sobą zbyt wiele istotnie różnych stanów gry, podejmując w nich tę samą decyzję. Strategie powstałe w wyniku takiego podejścia są poza tym statyczne, a to może być wykorzystane przez innych graczy. 2.3.2. Strategie oparte na symulacji rozgrywki W tym podejściu staramy się przejrzeć drzewo gry w celu znalezienia najlepszego ruchu. W przeciwieństwie do tradycyjnego algorytmu minimax, drzewo gry przeglądamy losowo (ponieważ nie umiemy przewidzieć optymalnych ruchów pozostałych graczy, ani tego jakie karty zostaną rozdane). Symulujemy tak przebieg rozgrywki aż do wyłożenia kart, kiedy możemy ocenić ile żetonów wygramy lub przegramy, gdy gra potoczy się w ten sposób. Przeprowadzając taką losową symulację wiele razy, możemy estymować wartość oczekiwaną wygranej w zależności od decyzji podjętej na początku. Strategie powstałe w wyniku tego podejścia niestety (wbrew być może intuicji) nie są o wiele lepsze niż strategie oparte na wiedzy, potrafią wygrywać tylko ze słabymi, niedostosowującymi się przeciwnikami. 2.3.3. Strategie przybliżające równowagę Nasha W tym podejściu, przy pomocy rozważań z teorii gier, starano się obliczać strategie grające jak najlepiej z każdym możliwym przeciwnikiem. Powstałe w wyniku tego strategie, nawet jeśli nie przegrywają z dobrymi graczami, minimalnie wygrywają ze słabymi. 2.3.4. Strategie wykorzystujące słabości Kolejną kategorię tworzą strategie zupełnie z przeciwnego bieguna: starające się jak najbardziej wykorzystywać słabości przeciwników. Ważną cechą wspólną takich strategii jest modelowanie przeciwnika. Podejmują one decyzje na podstawie oczekiwanych decyzji innych graczy, które są przewidywane dzięki modelowaniu przeciwników. Modelowanie przeciwników można realizować na wiele różnych sposobów. Prostym przykładem modelu przeciwnika są statystyki mówiące np. jak często podejmuje on poszczególne 13 decyzje. Bardziej wyrafinowane podejście mogłoby przeanalizować zapisy rozgrywek dostępnych online i pogrupować strategie tam napotkane na podstawie, ogólnie mówiąc, stylu gry – następnie starać się dopasować przeciwnika do znanych już modeli. 2.3.5. Inne podejścia Oczywiście, stosowane są też inne podejścia. Przykładem może być użycie sieci bayesowskich albo wnioskowanie z przypadków (case-based reasoning), w którym staramy się zapamiętywać wszystkie sytuacje napotkane w dotychczasowych grach, razem z najlepszymi ruchami w tych sytuacjach. Kiedy mamy do podjęcia nową decyzję (w nowej sytuacji), porównujemy ten przypadek z przypadkami napotkanymi wcześniej, wybierając ruch np. przy użyciu algorytmu k najbliższych sąsiadów. Na szczególną uwagę zasługuje jednak, według nas, jeszcze inne podejście, zaproponowane przez Noble’a [10]. Jest to zastosowanie sieci neuronowych i algorytmów ewolucyjnych. Strategie przedstawiamy jako sieci neuronowe, które jako wejścia mają podłączone informacje na temat obecnego stanu gry (a być może także o przebiegu wcześniejszych rozgrywek z tymi samymi graczami), a wyjściami są relatywne prawdopodobieństwa podjęcia każdej z decyzji. Jednak wbrew, być może, oczekiwaniom, nie uczymy tych sieci na żadnych danych treningowych. Uczenie odbywa się poprzez ewolucję strategii. Idea ewolucji została pokrótce opisana w sekcji 1.3, szczegółowy opis jest zamieszczony w sekcji 3.3. Zastanówmy się, jakie są konsekwencje przyjęcia tego podejścia do problemu. • Znaną własnością sieci neuronowych jest to, że neurony w warstwach pośrednich reprezentują pewne cechy stanu gry. Sieci uczą się obliczać te cechy, a na podstawie ich wartości podejmowana jest decyzja. Nie ma tu znaczenia czy sieci są uczone metodą propagacji wstecznej, czy w wyniku ewolucji: niestety, nie wiemy jakie cechy reprezentują te neurony. • Spodziewamy się, że w wyniku ewolucji powstaną dobre strategie. Jednak wiemy że ciężko zrozumieć jak naprawdę działa taka sieć neuronowa, zwłaszcza gdy ma wiele wejść, wiele neuronów i połączeń między nimi. Musimy więc pogodzić się np. z tym, że nie będziemy umieli delikatnie zmienić otrzymanej strategii żeby poprawić jej działanie w przypadkach z którymi nie radzi sobie zbyt dobrze. • Ale z drugiej strony nie wymaga to praktycznie żadnej wiedzy z dziedziny pokera. Strategie walczą między sobą, dosyć łatwo też ocenić która z nich jest lepsza. Nowe strategie powstają „same” w wyniku ewolucji. W przypadku, gdy ewolucja zaczyna się od losowych sieci, do stworzenia dobrych strategii wystarczy sama znajomość zasad pokera. • Niestety, sieci neuronowe w tym przypadku są ciężkie do uczenia klasyczną metodą propagacji wstecznej. Wynika to stąd, że nie zawsze wiadomo jak stwierdzić, czy podjęta decyzja jest dobra czy zła. Ciężko ocenić jakość pojedynczej decyzji, np. kiedy agent gra zgodnie ze swoją taktyką, której nie znamy bądź nie rozumiemy. Nie jest to wielki problem w naszym przypadku – chcemy, by uczenie odbywało się przez ewolucję. Dzięki temu omijamy wspomnianą wadę pokerbotów jako sieci neuronowych. Wydaje się więc, że tworzenie strategii pokera za pomocą algorytmów ewolucyjnych jest idealnym tematem do badań. Poprzednie prace z tego tematu pokazują, że w wyniku takiego podejścia powstają zaskakująco dobre strategie. W tej pracy chcielibyśmy potwierdzić zasadność tego podejścia w ogólności. Dokładniej zaś, chcemy pójść dalej i poprawić rezultaty pracy Noble’a [10]. 14 Rozdział 3 Poprzednie prace Niniejszy rozdział przedstawia poprzednie publikacje mające szczególne znaczenie dla tej pracy. Wszystkie z nich próbują obliczać strategie gry w pokera za pomocą algorytmów ewolucyjnych. Każdą wymienioną pracę oceniamy pod względem następujących kryteriów: • Reprezentacja strategii • Modelowanie przeciwników • Sposób oceniania agentów • Wiarygodność oceny agentów • Optymalizacje parametrów 3.1. Klasyfikacja wzorców zachowań w pokerze bez limitu: podejście ewolucyjne head-start [4] 3.1.1. Opis modelu agenta Warto zauważyć, że autorzy skupiają się na wersji pokera Texas Hold’em bez limitu, co jak zauważyliśmy jest trudniejszym wariantem pokera. Praca jest godna uwagi, mimo że nie modeluje strategii jako sieci neuronowe. Agenci rozważani w pracy podejmują jedną z pięciu możliwych decyzji (pas, sprawdzenie, małe / średnie / duże podbicie) na podstawie trzech czynników wynikających z przebiegu gry i z obecnego jej stanu: siły ręki, agresywności przeciwników i ryzyka. Te własności zasługują na krótkie wyjaśnienie. Siła ręki jest zdefiniowana jako prawdopodobieństwo zdarzenia "moja ręka jest najlepsza ze wszystkich przy stole", przy założeniu, że wszystkie karty przeciwników zostały wylosowane z rozkładem jednostajnym. Ryzyko jest to wartość starająca się opisać, jak bardzo ryzykowna jest (dla danego agenta) dalsza gra, czyli przynajmniej wyrównanie obecnej stawki. Jest ono wyliczane tylko na podstawie dwóch wartości: ilości żetonów w puli i wysokości obecnej stawki. 15 Agresywność Przy każdym ruchu przeciwnika jest przewidywana siła jego ręki. Konkretnie, agent sprawdza przy jakiej sile ręki on podjąłby taką samą decyzję (przy ustalonym ryzyku). Następnie, agresywność decyzji jest zdefiniowana jako różnica między estymowaną siłą ręki a wartością oczekiwaną siły ręki przeciwnika, przy założeniu że jego ręka jest wylosowana z rozkładu jednostajnego. Agresywność gracza jest wyliczana z agresywności podejmowanych przez niego decyzji. Zauważmy - wartość ta opisuje więc jak bardzo agresywny przeciwnik wydaje się być dla danego agenta. Agresywność nie jest używana bezpośrednio jako czynnik decyzyjny. Zamiast tego, siła ręki gracza jest odpowiednio modyfikowana przy uwzględnieniu średniej agresywności przeciwników. Warto zauważyć, że w przeciwieństwie do sieci neuronowych, estymowane własności stanu gry (siła ręki i ryzyko) są tu zdefiniowane explicite i wyliczane według ustalonych wzorów. Tej własności sieci neuronowe nie mają; starają się jedynie, w pewien sposób przy pomocy neuronów w warstwie pośredniej, uchwycić pewne cechy stanu gry (nie wiadomo tak naprawdę jakie). Oba czynniki (siła ręki, ryzyko) zostały znormalizowane do przedziału [0, 1]. Strategie są reprezentowane jako krotki funkcji [0, 1]2 → [0, 1], mówiące dla danej siły ręki i ryzyka z jakim (relatywnie) prawdopodobieństwem powinna być podjęta jaka akcja. Dokładniej, dla każdej możliwej decyzji d ∈ { pas, sprawdzenie, małe podbicie, średnie podbicie, duże podbicie } mamy osobną funkcję fd ∈ [0, 1]2 → [0, 1]. W każdym momencie, dla danego ryzyka r i siły ręki hs, agent podejmuje decyzję d z prawdopodobieństwem Σfddf(r,hs) . d (r,hs) 3.1.2. Opis ewolucji Na takich strategiach odbywała się ewolucja, która jednak została opisana niezbyt szczegółowo: nie wiemy ilu osobników znajdowało się w populacji, ile generacji składało się na proces ewolucji, ile gier / rozdań odbywało się w jednej generacji itd. Wiemy jednak, że autorzy rozważyli trzy różne typy agentów: data-driven, scratch i head-start (nazwy tak jak użyte w pracy), oznaczające odpowiednio: agentów nauczonych na danych treningowych bez użycia ewolucji, agentów wyewoluowanych z losowych funkcji i agentów wyewoluowanych z agenta data-driven. Eksperymenty pokazały, że strategie head-start najlepiej radziły sobie z każdym rodzajem przeciwników (tj. z agentami innych typów, z prostymi strategiami typu "zawsze pas" lub losową, a także z ludźmi), co nie powinno być zaskoczeniem dla czytelnika. 3.1.3. Problemy z pracą Problemów z tą pracą jest kilka, część z nich zauważyli sami autorzy. Przede wszystkim: Reprezentacja strategii Jedynymi czynnikami branymi pod uwagę przy podejmowaniu decyzji jest wspomniane już ryzyko i siła ręki gracza. W rezultacie, strategia jest opisana przez funkcję [0, 1]2 → [0, 1]5 . Wydaje się, że te informacje mogą być niewystarczające do podejmowania odpowiednich decyzji; zbyt dużo informacji o stanie gry jest pomijanych (np. potencjał ręki, czyli szanse na to że w następnej fazie gry siła ręki się polepszy, obecna faza gry, ilość graczy) lub ich znaczenie jest zmniejszone (np. duża agresywność pojedynczego gracza nie będzie właściwie zauważona). To może powodować, że zbyt wiele różnych sytuacji (w których oczekiwalibyśmy różnych 16 decyzji) zostanie utożsamionych i potraktowanych tak samo. Widać to na przykładzie agentów scratch, tj. ewoluowanych z losowych strategii: funkcje opisujące takich agentów są niezwykle proste. Taka reprezentacja strategii ma jedną zaletę: można łatwo przedstawić graficznie agenta i jest szansa na zrozumienie jego działania, co w przypadku sieci neuronowych jest praktycznie niemożliwe. Wydaje się jednak, że zaleta ta nie rekompensuje wad tak ubogiej reprezentacji. Modelowanie przeciwników Jedynym co można zakwalifikować jako modelowanie przeciwnika, jest ocena jego agresywności, która następnie jest mimo wszystko "gubiona" przez potraktowanie jej jako części oceny siły ręki. Nie są brane pod uwagę czynniki takie jak rozkład poszczególnych decyzji u przeciwników czy nawet decyzje podjęte przez nich w trakcie obecnego rozdania. Sposób oceniania agentów Agenci są oceniani według miejsca, które zajęli w rozgrywkach, a więc pojedynczą liczbą. Taki sposób nawet jeśli ocenia w pewien sposób czy agent A jest lepszy czy gorszy od B, nie ocenia tego jak bardzo jest on lepszy lub gorszy. Mogłoby to być akceptowalne w przypadku pokera Hold’em ze stałym limitem, jednak w wersji bez limitu zyski lub straty mogą być ogromne. Wydaje się, że informacja na temat zysków / strat agenta w trakcie turnieju byłaby lepszym wyznacznikiem jego jakości. W szczególności agent, który często wygrywa minimalnie, ale od czasu do czasu przegrywa wszystkie swoje pieniądze przy takim sposobie oceniania dostaje wysoką ocenę; być może np. agent który często minimalnie przegrywa, ale od czasu do czasu bardzo znacząco wygrywa, powinien zostać oceniony lepiej. W pracy znajdujemy, że niewiarygodnie prymitywna strategia "zawsze pas" wcale nie wygląda źle na tle agentów wytworzonych w procesie ewolucji, co z jednej strony świadczy o jakości wyewoluowanych agentów, z drugiej jednak strony - gdyby wyniki przedstawić w postaci zysków / strat, nikt nie zwróciłby uwagi na taką strategię. Wiarygodność oceny agentów Właściwie wszystkie przeprowadzone eksperymenty porównują agentów powstałych w pracy między sobą. Jest zaledwie wspomniane, że agenci grali też przeciwko autorom. Brak jednak szczegółowych porównań np. z graczami on-line, lub z referencyjnymi strategiami innymi niż "zawsze pas" czy losową (więc na przykład z agentami powstałymi w innych pracach). W rezultacie ciężko jest obiektywnie ocenić jakość powstałych agentów. Optymalizacja parametrów Zostało przeprowadzonych bardzo niewiele eksperymentów sprawdzających np. inne funkcje liczące ryzyko czy agresywność, inne definicje małego / średniego / dużego zakładu, a nawet parametry samej ewolucji jak np. ilość generacji, ilość osobników w populacji czy częstość / rodzaj mutacji. Jest ewidentne, że nawet małe zmiany parametrów potencjalnie mogłyby prowadzić do lepszych wyników. 17 3.2. Agenci pokera Texas Hold’em bez limitu tworzeni przez ewolucję sieci neuronowych [9] Ta publikacja opisuje wyniki prac kontynuowanych przez dwóch członków zespołu pracującego nad pracą wspomnianą powyżej. Widać jednak istotny postęp, w szczególności: • Strategie są reprezentowane jako sieci neuronowe • Rozważone są dodatkowe mechanizmy mające wspomagać ewolucję agentów: ko-ewolucja i galeria najlepszych wyników (hall of fame). 3.2.1. Opis modelu agenta Strategie są reprezentowane przez sieci neuronowe o ustalonej strukturze: 35 neuronów wejściowych, 20 ukrytych, 5 wyjściowych - odpowiadających tym samym decyzjom co w poprzedniej pracy. Wejściami dla sieci są: ilość żetonów w puli, obecna wysokość zakładu, ilość przeciwników, odsetek wygrywających rąk, i dla każdego przeciwnika: ilość jego żetonów oraz jego całkowita i chwilowa agresywność. Aby obliczyć odsetek wygrywających rąk, wielokrotnie przeprowadzana jest symulacja wszystkich pozostałych kart. Dla każdego przypadku (po wylosowaniu przyszłych kart), można łatwo ocenić czy dana ręka wygra, zremisuje czy przegra jeśli dojdzie do pokazania kart. Odsetek wygrywających rąk ma być kompromisem pomiędzy siłą ręki a jej potencjałem. Agresywność gracza jest średnią z agresywności jego decyzji, gdzie pas ma agresywność 0, sprawdzenie - 1, a podbicie - x/bet jeśli agent podbił o x przy minimalnej wartości zakładu bet. Chwilowa agresywność jest liczona jako średnia agresywność z ostatnich 10 rozdań. Zostały więc rozwiązane problemy poprzedniej pracy: uboga reprezentacja strategii i prymitywne modelowanie przeciwników. 3.2.2. Problemy z pracą Reprezentacja strategii Wydaje się, że struktura sieci jest nietypowa (patrz sekcja 1.2 i [8], [16]): aż 25 neuronów pośrednich przy 35 wejściowych. Ponadto, w wejściach sieci nadal brakuje ważnych informacji o grze, np. ilości pozostałych żetonów, pozycji gracza. Być może zasadne byłoby też osobne wejście sieci na siłę ręki i osobne na jej potencjał, zamiast jednego na odsetek wygrywających rąk; są to współczynniki łatwe do obliczenia, znane i używane w środowisku pokerowym. Wiarygodność oceny agentów Podobnie jak w poprzedniej pracy, agenci są oceniani według miejsca zajętego w turnieju, co nie mówi nic o zyskach / stratach. Pomijając ten fakt, agenci są porównywani z najlepszymi agentami wyewoluowanymi z poprzedniej pracy (najlepszy data-driven, najlepszy head start i najlepszy scratch) oraz z następującymi strategiami referencyjnymi: zawsze pas, zawsze sprawdzaj, zawsze podbijaj, zawsze sprawdzaj lub podbijaj (50% szans na każdą z decyzji). Jest ewidentne, że takie referencyjne strategie mają mało wspólnego z rzeczywistością - można zaryzykować stwierdzenie, że nikt nie gra w pokera używając takich strategii. Z takimi przeciwnikami najlepsi wyewoluowani agenci zajmują średnio 3 miejsce w turnieju (agenci są oceniani w ten sam sposób co w poprzedniej pracy - średnie miejsce zajęte w turnieju). Niestety, trzeba przyznać - taki sposób przedstawienia wyników nie mówi zbyt wiele. 18 Zostało przeprowadzonych dość sporo eksperymentów, głównie mających na celu sprawdzenie jaki wpływ na ewolucję agentów ma stosowanie dodatkowych technik: ko-ewolucji i galerii najlepszych wyników. Najlepsze wyniki zostały osiągnięte bez użycia ko-ewolucji i przy użyciu dużej galerii najlepszych wyników. Niestety, podobnie jak w poprzedniej pracy tych autorów, i tu brakuje optymalizacji parametrów algorytmu. 3.3. Znajdowanie silnych strategii pokera Texas Hold’em przy użyciu ko-ewolucji Pareto i deterministycznego zagęszczania [10] Noble dostrzega istotną trudność w pokerze: nieprzechodniość relacji bycia lepszym (jeśli A wygrywa z B, B wygrywa z C, to nic nam nie mówi czy A wygrywa czy przegrywa z C, ani jak bardzo wygrywa / przegrywa). Jako remedium autor proponuje użycie ko-ewolucji Pareto, czyli traktowanie wyników odniesionych przez agenta z innymi graczami jako kryterium oceny jego jakości (patrz definicja 3). Wspomniana praca jest kontynuacją poprzedniej pracy autora [11], której zdecydowaliśmy się nie opisywać ze względu na słabą jakość otrzymanych wyników. Problemy z poprzednią pracą Noble’a które zostały rozwiązane to między innymi: • Uboga reprezentacja strategii (rule-based ) • Utrata różnorodności strategii: ewoluowane strategie po pewnym czasie stawały się bardzo podobne do siebie • Niski średni wiek osobników w populacji: wiedza "źle się akumulowała" Autor zajmuje się tylko wersją pokera Hold’em ze stałym limitem. 3.3.1. Opis modelu agenta Strategie są reprezentowane jako pary sieci neuronowych o ustalonych strukturach: osobna sieć na grę pre-flop (pierwszą rundę), osobna na grę post-flop (kolejne trzy rundy). Sieci te mają odpowiednio 69 i 109 wejść, mniej więcej pogrupowanych w: • informacje o kartach danego agenta • informacje na temat przebiegu rozdania i aktualnej sytuacji przy stole • informacje na temat pozostałych agentów (modelowanie przeciwników). Przykładowymi wejściami są: • Czy moja ręka zawiera asa? • Obecna wysokość zakładu • Jak często dany przeciwnik podbija, a jak często tylko sprawdza? • Ile stritów lepszych niż mój jest możliwych przy obecnym układzie kart? 19 Wszystkie wejścia są normalizowane do przedziału [0, 1]. Sieci zawierają 5 ukrytych neuronów i 3 wyjściowe, odpowiadające (relatywnym) prawdopodobieństwom decyzji: pas, sprawdzenie, podbicie. Aby ograniczyć przestrzeń poszukiwań sieci, nałożony został dodatkowy warunek na ich strukturę: sieci muszą być rzadkie, tzn. mieć dokładnie 50 połączeń między neuronami. Jest to bardzo rygorystyczny warunek; sieci ze wszystkimi możliwymi połączeniami miałyby tych połączeń 567 i 887, odpowiednio dla sieci pre-flop i post-flop. Wydaje się jednak, że nałożenie tak restrykcyjnego warunku mogło być konieczne - inaczej obliczenia mogły trwać niedopuszczalnie długo. 3.3.2. Opis ewolucji Bardzo szczegółowo jest opisana ewolucja, podane są dosłownie wszystkie jej parametry. W oryginalnej wersji pracy, populacja składała się z 20 osobników, którzy ewoluowali przez 5000 pokoleń. W każdym pokoleniu rozegranych było 200 gier, pojedyncza gra natomiast składała się ze 100 rozdań rozegranych przy 10-osobowym stoliku (gracze byli losowo wybierani z populacji). Każdy gracz wchodził do gry z pulą 100$. Stawki wynosiły odpowiednio 2$ za zakład w pierwszych dwóch rundach, 4$ w dwóch kolejnych. Dokładnie opisany został przebieg mutacji i krzyżowania agentów. Tak jak wspomnieliśmy, jakość graczy była oceniana pojęciem zbliżonym do Pareto-dominacji (por. definicja 3). Z uwagi na element losowości w pokerze i fakt że czasem gracze mogą po prostu mieć szczęście, został wprowadzony tak zwany margines błędu równy 100$: A dominuje B, jeśli z pewnym agentem A radzi sobie przynajmniej o 100$ lepiej niż B, a z pozostałymi - w najgorszym wypadku 100$ gorzej od B. Zostały przetestowane różne warianty ewolucji: • standardowy, zaczynamy ewolucję od losowych sieci neuronowych • "HS" (head-start), zaczynamy od ręcznie zaprojektowanych sieci • "FO" (fixed opponent), gdzie przy każdym stoliku 5 miejsc jest zajętych przez strategie z jednej z dwóch grup strategii referencyjnych, oznaczonych roboczo alpha i beta • "FO+HS" łączący dwa powyższe warunki Porównano też jakość agentów wyewoluowanych przy użyciu Pareto ko-ewolucji i standardowego algorytmu ewolucyjnego (gdzie jakość agenta była zdefiniowana jako bilans jego zysków / strat po rozegraniu wszystkich gier w generacji). Nie powinno dziwić, że najlepsze wyniki zostały uzyskane przy użyciu Pareto ko-ewolucji w wariancie "FO+HS". 3.3.3. Zalety pracy Praca jest napisana szczególnie starannie. Brak w niej większości wad obecnych w pozostałych pracach. Reprezentacja strategii i modelowanie przeciwników Sieci neuronowe mają podpięte bardzo wiele informacji na temat stanu gry, włączając w to informacje na temat przeciwników, jak np. średni rozkład ich decyzji w tym rozdaniu czy w całej grze, pozycje przeciwników czy jak często biorą oni udział w grze do końca (do pokazania kart). Poza tym, faza pre-flop jest traktowana oddzielnie od pozostałych faz gry, co jest zgodne z intuicją i z faktycznym zachowaniem graczy. 20 Sposób oceniania agentów i wiarygodność oceny Mimo że w czasie ewolucji agencji są oceniani w dość skomplikowany sposób (adaptacja Paretodominacji), to w końcowych wynikach liczy się średni bilans agentów po serii gier przeprowadzonych z agentami referencyjnymi. Agenci referencyjni są starannie dobrani: podobnie jak w [9], wybrani są najlepsi agenci powstali w poprzedniej pracy Noble’a [11] - ale też strategie typu bold liar czy brave honesty, zaprojektowane dokładnie i zgodnie ze sztuką. 3.3.4. Problemy z pracą Optymalizacje parametrów Sam autor przyznaje, że brak eksperymentów z wartościami parametrów algorytmu. W tej pracy jest jeszcze więcej parametrów do zmiany niż w poprzednich, chociażby: margines błędu, ilość strategii referencyjnych przy każdym stoliku, gęstość sieci. 50 połączeń między neuronami wydaje się mocno ograniczać ekspresywność sieci, zaledwie część wejść może zostać użyta przy tym ograniczeniu. Oczywiście parametry sieci takie jak ilość ukrytych neuronów, czy parametry samego algorytmu takie jak ilość osobników w generacji czy ilość generacji, mogą mieć równie znaczący wpływ na jakość wyewoluowanych agentów. Modelowanie przeciwników Wydaje się, że niektóre ważne informacje nie są brane pod uwagę - wszystkie wartości opisujące przeciwników są liczone jako średnie ze wszystkich grających przeciwników. Być może oprócz średnich należałoby także rozważyć maksymalne czy minimalne wartości (np. częstości podbijania przez przeciwników), dobrym pomysłem wydaje się też uwzględnienie zróżnicowania przeciwników. Dla cech które mają największe znaczenie, być może należy użyć osobnego wejścia dla każdego przeciwnika. 3.4. Porównanie wyników Mimo tak różnych reprezentacji agentów i tak różnych technik używanych przy ewolucji, w każdej z tych prac najlepsze wyewoluowane strategie mają jedną cechę wspólną: są dość ostrożne w podejmowaniu decyzji, ale jeśli zdecydują się grać, grają całkiem agresywnie (tightaggressive). Zdecydowanie najczęściej pojawiającą się dezycją jest pas. 3.5. Widoczne problemy W obronie rezultatów prac, należy zauważyć kilka wad które występują w każdej z nich i są typowe dla obieranych podejść do problemu (ewoluowanie strategii pokerowych, zwłaszcza modelowanych przez sieci neuronowe): 3.5.1. Kosztowna symulacja Łatwo policzyć, jak kosztowna jest ewolucja populacji nawet 20 osobników przez 5000 pokoleń, gdy na każde pokolenie składa się 200 gier po 100 rozdań. Im większa sieć neuronowa, tym więcej czasu zajmuje też wyliczenie pojedynczej decyzji, a przecież nie mówimy tu o szczególnie dużych wartościach parametrów. Może to mieć szczególne znaczenie w pracy Noble’a, która powstała dokładnie 10 lat temu. Można przypuszczać, że ograniczenia sprzętowe utrudniły autorowi przeprowadzenie rozległych eksperymentów. Na współczesnym sprzęcie najnowszej 21 generacji (komputer z procesorem Intel Xeon QuadCore 4x2GHz) powtórzenie jednego przebiegu ewolucji w wersji 4-wątkowej trwało 6 godzin (24 godziny w wersji z jednym wątkiem). Autor nie podaje na jakim sprzęcie przeprowadzał eksperymenty, możemy jednak przypuszczać że 10 lat temu te same obliczenia trwały o wiele dłużej. 3.5.2. Ciężko się dobrze porównać Mimo że powstaje wiele prac na temat strategii gry w pokera, z kilku powodów jest bardzo ciężko porównać się z wieloma z nich. Po pierwsze, mimo że wyniki są publikowane, udane strategie już niekoniecznie. Po drugie, brak jednolitego interfejsu programistycznego do gry w pokera sprawia, że każdy zespół badaczy tworzy swój własny interfejs, a co za tym idzie - jest niezmiernie czasochłonne porównanie nawet dwóch agentów korzystających z różnych interfejsów (wymaga to gruntownego przerobienia przynajmniej jednego z nich). Najbardziej zaś wartościowe porównania - te z prawdziwymi graczami, lub w tym przypadku z graczami internetowych serwisów pokerowych - są jeszcze cięższe do przeprowadzenia. Z powodu polityki tychże serwisów, zakazującej używania pokerbotów jest to niezwykle trudne do osiągnięcia i w praktyce rzadko przeprowadzane. 22 Rozdział 4 Zakres eksperymentów Dzięki uprzejmości Jasona Noble’a uzyskaliśmy dostęp do źródeł programu użytego w jego badaniach [10]. Nasza implementacja w znacznej części bazuje na tym programie. Należy tu jednak zaznaczyć, że praca z otrzymanymi kodami źródłowymi nie była łatwa. Program został nam dostarczony w postaci wielu plików z kodami źródłowymi o łącznym rozmiarze ponad 380 kB. Cały program został zaimplementowany w C, praktycznie z pominięciem wszelkich zasad, reguł i dobrych praktyk w wytwarzaniu oprogramowania. Program używa wielu zmiennych globalnych, makr, działań na wskaźnikach, ręcznego zarządzania pamięcią itd. Porzuciliśmy więc początkowy pomysł modyfikacji źródeł w celu wprowadzenia wielowątkowości i ograniczyliśmy się tylko do niezbędnych zmian. Naszym celem było poprawienie rezultatów poprzez zmianę parametrów sieci neuronowych i parametrów samej ewolucji. Poniżej przedstawiamy opis parametrów zmienianych w naszych badaniach: • Struktura sieci – Ilość połączeń w sieci – Ilość ukrytych neuronów • Parametry oceny jakości sieci – Margines błędu • Parametry ewolucji – Ilość pokoleń – Ilość gier w każdym pokoleniu – Ilość rozdań w każdej grze Miernikami jakości wyewoluowanych strategii są: • Wyniki gry ze strategiami referencyjnymi, w tym: – Jak często gracz był najlepszy przy stole? – Jak często gracz był na minusie? – Jak często gracz ma ujemny bilans z którymkolwiek innym graczem? • Średni bilans w rozgrywkach • Średni wiek osobników z frontu Pareto (patrz definicja 4) pod koniec ewolucji 23 Rozdział 5 Wyniki eksperymentów 5.1. Opis eksperymentów W ramach eksperymentów przeprowadzono 32 kompletne ewolucje. Należy pamiętać, że eksperymentalne ewolucje były bardzo kosztowne obliczeniowo; najkrótsza z nich ewoluowała ponad 1 dzień, najdłuższa – około 10 dni. Obliczenia były wykonywane na najnowszym sprzęcie z czterordzeniowym procesorem Intel Xeon o częstotliwości taktowania 2 GHz. Opis parametrów każdego eksperymentu można znaleźć w Tabelach 1-4 zamieszczonych na końcu pracy. Pogrubione zostały te parametry, które w danym przebiegu ewolucji są różne od standardowych wartości użytych w pracy Noble’a. Oprócz tego, pogrubiony jest najważniejszy według nas parametr - ilość pokoleń w ewolucji. Wynikiem jednego eksperymentu są, podobnie jak w pracy Noble’a, dwie grupy osobników (agentów): • Osobniki z populacji po przebiegu odpowiedniej liczby pokoleń, w naszych eksperymentach - 20 osobników • Dwa osobniki z całego przebiegu ewolucji osiągające najlepsze wyniki w grach przeciwko grupom strategii referencyjnych alpha i beta (patrz podsekcja 3.3.2), oznaczone odpowiednio alpha alite i beta elite (AE i BE) W celu oceny agentów, dla każdej populacji zostały przeprowadzone trzy rozgrywki rankingowe. Pojedyncza rozgrywka składała się z 300 gier, każda z nich po 10000 rozdań. W każdej z gier w rozgrywce rankingowej uczestniczyła jedna strategia losowo wybrana z danej populacji i 9 strategii referencyjnych, także wybranych losowo. Aby wyniki były najbardziej wiarygodne, karty były rozdawane zawsze w ten sam sposób w każdej rozgrywce rankingowej. W Tabelach 1-4 przedstawione są wyniki osiągane w kolejnych eksperymentach, pogrupowane w 3 kategorie: • Jak często pierwszy, Ile razy na minusie, Ile razy przegrał z kimkolwiek Są to liczby z zakresu [0..300] oznaczające, w ilu grach z rozgrywki rankingowej osobnik odpowiednio: wygrał (zdobył najwięcej żetonów spośród wszystkich graczy), skończył z ujemnym bilansem żetonów, był gorszy od pewnego gracza przy stole (bezpośrednio z nim przegrał, tzn. ma bilans ujemny z tym graczem). • Średni bilans Jest to liczba oznaczająca średnią ilość wygranych lub straconych żetonów przez danego gracza w każdej z gier w rozgrywce rankingowej. 25 • Średni wiek, Mediana wieku Są to liczby mówiące jaki jest średni wiek (w pokoleniach) osobników z frontu Pareto pod koniec ewolucji. Im większe te liczby, tym wiedza lepiej się akumuluje (tym ciężej znaleźć lepsze strategie). W prawie każdym wierszu w tabelach zostało wyróżnionych pięć pól z najlepszymi wartościami spośród wszystkich eksperymentów. Zostały pominięte wiersze "ile razy na minusie" AE/BE, gdyż w tych wierszach jest ponad 15 pól o wartości zero i pogorszyłoby to tylko czytelność. Wyniki dla eksperymentów 0-4 są niepełne z powodu błędów programistycznych. 5.2. Rezultaty Eksperyment 0 miał na celu odtworzenie wyników Noble’a (został uruchomiony z takimi samymi parametrami). Celem eksperymentów 0-19 było znalezienie struktury sieci prowadzącej do najlepszych wyników, ale też zweryfikowanie hipotezy, że osiągamy lepsze wyniki jeśli ewolucja jest dłuższa (składa się z większej ilości pokoleń). Wydaje się, że te dwa czynniki mają największy wpływ na końcowe wyniki ewolucji. Istotnie, im dłuższa ewolucja, tym lepsze wynikowe strategie. Wyniki dla 10000 i 15000 pokoleń są wyraźnie lepsze niż te dla 5000. Mimo tego, 5000 pokoleń wystarczyło do wyewoluowania dobrych sieci z 50 połączeniami i 5 neuronami ukrytymi, przypuszczalnie dlatego że struktura sieci była prosta w tym przypadku (eksperyment 0). Wydaje się, że nie ma prostej zależności między strukturą sieci a wynikami ewolucji. Dobre wyniki osiągnięto np. dla 50 połączeń i 6 neuronów ukrytych (eksperymenty 8 i 12), ale też dla 80 połączeń i 8 neuronów ukrytych (eksperyment 10). Zauważmy jednak, że jeżeli dwie różne sieci osiągają porównywalne wyniki, prawdopodobnie za lepszą należy uznać tą o prostszej strukturze; sieć o mniejszej liczbie neuronów ukrytych i mniejszej liczbie połączeń między neuronami będzie mniej podatna na przeuczenie. Na szczególną uwagę zasługuje eksperyment 19, który doprowadził do wyewoluowania najlepszego pokerbota ze wszystkich eksperymentów łącznie (agent AE z tego eksperymentu). Parametrami eksperymentu były: 15000 pokoleń, 150 połączeń między neuronami, 6 neuronów ukrytych. Zdarzyło się też kilka nieudanych ewolucji w tych eksperymentach: zwłaszcza agent BE w eksperymentach 5, 9 czy 11. Nasuwa się wniosek, że grupa referencyjna beta może być mniej wymagająca niż alpha, skoro agenci optymalnie grający przeciwko beta osiągają tak słabe wyniki z innymi graczami. Jest to potencjalny aspekt który można poprawić. Zauważmy też, że dla ilości pokoleń 5000 i 10000 pojawiają się bardzo duże wartości w polach "ile razy przegrał z kimkolwiek". Dla 15000 pokoleń wartości te są dużo mniejsze, często równe 0. Zdaje się to tylko potwierdzać zasadność tak długiej ewolucji. Celem eksperymentów 20-23 (Tabela 2) było sprawdzenie, jaki wpływ na ostateczne wyniki ma ilość gier rozegranych w jednym pokoleniu i ilość rozdań w każdej z gier. Wyniki jednak nie są jednoznaczne, ewentualne ich zaburzenia są przypuszczalnie efektem przypadku. Mimo to, zdecydowanie najlepsi agenci powstali w eksperymencie 23, który został uruchomiony z parametrami: ilość gier w pokoleniu = 266, ilość rozdań w każdej grze = 150. W eksperymentach 24-27 (Tabela 3) przyjęliśmy standardowe wartości tych parametrów: 200 gier i 200 rozdań w grze. Sprawdziliśmy natomiast, jaki wpływ na wynik ma przyjęty margines błędu. W pracy Noble’a (i w pozostałych eksperymentach) margines błędu był równy 100. Widzimy jednak, że znacznie lepsze wyniki uzyskaliśmy dla marginesu 60. Co ciekawe, dla wartości 80 wyniki były znacznie gorsze. 26 Ciężko jednak stwierdzić jak dobre byłyby wyniki dla marginesu 60, ilości gier 266 i ilości rozdań 150. Wydaje się, że margines optymalny dla jednej ilości rozdań może być nieoptymalny dla innej. Należałoby więc przeprowadzić szereg kolejnych eksperymentów, zmieniając jednocześnie margines błędu i ilość rozdań. Celem eksperymentów 28-31 (Tabela 4) było znalezienie odpowiedniego prawdopodobieństwa mutacji. W pracy Noble’a było to 2%, co sprawiało że zmutowane sieci neuronowe były bardzo bliskie swoim przodkom. Eksperymenty te miały na celu sprawdzenie, czy większe prawdopodobieństwo, i co za tym idzie, większa ilość mutacji nie pogorszy akumulowania się wiedzy. Wyniki pokazują, że istotnie tak jest: prawdopodobieństwo mutacji 3% lub większe dało zdecydowanie słabe wyniki. Jednak należy zauważyć, że zmniejszenie prawdopodobieństwa mutacji do 1% dało wyniki prawie tak dobre jak w eksperymencie 19, przy zaledwie 10000 pokoleń. Wydaje się więc, że 1% jest odpowiednią wartością dla tego parametru. 5.2.1. Słabe wyniki Należy tu przytoczyć kilka argumentów na wytłumaczenie wyewoluowanych pokerbotów, a dokładniej - ich słabych wyników w niektórych przypadkach. Przede wszystkim należy pamiętać, że w eksperymentach jest dużo losowości: zaczynamy od losowych sieci, mutacja polega na losowej zmianie w sieci, losowość występuje też przy rozdawaniu kart czy nawet ustawianiu graczy przy stole. Pojedyncze słabe wyniki mogą więc być dziełem przypadku. Dziwić może fakt, że wyewoluowane strategie rzadko są najlepsze w całej grze podczas rozgrywki rankingowej. Zauważmy jednak, że grają one z dość prostymi strategiami referencyjnymi. Często zdarza się tak, że jedna prosta strategia referencyjna wygrywa bardzo dużo w stosunku do pewnej innej, i to właśnie dzięki temu jest pierwsza. Taki "zwycięzca" gry, jednak, często jest na minusie nawet z kilkoma graczami przy stole - w tym także z agentem powstałym w procesie ewolucji. Wydaje się więc, że statystyki "jak często pierwszy" nie należy traktować zbyt poważnie, bo nie pokazuje ona pełnej informacji. Znacznie bardziej miarodajna jest według nas statystyka "ile razy na minusie", czy "ile razy przegrał z kimkolwiek". 27 Rozdział 6 Wnioski i praca na przyszłość Celem niniejszej pracy było poprawienie wyników Noble’a [10] dotyczących obliczania strategii pokera Texas Hold’em ze stałym limitem poprzez ewolucję sieci neuronowych. Przeprowadziliśmy eksperymenty w celu znalezienia optymalnych parametrów sieci neuronowych jak i samej ewolucji. Eksperymenty te doprowadziły do kilku szczególnie dobrych wyników. Tak jak przypuszczaliśmy, długość ewolucji (ilość pokoleń) ma znaczący wpływ na jakość końcowych wyników. W naszych eksperymentach maksymalna ilość pokoleń była równa 15000, trzykrotnie więcej niż w pracy Noble’a. Przyszli badacze tego tematu mogliby pójść nawet dalej, przeprowadzając ewolucję nawet 25000 pokoleń, a być może i więcej. Jedynym ograniczeniem w tym wypadku może być czas obliczeń; ewolucja 15000 pokoleń trwała około 10 dni. Osiągnięte rezultaty pokazują jednak, że warto poczekać na wyniki takiej ewolucji. Należy też zauważyć, że pomimo istnienia wielu twierdzeń o zbieżności działania algorytmów genetycznych, w praktyce dla złożonych problemów zdarza się to nieczęsto. Nam to się jednak udało; co pokazuje, że zastosowane modele matematyczne i algorytmy były dobrze dopasowane do problemu. Potwierdziło się też inne z naszych przypuszczeń: struktura sieci z 5 neuronami ukrytymi i 50 połączeniami jest zdecydowanie zbyt uboga. Zwiększenie ilości neuronów ukrytych, a przede wszystkim zwiększenie ilości połączeń prowadzi do dużo lepszych strategii. Największe sieci ewoluowane przez nas miały 6 neuronów ukrytych i 150 połączeń. Znów zadaniem dla przyszłych badaczy mogłoby być zwiększenie liczby połączeń nawet do 300, a być może nawet rozważenie sieci ze wszystkimi połączeniami. Oba pomysły przedstawione powyżej poza drastycznym wzrostem jakości strategii wynikowych, powodują też znaczące wydłużenie czasu obliczeń. Wydaje się, że przyszli badacze będą zmuszeni do ingerencji w kody źródłowe w celu ich przyspieszenia. Dobrym pomysłem byłoby skorzystanie z wielowątkowości, być może zasadne byłoby też przyspieszenie sprzętowe np. za pomocą programowalnych kart graficznych. Proste obliczenia, jak w przypadku symulacji rozdania pokera, powinny być łatwe do zrównoleglenia. Należy jednak liczyć się z tym, że zadanie to byłoby niezmiernie czasochłonne z powodu dużej ilości kodu. Być może szybciej byłoby nawet zaimplementować program od nowa, na przykład w C++ używając programowania obiektowego i z uwzględnieniem dobrych praktyk używanych przy wytwarzaniu oprogramowania. Zadaniem na przyszłość mogłoby też być wzbogacenie rozważanych sieci neuronowych o kolejne wejścia, opisujące dodatkowe informacje na temat stanu czy przebiegu gry. Wydaje się, że można jeszcze rozszerzyć modelowanie przeciwników. Możnaby też wykorzystać wyewoluowane już strategie (np. w tej pracy) i użyć ich jako strategii startowych dla kolejnych 29 eksperymentów. Innym rozszerzeniem tej pracy i pracy Noble’a mogłoby być zastosowanie podobnego podejścia do wersji pokera bez limitu. Zdecydowanie nie ma w tym zakresie satysfakcjonujących wyników, przynajmniej w temacie sieci neuronowych i algorytmów ewolucyjnych. Niewątpliwie ciekawe byłoby też sprawdzenie jakości wyewoluowanych strategii na prawdziwych graczach. Najprościej byłoby chyba zagrać taką strategią na jednym z internetowych serwisów pokerowych. Serwisy takie prezentują dużą różnorodność graczy na każdym poziomie; byłoby to idealne pole do ostatecznego przetestowania strategii. Pamiętajmy też, że przedstawione tu rozważania można dość łatwo przenieść na inne gry. Nie jest nam znany status badań nad innymi grami, przypuszczamy jednak że zastosowanie opisanego tu podejścia mogłoby prowadzić do wielu ciekawych wyników. Chcieliśmy w tej pracy przede wszystkim zaprezentować bardzo interesujący temat, jakim jest znajdowanie dobrych strategii w grach za pomocą algorytmów ewolucyjnych sieci neuronowych. Zachęcamy Czytelnika do własnego zbadania tego tematu; jest w nim niewątpliwie jeszcze wiele do zrobienia. Należy jednak mieć na uwadze to, jak ważne jest zastosowanie odpowiednich modeli matematycznych jak i algorytmicznych. Korzystając z okazji chcieliśmy też złożyć podziękowania dla Jasona Noble’a za udostępnienie programu użytego w jego badaniach [10]. Bez jego pomocy powstanie tej pracy byłoby niemożliwe. 30 Bibliografia [1] Nils Aall Barricelli. Symbiogenetic evolution processes realized by artificial methods. 1957. [2] Darse Billings. Algorithms and assessment in computer poker. PhD thesis, University of Alberta, 2006. [3] George Cybenko. Approximation by superpositions of sigmoidal functions. Mathematics of Control, Signals, and Systems (MCSS), 1989. [4] Garrett Nicolai et al. Pattern classification in no-limit poker: a head-start evolutionary approach. In Canadian Conference on AI, 2007. [5] David E. Goldberg. Genetic Algorithms in Search, Optimization, and Machine Learning. Addison-Wesley Professional, 1 edition, 1989. [6] Kurt Hornik. Approximation capabilities of multilayer feedforward networks. Neural Networks, 1991. [7] Lakhmi C. Jain and N. M. Martin. Fusion of Neural Networks, Fuzzy Systems and Genetic Algorithms: Industrial Applications. International Series on Computational Intelligence. CRC Press, 1998. [8] S. Lawrence, C. L. Giles, and A. C. Tsoi. What size neural network gives optimal generalization? convergence properties of backpropagation. Technical report, Institute for Advanced Computer Studies, University of Maryland, College Park, 1996. [9] Garrett Nicolai and Robert J. Hilderman. No-limit texas hold’em poker agents created with evolutionary neural networks. In IEEE Symposium on Computational Intelligence and Games (CIG 2009), 2009. [10] Jason Noble. Finding robust texas hold’em poker strategies using pareto coevolution and deterministic crowding. In Proceedings of the 2002 International Conference on Machine Learning and Applications (ICMLA 2002), 2002. [11] Jason Noble and Richard A. Watson. Pareto coevolution: Using performance against coevolved opponents. in a game as dimensions for pareto selection. In Proceedings of the Genetic and Evolutionary Computation Conference (GECCO 2001), 2001. [12] Jonathan Rubin and Ian Watson. Computer poker: A review. Artificial Intelligence, 2011. [13] Stuart J. Russell and Peter Norvig. Artificial Intelligence: A Modern Approach. Prentice Hall, 3 edition, 2009. 31 [14] Ryszard Tadeusiewicz. Sieci neuronowe. Warszawa: Akademicka Oficyna Wydawnicza RM, 2 edition, 1993. [15] E. Vonk, L. C. Jain, and R. P. Johnson. Automatic generation of neural network architecture using evolutionary computation (advances in fuzzy systems: Application and theory). In Proceedings of the Electronic Technology Directions to the Year 2000, 1995. [16] A. Weigend. On overfitting and the effective number of hidden units. In Proceedings of the 1993 Connectionist Models Summer School, 1994. [17] WorldSeriesOfPoker.com. Texas hold’em rules. http://www.wsop.com/Poker-Games/ Texas-Holdem/Rules, 2009. 32 5$%&#'()#*+"6 A1-"B'C0,("D2E/#'C*(0F","&2&-1C0G/ H2,)/C'"&2&-1C0G/ A123I"&2$21#4 A123I"B/#'"J"$CKD()"&2$21#*/A123I"'2,DC4"J"$CKD#G"B',# LC'B/*#%"EMNDO,N%+23I")-+C0G/ O,N%+23I"$',(K2JC*/C A123I"&2M.0,#4"J"%/#0/ A123I"-$'(+(0F"*#-'2*QJ 7 < 97 ())) 977 977 877 7P79 7P< *) < 8 < 97 ())) 977 977 877 7P79 7P< +) < 9 < 97 ())) 977 977 877 7P79 7P< ,) < : < 97 ')))) 977 977 877 7P79 7P< () < ; < 97 ')))) 977 977 877 7P79 7P< *) < < < 97 ')))) 977 977 877 7P79 7P< +) < = < 97 ')))) 977 977 877 7P79 7P< ,) < > < 97 ')))) 977 977 877 7P79 7P< () * ? < 97 ')))) 977 977 877 7P79 7P< *( + @ !"#$%"&'!"#$%&#'()#*+(",#"%+'-$+-'."%/#0/"/"/1230/."&2$21#4 < 97 ())) 977 977 877 7P79 7P< () < < 87 7 ; 9 ; < 8 7 7 7 @? 7 9?9 7 > 9< :9 9@ 7 7 87> 7 :77 9< 7 7 7 <> 8:: 8;= =7 << ? 9=@;: 8;<<?: X9<9@@; < 9 < @; ? 89 89> :77 :77 @9@8; 8;979< 8<97@@ 99::P? >87 RC$"0,N%+2"&/#'J%,( RC$"0,N%+2"&/#'J%,("ST5U RC$"0,N%+2"&/#'J%,("SV5U :? =? ;? 9=> 8<@ 99> 997 ;:;:; 89:78 :?=: ;;;8P8 ;<7= A1#"'C,("&',#B'CM","$/)$21J/#$ A1#"'C,("&',#B'CM","$/)$21J/#$"ST5U A1#"'C,("&',#B'CM","$/)$21J/#$"SV5U 8== 8:8=8> 8>? 979<? V#,"#1/+ V#,"#1/+ X8;<:< 8;9 @9 :7 :7 7 8:< 9@7 :77 :@8?; 98:?;; 98:=8; @;=P@ 9<9 897 879 <> 9>@ 8; 8@998 ;;@=? X8@9;=; 97?8P? ;?< ;8 87;=>< ?99:? ><77@ 89?;<> :7:;P: 98=: A1#"'C,("*C")/*-%/# A1#"'C,("*C")/*-%/#"ST5U A1#"'C,("*C")/*-%/#"SV5U W'#D*/"E/1C*% W'#D*/"E/1C*%"ST5U W'#D*/"E/1C*%"SV5U 98;9P? >=> V#,"#1/+ V#,"#1/+ W'#D*/"J/#$"S&2D"$2*/#0"#J21-0G/U L#D/C*C"J/#$-"S&2D"$2*/#0"#J21-0G/U -."/0 ;= 8 9? : 7= 7< < 98 '---988 988 788 8P89 8P< // 78 <? 78< :88 9= 8 9>@ = = 8 < 98 '---988 988 788 8P89 8P< '-/ 77 =;997 79:<=; 79<8>> 799 77 7< @7 8 8 ; 9 ; < 98 '.--988 988 788 8P89 8P< .0 79 7<?8P9 78:7 777977 7978=; 79;=?8 9: 79 77 8 8 8 : ? < < 98 '.--988 988 788 8P89 8P< 0. 1 7: :9?:P> 7;>= 799@;> 79?:>? 7:<<;9 7> 7: 98 9 8 8 < < @ < 98 '.--988 988 788 8P89 8P< // 7; 7;:@P? >=; 7:;:9; 77=:@8 79@979 = 7> > 8 8 8 ; < : < 98 '.--988 988 788 8P89 8P< '-/ 7< 7:>9P7 <== 9@77@ 77;@9; X98:8@8 777 ? :88 =8 8 9>= : : 8 < 98 '.--988 988 788 8P89 8P< 1. 0 7= 7@=>P9 7<78 77<?@< 79=>?> 79:7=> 9: 7< 77 > 8 8 9 < ; < 98 '.--988 988 788 8P89 8P< '-0 7> :=9<P@ 79=@ 778:@> 788>:@ @=@;< 79= 9?: 9?@ 7? ;9 =@ < 7 7 < 98 '.--988 988 788 8P89 8P< '2. 0 7? 9>;;P: 7:9? 79?:== 978@:9 7;<@;@ 7? 8 7?= 8 8 8 < 9; @ < 98 '.--988 988 788 8P89 8P< '.0 7@ !"#$%"&'&()*+,!"#$%&#'()#*+(",#"%+'-$+-'."%/#0/"/"/1230/."&2$21#4 @> 7;; 9<< ?797@ 7;789@ X97@9:< ;::7P< 9=79 5$%&#'()#*+"6 RC$"0,N%+2"&/#'J%,( RC$"0,N%+2"&/#'J%,("ST5U RC$"0,N%+2"&/#'J%,("SV5U ?>@;< 7=>9:7 7>>@<8 :;8? 7?@; W'#D*/"E/1C*% W'#D*/"E/1C*%"ST5U W'#D*/"E/1C*%"SV5U A1#"'C,("&',#B'CM","$/)$21J/#$ A1#"'C,("&',#B'CM","$/)$21J/#$"ST5U A1#"'C,("&',#B'CM","$/)$21J/#$"SV5U A1-"B'C0,("D2E/#'C*(0F","&2&-1C0G/ H2,)/C'"&2&-1C0G/ A123I"&2$21#4 A123I"B/#'"J"$CKD()"&2$21#*/A123I"'2,DC4"J"$CKD#G"B',# LC'B/*#%"EMNDO,N%+23I")-+C0G/ O,N%+23I"$',(K2JC*/C A123I"&2M.0,#4"J"%/#0/ A123I"-$'(+(0F"*#-'2*QJ A1#"'C,("*C")/*-%/# A1#"'C,("*C")/*-%/#"ST5U A1#"'C,("*C")/*-%/#"SV5U 97>9 ?>7 W'#D*/"J/#$"S&2D"$2*/#0"#J21-0G/U L#D/C*C"J/#$-"S&2D"$2*/#0"#J21-0G/U 34"56 M5$"1,I%+/"&-#'E%,( M5$"1,I%+/"&-#'E%,("OP7Q M5$"1,I%+/"&-#'E%,("OS7Q R; 9T: 9UV ;B UB RR B N ; B 9: ()))) ()) *)) ;:: :K:9 :KB B: B 9: V:UN; ;9RVBR XBTVBN RR ;< <:: B< : 99R < < : B 9: ()))) *)) ()) ;:: :K:9 :KB B: B 9; ;TUB ;BB< TRNUT TT:;: ;BNRV: ;VT 9UB 9B9 ;T VV 9< < < N B 9: ()))) (+) ',, ;:: :K:9 :KB B: B 99 9RVBK< 9N9B ;:<RVU ;<;NT9 ;9UNT; VN B ;: ;< : : N R B B 9: ()))) ',, (+) ;:: :K:9 :KB B: B 9< !"#$%"&'!"#$%&#'()#*+(","-./01-2"3-#'"-"-./01-2"'/,456 =.#"'5,("*5")-*>%-# =.#"'5,("*5")-*>%-#"OP7Q =.#"'5,("*5")-*>%-#"OS7Q ;9NRVU VTNB: URNUB <BT<KR ;<NT 7$%&#'()#*+"8 W'#4*-"?-.5*% W'#4*-"?-.5*%"OP7Q W'#4*-"?-.5*%"OS7Q 9:U:KV 9:R =.#"'5,("&',#3'5H","$-)$/.E-#$ =.#"'5,("&',#3'5H","$-)$/.E-#$"OP7Q =.#"'5,("&',#3'5H","$-)$/.E-#$"OS7Q =.>"3'51,("4/?-#'5*(1@","&/&>.51AC/,)-5'"&/&>.51A=./0D"&/$/.#6 =./0D"3-#'"E"$5F4()"&/$/.#*-> =./0D"'/,456"E"$5F4#A"3',# G5'3-*#%"?HI4> J,I%+/0D")>+51AJ,I%+/0D"$',(F/E5*-5 =./0D"&/H21,#6"E"%-#1=./0D">$'(+(1@"*#>'/*LE W'#4*-"E-#$"O&/4"$/*-#1"#E/.>1A-Q G#4-5*5"E-#$>"O&/4"$/*-#1"#E/.>1A-Q -."/0 N-$">,2%+?"&/#'G%,( N-$">,2%+?"&/#'G%,("PQ5R N-$">,2%+?"&/#'G%,("PT5R 9C 7V; 7VV 9 :: ;C : C C 9 7C ()))) 7CC 7CC (*) CKC7 CK9 9C 9 78 O79SVV O7;OUV X8OVV9 SS OS SCC C C 7OO 9 S C 9 7C ()))) 7CC 7CC (+) CKC7 CK9 9C 9 79 9O7:KO 8::: X9788 9SO;: X7:;7O 7:U 7V7 SCC OC: 98 OU: O C C 9 7C ()))) 7CC 7CC ,) CKC7 CK9 9C 9 7: 8S7: 89O9 O7OO7S OC9OSS O7O;S; SU OVO OO C C C : 8 : 9 7C ()))) 7CC 7CC -) CKC7 CK9 9C 9 7; !"#$%"&'!"#$%&#'()#*+(",")-'./*#%#)"01234 <=#"'-,("*-")/*4%/# <=#"'-,("*-")/*4%/#"PQ5R <=#"'-,("*-")/*4%/#"PT5R OOO:C9 9;SS8 97CVU OS;UKO :SU 5$%&#'()#*+"6 W'#3*/"0/=-*% W'#3*/"0/=-*%"PQ5R W'#3*/"0/=-*%"PT5R S;U9K; 7:OC <=#"'-,("&',#.'-1","$/)$?=G/#$ <=#"'-,("&',#.'-1","$/)$?=G/#$"PQ5R <=#"'-,("&',#.'-1","$/)$?=G/#$"PT5R <=4".'->,("3?0/#'-*(>@","&?&4=->A/ B?,)/-'"&?&4=->A/ <=?DE"&?$?=#F <=?DE"./#'"G"$-H3()"&?$?=#*/4 <=?DE"'?,3-F"G"$-H3#A".',# I-'./*#%"01234 J,2%+?DE")4+->A/ J,2%+?DE"$',(H?G-*/<=?DE"&?1L>,#F"G"%/#>/ <=?DE"4$'(+(>@"*#4'?*MG W'#3*/"G/#$"P&?3"$?*/#>"#G?=4>A/R I#3/-*-"G/#$4"P&?3"$?*/#>"#G?=4>A/R ./"01 O-$"6,K%+0"&2#'.%,( O-$"6,K%+0"&2#'.%,("QR8S O-$"6,K%+0"&2#'.%,("QT8S ?:: ?<V :PV ; ?P <? ?> :? U D :> ()))) :>> :>> D> )*)( >MD D> D :; ??<P=U ?P<P;< U=PV< ?== :V> :<< :< ?; ?>: P ?= > D :> ()))) :>> :>> D> )*)+ >MD D> D :< =>=>MD ??V; V===? V;:PV ?=D=D< <V ?<: > =U ? > ? = V D :> ()))) :>> :>> D> )*)' >MD D> D => :V:U :?V: PDU>D ?U;<V= X:=<P<; P= : =>> :; > :<? > ?< > D :> ()))) :>> :>> D> )*), >MD D> D =? !"#$%"&'!"#$%&#'()#*+(","&'-./0&0/012#3%+.#)".(%+4&2#*2-")5+-672 @A#"'-,("*-")2*5%2# @A#"'-,("*-")2*5%2#"QR8S @A#"'-,("*-")2*5%2#"QT8S ?U?:U< :>??:< ;>DP= ?<;;MP U;D 8$%&#'()#*+"9 W'#/*2"12A-*% W'#/*2"12A-*%"QR8S W'#/*2"12A-*%"QT8S :==?M: ?=?; @A#"'-,("&',#B'-J","$2)$0A.2#$ @A#"'-,("&',#B'-J","$2)$0A.2#$"QR8S @A#"'-,("&',#B'-J","$2)$0A.2#$"QT8S @A5"B'-6,("/012#'-*(6C","&0&5A-672 E0,)2-'"&0&5A-672 @A0FG"&0$0A#3 @A0FG"B2#'"."$-H/()"&0$0A#*25 @A0FG"'0,/-3"."$-H/#7"B',# I-'B2*#%"1JK/5 L,K%+0FG")5+-672 L,K%+0FG"$',(H0.-*2@A0FG"&0J46,#3"."%2#62 @A0FG"5$'(+(6C"*#5'0*N. W'#/*2".2#$"Q&0/"$0*2#6"#.0A5672S I#/2-*-".2#$5"Q&0/"$0*2#6"#.0A5672S -."/0