xlMuRlx / Texas-holdem

Obravnava verjetnosti zmage igralca v igri Texas hold 'em poker glede na njegove karte in število nasprotnikov.
0 stars 0 forks source link

Texas hold 'em poker

Texas hold 'em je ena izmed najbolj popularnih različic igre poker. Na začetku vsak igralec prejme dve karti, nato pa se skupne karte odpirajo v treh fazah. V prvi fazi se na igralni mizi odprejo tri karte, ki jih imenujemo tudi "flop", sledita ji še dve nadaljni, v katerih se odpre po ena karta, ang. "turn" in "river". Cilj vsakega igralca je poiskati čim boljšo kombinacijo petih kart iz vseh, ki jih ima na voljo, tj. dveh svojih in petih skupnih. Pred prvim odpiranjem skupnih kart in po vsaki opravljeni fazi se igralci odločajo o svojih stavah, pri čemer imajo na voljo metode izenači (ang. call), višaj (ang. raise), odstopi (ang. fold) in check. Na koncu zmaga igralec z najboljšo kombinacijo izmed vseh, ki so še v igri.

Sam bom v projektu obravnaval le verjetnosti zmage igralca glede na karte, ki so mu na voljo. Gre torej za obravnavo, da bo z do sedaj zbranimi kartami igralec na koncu imel izmed vseh najboljšo kombinacijo kart. Zaradi tega program nikakor ne bo obravnaval stavnih metod igralca, saj je namenjen zgolj pomoči igralcu pri uresničevanju svoje igralne strategije.

Navodila za uporabnika

Glavni program se nahaja v datoteki ui.R. Po zagonu te datoteke se pred njim pojavi uporabniška konzola, v kateri uporabnik nato izbere naslednje parametre, na podlagi katerih se izračuna iskana verjetnost:

Po njihovi izbiri klikne na gumb Izračunaj!, ki program požene in izpiše končno verjetnost zmage. Prav tako izriše tudi tabelo, ki prikazuje verjetnost zmage z neko specifično kombinacijo (npr. en par, lestvica, ...).

Kombinacije in njihove verjetnosti

Temelj zgoraj opisane igre vsekakor predstavljajo verjetnosti, da pridemo do neke želene kombinacije kart. Seveda so pravila igre zastavljena na način, da je najmočnejša kombinacija najmanj verjetna. Tako se npr. royal flush, pojavi zgolj z verjetnostjo 0.000154%, medtem ko do najbolj pogoste kombinacije, enega para, pridemo približno z verjetnostjo 42.3%.

Izračun teh verjetnosti torej predstavljajo osnovo mojega programa. Seveda moramo upoštevati tudi spreminjajoče se dejavnike, kot so število nasprotnikov in pa že odprte karte. Po vsaki fazi odpiranja kart se namreč zaradi na novo pridobljenih podatkov iskane verjetnosti lahko drastično spremenijo.

Model

Temeljna funkcija mojega programa je funkcija ovrednoti, ki dani kombinaciji sedmih kart določi neko numerično vrednost, s pomočjo katere lahko kombinacije med seboj primerjamo. Pri tem je pomembno omeniti, da se vselej seveda upošteva zgolj 5 kart, ki sestavljajo najboljšo kombinacijo. Vrednost je sestavljena iz dveh delov, pri čemer nam celoštevilski del pove vrednost dosežene kombinacije, decimalni del pa vsoto upoštevanih kart, tj. zgolj kart, ki npr. sestavljajo par ali tris, ne pa tudi preostanka izbranih 5 kart, kar potrebujemo za medsebojno primerjavo enakih kombinacij. Vrednosti kombinacije so bile določene v skladu z njihovo močjo, in sicer:

Pri tem je pomembno omeniti še dejstvo, da se običajno posebej obravnava še kraljevo lestvico. Ker pa v programu decimalni del predstavlja vsoto uporabljenih kart, smo z njim že upoštevali, da gre zgolj za najvišjo barvno lestvico, zato ni potrebno definirati še enega razreda (npr. A:hearts:, K:hearts:, Q:hearts:, J:hearts:, 10:hearts: ima vrednost 8,60).

Preostanek programa temelji na ideji Monte Carlo metod in se nahaja v datoteki model.R, kjer je definirana tudi glavna funkcija za izračunavanje model. Ta najprej preveri, če smo izbrano kombinacijo kart že kdaj srečali, saj si izračunane verjetnosti shranjujemo v datoteko ze_izracunane.csv. V kolikor so bile iskane verjetnosti kdaj že izračunane, vrednosti izpiše takoj, sicer pa jih izračunamo na novo. Zaradi prevelikega števila možnih kombinacij je obravnava vseh scenarijev nemogoča, zato v resnici računamo približke iskanih verjetnosti. Za izbrane parametre tako program naključno generira neko dovolj veliko število iger in opazuje v koliko od njih igralec zmaga in v primeru zmage tudi na kakšen način. Za iskane verjetnosti tako vzamemo kar razmerja, pridobljena s pomočjo obravnave teh scenarijev.