Mam pytanie. Jest jakiś szybki sposób, na zrobienie sztucznej inteligencji dla komputera w grze poker ?? Zamierzam tą grę napisać, i bez jakiejś sztucznej inteligencji, będę musiał zastosować BARDZO dużo if'ów :/
Poker to gra losowa ;) Więc niech losuje sobie ile kart zastawi i które ma zastawić też :)
Jak chcesz zobaczyć jak to się robi profesjonalnie to polecam podglądnięcie sobie źródeł gier, np. na sourceforge powinieneś coś znaleźć :)
no ale wiesz.. :D jak będzie miał np. :
9,9,walet,dama,król
to wiadomo, że trzeba by było wyrzucić 9, a komputer by losowo wyrzucił np. dame ... :D rozumiesz o co chodzi ;)
No to byłyby 2 opcje (w pierwszej wersji programu może być jedna ;) ):
- ryzykowna gra (uwzględnienie pokerów, streight'ów, karet, trójek itd.)
- pewna gra (czyli jak jest para to niech nie rozbija pary, wymienia resztę, jak nie wychodzi mu para, to niech wymienia losową ilość kart).
A poza tym większe prawdopodobieństwo w ogóle ugrania czegokolwiek to właśnie zostawienie pary dziewiątek bo może się trafić trójka a nawet kareta :]
vax napisał(a)
no ale wiesz.. :D jak będzie miał np. :
9,9,walet,dama,król
to wiadomo, że trzeba by było wyrzucić 9, a komputer by losowo wyrzucił np. dame ... :D rozumiesz o co chodzi ;)
szczerze.. ja byl wywalil J Q K i liczyl ze wsrod nowych trzech kart bedzie jeszcze dziewiatka..
Poszukaj w internecie opisu gry w pokera i strategii (zacznij od wiki). Tam na pewno są rady jak grać, a ty jedynie co masz zrobić to zaimplementować te rady.
W tym algorytmie wszystko musi opierać się o rachunek prawdopodobieństwa i w zasadzie cały algorytm opierałby się na jego obliczaniu na podstawie posiadanych informacji, a następnie optymalizowaniu (maksymalizowaniu) nadziei statystycznej. Dla bardziej zaawansowanych można jeszcze dołożyć sieć neuronową, która będzie się uczyć zachowania przeciwnika.
A tak z ciekawości jaki to ma być poker? Teksański czy jakiś bardziej prymitywny?
To ma być poker, taki normalny, co grają w kasynach, duży poker, strit'y, pary karety itd. :)
Poker pokerowi nie równy. W wiki jest wypisane są tylko niektóre mutacje:
* Texas Hold'em
* Omaha (poker)
* Omaha High-Low
* Poker siedmiokartowy otwarty
* Poker pięciokartowy dobierany
Najpopularniejszy i najciekawszy jest siedmiokartowy otwarty. Ty pewnie masz na myśli ten ostatni.
Pomijam na razie kwestię obstawiani, oto mój pomysł (brute force) na samo wybieranie kart do wymiany.
Zrób sobie listę wszystkich możliwych 5-elementowych kombinacji 24 kart, posortuj wszystkie kombinacje względem ich siły.
Gdy komputer dostanie z rozdania 5 kart któreś z nich musi wymienić - rozpoczyna szukanie najlepszego rozwiązania. Sprawdź skuteczność wszystkich możliwych kombinacji odrzucenia kart, czyli wszystkie kombinacje dowolnej ilości z 5 posiadanych kart. Będzie ich nie wiele:
2*((5 po 0) + (5 po 1) + (5 po 2)) = 2*(1+5+10) = 32 kombinacje
Dla każdej pojedynczej kombinacji sprawdzamy jej skuteczność:
Z listy wszystkich możliwych rozwiązań (którą sporządziłeś na samym początku) odrzuć te, które na pewno nie padną - wszystkie te, które wymagają przynajmniej jednej z wymienianych kart, nazwijmy ją lista A.
Stwórz listę wszystkich możliwych 5-tek kart jakie można uzyskać po dobraniu wymienianych kart. Nazwijmy ją lista B. O sile każdego elemntu z listy B decyduje pozycja na liście A. Każdy element listy B może paść z równym prwdopodobieństwiem - wyciągnij średnią z pozycji elementów listy B na liście A. Ta średnia decyduje o sile listy B czyli o jakości odrzucanej kombinacji kart. Podziel tą średnią przez długość listy A - zagwarantuje to wynik zawsze w skali od 0 do 1.
Powyższy współczynnik jakości oblicz dla wszystkich 32 kombinacji wymiany kart. I teraz możesz wybrać najlepszą kobinację, lub losować kobinację z prawdopodbieństwem zgodnym z jakością.
Do implementacji powyższego algorytmu możesz użyć szybszych metod przybliżonych - im większy stopień trudności tym lepsze przybliżenie, ale dłuższe obliczenia.
Jeśli chodzi o mądre obstawianie, blefowanie itp. to będzie ciężko. Sieć neuronowa - owszem, ale na pewno nie dorówna człowiekowi.