790 likes | 928 Views
Sztuczna intelegencja w grze Poker. Autor: Pham Hoang Minh. Odmiana Pokera „Texas Holdem”. Cztery fazy rozgrywki: Pre-flop Flop Turn River. Wprowadzenie. Poker interesująca gra do badań AI Gra o niepełnej informacji Wieloosobowa rywalizacja Probabilistyczna wiedza (o przeciwnikach)
E N D
Sztuczna intelegencja w grze Poker Autor: Pham Hoang Minh
Odmiana Pokera „Texas Holdem” • Cztery fazy rozgrywki: • Pre-flop • Flop • Turn • River
Wprowadzenie • Poker interesująca gra do badań AI • Gra o niepełnej informacji • Wieloosobowa rywalizacja • Probabilistyczna wiedza (o przeciwnikach) • Ocena ryzyka • Możliwe oszustwo (blefowanie)
Niepełna kontra pełna informacja • Sukcesy AI w grach typu szachy, warcaby, ... • Kompletna informacja o stanie gry • Programy zdolne pokonać najlepszych graczy • W kontraście gry typu: Poker, Brydż, ... • Karty innych graczy są nieznane • Trudność tworzenia programów na poziomie „World-Class”
Tradycyjne metody nie działają • Metoda „Deep Search” (min-max) się nie sprawdza • Niekompletna informacja to powód wolnego postępu systemów AI gry Pokera • Lecz to powód większego potencjału badawczego
Cel: tworzenie gracza pokera na poziomie „World-Class” • Atrybuty które gracz pokera na poziomie „World-Class” musi posiadać : • Umiejętność oceny Hand Evaluation (Wartości swojej ręki) • Unpredictability (Nieprzewidywalność) • Bluffing (Blefowanie) • Opponent Modeling (Modelowanie przeciwników)
Hand Strength • Ocena siły naszej ręki w relacji z rąk przeciwników • Obliczenie rozważa prawdopodobieństwo każdej możliwej ręki przeciwników, bazując na stan aktualnej gry • Dokładniejsze obliczenie uwzględnia: • Ilość graczy nadal uczestniczących w grze • Względnej pozycji gracza przy stole • Historia licytacji aktualnej partii
Hand Potential • Obliczenie prawdopodobieństwo zmiany naszej ręki: • Prowadzi do zwycięstwa • Prowadzi do porażki • Przykład: • Ręka posiadająca 4 karty samego koloru • Niska siła ręki • Duży potencjał na osiągnięcie „kolor” (flush)
Unpredictability • Utrudnia przeciwników do rozpoznania modelu naszej strategii • Mieszając strategie (spodarycznie rozwiązać daną sytuację różnymi sposobami) • Przeciwnicy mogą popełnić błędy oparte na niepoprawnych przewidywaniach
Bluffing • Postawowy atrybut dla pomyślnej gry • Umożliwia wygranie partii z słabą ręką • Powoduje niepokój przeciwników • System może tworzyć teoretycznie optymalną częstość blefowania w poszczególnych sytuacjach
Bluffing c.d. • Minimalny system blefowania używa: • „Hand Strength” • „Hand Potential” • Lepszy system identyfikuje: • zysk blefu • wnioskuje w przybliżeniu siły ręki przeciwników • przewiduje procent ich pasowania (fold)
Opponent Modeling • Przewiduje postępowanie przeciwników w poszczególnych sytuacjach • Minimalny system używa pojedynczego modelu dla wszystkich przeciwników • Ulepszony posiada unikalny model dla każdego oponenta, oparty na jego osobistej historii gry w przeszłości
Inne cechy... • System AI na poziomie„World-Class” musi posiadać wszystkie wymienione atrybuty • Istnieją jeszcze drobne cechy potrzebne do osiągnięcia tego poziomu • Te cechy stanowią część „Betting Strategy” (Strategie Licytacji), która determinuje system: kiedy pasować (fold), wejść (call) czy podbijać (raise) w poszczególnych sytuacjach
Betting Strategy • Betting Strategy dzieli się na: • „Pre-flop” • „Post-flop” • Fazy te znacząco się od siebie różnią: • Pre-flop : 2 „hole cards”, wcześniejsze akcje graczy podczas 1-szej licytacji • Post-flop : pełniejszy kontekst gry, „2 hole cards” i „community cards”, historię wcześniejszych decyzji licytacji przeciwników
Betting Strategies w „Pre-flop” • Wiedza eksperska: • Sklansky’s rankings (Rangi Sklanskiego) • Hutchison system (System Hutchisona) • Symulacje: • Roll-out simulation • Iterated Roll-out simulation • Te metody służą do wyliczenie „income rate” (wartości ręki ) 2 „hole cards” podczas fazy „Pre-flop”
Wiedza eksperska • Sklansky’s ranking • Hutchison system • Przypisanie każdej ręki pewnej ilości punktów wg. ustalonych reguł przez profesjonalistów gry Poker, na podstawie których podejmiemy decyzję licytacji
Roll-out simulation • Polega na obliczenie kilka milionów partii, gdzie wszystcy gracze wybierają „call” podczas pierwszej licytacji (Big blind) • Po czym pozostałe karty zostają rozdane bez jakikolwiek dalszych zakładów • Nierealistyczna sytuacja • Jednak daje podstawowe przybliżoną ocenę ręki w danej sytuacji
Iterated Roll-out simulation • Udoskonalenie symulacji „roll-out” • Uwzględnia wiedzę zdobytą w poprzednich partiach • Jeżeli dana 2 kart właśnych ma ujemny bilans w poprzednich partiach, zwiększa się % ze gracz pasuje w fazie „Pre-flop” • Wady: nie uwzględnia pozycje gracza w stole i działanie przeciwników podczas licytacji
Ważne pojęcia w „Post-flop” • Probability Triples • Hand Strength • Weighting the Enumerations • Multi-player Considerations • Hand Potencial • Effective Hand Strength • Noise-Factors • Pot Odds
Probability Triples • Uporządkowana trójka wartości: • PT = {fall,call,raise}, gdzie fall + call + raise = 1 • Reprezentuje dystrybucję prawdopodobieństwa ze następna akcja licytacji w zadanym kontekscie gry będzie odpowiednio: • „fold”, „call”, „raise”
Użycie Probability Triples • Probability triples używa się w nast. przypadkach: • Formula-based Betting Strategy używa Probabilty Triples do wyboru akcji (fold, call, raise) • Opponent Modelling używa Probabilty Triples do modyfikacji „Weight Table” • Simulation-based Betting Strategy używa Probabilty Triples do wyboru akcji dla zasymulowanego przeciwnika
Zalety Probability Triples • Pozwala przekształcić różnych elementów systemu do jednego komponentu, który zwraca Probability Triples • Przydatne np. podczas używania różnych metod modelowania przeciwnika • Inne elementy systemu mogą używać takie komponenty jako „black box”
Hand Strength • Prawdopodobieństwo, że dana ręka jest lepsza od ręki aktywnych oponentów • Zakładamy, że przeciwnik posiada C(2,n) możliwych dwóch kart właśnych z tym samym prawdopodobieństwem • Gdzie : • C - kombinacja • n - liczba nierozdanych kart
Hand Strength c.d. • Lepsza ręka : +1pkt • Remis : +1/2 pkt • Gorsza ręka : +0 pkt • Siła ręki = suma pkt/ilość możliwych rąk • Np. dla pewnej ręki HS wynosi 58%, tzn. ona ma 58% więcej szansy niż losowa ręka • Lepsza metoda obliczenia siły ręki używa Weighting the Enumerations
Hand Strength (pseudo-kod) • HandStrength(ourCards, boardCards) • { • ahead = tied = behind = 0; // liczniki wyników • ourRank = obliczRank(ourCards, boardCards); • foreach oppCards in allCases • { • oppRank = obliczRank(oppCards, boardCards); • if (ourRank > oppRank) ahead++; • else if(ourRank == oppRank) tied++; • else behind++; • } • handStrength = (ahead+tied/2) / (ahead+tied+behind); • return(handStrength); • }
Weighting the Enumerations • Zakładaliśmy podczas obliczanie „Hand Strength”, że wszystkie kombinacje 2 „hole cards” są tak samo prawdopodobne (dodaliśmy po 1) • W prawdziwej grze się znacznie od siebie różnią • Aby to uwzględnić używamy „Weight Tables” (Tablicę Wag) do uwzględnienie prawdopodobieństwa tych kombinacji • Każdy przeciwnik posiada właśny „Weight Table” w każdej partii
Przykład „Weight Table” w różnych fazach gry • Każde pole w tablicy posiada liczbę z przedziału [0,1] • Czarny kolor: 1, Biały kolor: 0
Weighting the Enumerations • foreach ‘entry’ in table • { • // obliczenie Probability Triples • ProbabilityDistribution pd[fold, call, raise]; • Compute(pd); // „Opponent Modeling” (predict) • table[‘entry’] = table[‘entry’] * pd[A] ; • // A - rzeczywista akcja przeciwnika • }
Multi-player Considerations • Uwzględnienie wielu graczy dla Hand Strength • HS(n) = HS(p1) * HS(p2) * ... * HS(pn) • p1,p2,...,pn - przeciwnicy • Nie jest to dokładna wartość, ponieważ HS przeciwników nie są niezależne, np. Weight Table tego nie uwzględnia
Multi-player Considerations c.d. • Zeby zaoszczędzić czas na obliczenie HS każdego przeciwnika, można używać • „Field Array” • Jest to tablica wag, w którym wagi stanowią średnią wag wszystkich tablicy wag graczy uczestniczących w grze • HS(n) = [HS(field)]^n • Daje mniej dokładny wynik, czasami duże błędy
Hand Potencial • Po „flop” jeszcze następują fazy „turn” i „river” • 2 nieukazane karty mogą znacznie zmienić siłę naszej ręki • Hand Potencial dzieli się na: • Positive Potencial (PPot) • Negative Potencial (NPot)
Hand Potencial c.d. • PPot : prawdopodobieństwo, że nasza aktualna, nie najlepsza ręka się polepszy i wygramy partię. • PPot = P(ahead|behind) + P(tied|behind)/2 + P(ahead|tied)/2 • NPot : prawdopodobieństwo, że nasza aktualna, najmocniejsza ręka przy stole się pogorszy i przegramy partię. • NPot = P(behind|ahead) + P(behind|tied)/2 + P(tied|ahead)/2
Hand Potential (pseudo-kod) • HandPotential(ourCards, boardCards) • { • ourRank = obliczenie_siły_naszej_ręki • foreach oppCards in allCases • { • // Obliczenie wszyskich przypadków wystąpienia kart w turn i river • foreach case in turn • foreach case in river • obliczenie_indeksów_dla_różnych_sytuacjach • } • obliczenie PPot i NPot na postawie wyliczonych indeksów • return(PPot, NPot); • }
Effective Hand Strength • EHS łączy w sobie siłę ręki i potencjał ręki. Daje względną miarę siły naszej ręki w porównaniu z rękami przeciwników • EHS = P(ahead)*P(opponent do not improve) + P(behind)*P(we improve) EHS = HS*(1-NPot) + (1-HS)*PPot • PPot ważniejszy od NPot • EHS = HS + (1-HS)*PPot (dla NPot = 0) • Uwzględnienie wielu graczy • EHS(i) = HS(i) + (1-HS(i))*PPot(i)
Noise-Factors • Wartość z przedziału [0,1] • Reprezentuje niepewność naszej wiedzy, jak akcja wykonana przez przeciwnika odwierciedla posiadanych przez niego kart • Modyfikuje „Probability Triples” • (dystrybucja {Pr(fold), Pr(call), Pr(raise)}) • używana w „Weighting the Enumeration”. • Każde zdarzenie a w dystrybucji jest zmienione • a = a – a*b + b/|D| • gdzie: b - noise-factor, D – probability distribution, |D| = 3
Noise-Factors (przykład) • Probability Triples {0.0, 0.2, 0.8} • noise-factor = 0.5 • Obliczenie: • Pr(fold) = 0 – 0*0.5 + 0.5/3 = 1/6 = 0.167 • Pr(call) = 0.2 – 0.2*0.5 + 1/6 = 0.267 • Pr(raise) = 0.8 – 0.8*0.5 + 1/6 = 0.567 • Po uwzględnieniu noice-factor • Probability Triples {0.167, 0.267, 0.567}
Pot Odds • Stosunek rozmiaru „pot_size” (sumy zakładu na stole) do kwoty naszej licytacji • Mówi nam, czy z naszą aktualną ręką warto grać dalej (opłacalność inwestycji) • Immediate_pod_odds = amount_to_call / (pot_size + amount_to_call)
Pot Odds (przykład) • Immediate_pod_odds = 10zł / (50zł + 10zł) 0.167 • Jeżeli postanowimy „call” w sytuacji, gdy mamy więcej niż 16.7% na osiągnięcie wygrywającej ręki, to oczekiwana opłacalność jest pozytywna • W przypadku gdy mamy 15% szansy wygranej, wówczas nie opłaca się „call” • Wartość oczekiwana inwestycji = (50zł*0.15) – (10zł*0.85) = -1zł
Pozostałe atrybuty licytacji • Implied pot odds • Względna pozycja licytacji • Historia licytacji aktualnej partii • Kieszeń przeciwnika • ...
Betting Strategies w „Post-flop” • Formula-based Betting Strategy (Basic) • Selective Sampling and Simulation-based Betting Strategy
Formula-based Betting Strategy • Sprawiedliwa formuła do oceny wartości ręki, daje odpowiedz na właściwą licytację. • Używamy 3 następujących kroków: 1) Obliczenie „Effective Hand Strength” EHS (Efektywnej Siły Ręki), względną siłę naszej ręki w porównaniu z oponentami
Formula-based Betting Strategy 2) Użycie kontekstu gry, sztywnych zasad do obstawiania, formuł do przekształcenia EHS w dystrybucję prawdopodobieństwa zdarzenia {Pr(fold), Pr(call), Pr(raise)} (Probability Triples) 3) Generowanie losowej liczby [0,1] i użycie jej do wyboru jednej z akcji z dystrybucji. Daje to nieprzewidywalność
Selective Sampling and Simulation-based Betting Strategy • Formula-based Betting Strategy jest równoważny z statyczną funkcją oceny w grach o pełnych informacjach (szachy, GO,...) • Próba znajdowania algorytmu podobnego do Alpha-Beta w dziedzinie gry Poker • Selective Sampling wybiera do symulacji najbardziej prawdopodobne przypadki występowania kart (przeciwników), np. używając „Weight Table” • Przeprowadzimy symulacje do końca i zbieramy wynik każdy z tych prób
Selective Sampling and Simulation-based Betting Strategy • Z odpowiednio dużą liczbę prób, symulacji daje statystyczne pewne wyniki • Dla każdej próby, ręka jest zasymulowana 2 razy • call (check) • raise (bet) • Nie używamy pełnych przeszukiwań • Używamy rzadkich, lecz głębokich symulacji wielokrotnie aż do liści
Simulation (pseudo-kod) • Simulation() • { • trials = callEV = raiseEV = 0; • while (trials < MAX_TRIALS) • { • przydzielKarty(); • callEV += simulate(call); • raiseEV += simulate(raise); • trials++; • } • callEV = callEV / trials; • raiseEV = raiseEV / trials; • return(callEV, raiseEV); • }
Selective Sampling and Simulation-based Betting Strategy • Dla każdej decyzji używamy 200-300 symulacji, ze względu na ograniczenie czasowe gry • Po kilkuset symulacji średnia ilość zwycięstw lub przegranych po akcji „call”, „raise” zbiega sie do • oczekiwanych wartości akcji (Expected Value EV) • EV dla „fold” może być obliczony bez symulacji, ponieważ nie wpływa na przyszłych zysków czy strat
Zalety i Wady Simulation Betting Strategy • W przeciwieństwie do Formula-based Betting Strategy, nie jest on sztywną strategią • Może drastycznie się zmienić w zalezności od „opponent models” • Dostosowuje się do różnych oponentów • Silna relacja jakości symulacji do funkcji oceny akcji przeciwników (Opponent Modeling) • Taktyka przeciwnika (bluffing, slowplaying, check-raising) jest odkryta podczas symulacji