Elektrotehniški vestnik 79(1-2): 13-18, 2012 Existing separate English edition Poker program Rembrant Gregor Vohl, Borko Boškovic, Janez Brest Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko, Smetanova ulica 17, 2000 Maribor, Slovenija E-pošta: gregor.vohl@gmail.com Povzetek. Texas Hold'em je zvrst pokra, ki je v začetku 21. stoletja navdušila veliko ljudi. To je zelo popularna igra z 52 kartami. Ker je poker relativno neraziskana veja umetne inteligence, smo se odločili sprejeti izziv in naredili program za igranje pokra Texas Hold'em. Program vsebuje algoritem, ki smo ga razdelili na dva dela. Prvi del je igra z zaprtimi kartami in ena faza stavljanja. Drugi del je kombinacija zaprtih in skupnih kart, kjer so tri faze stavljanja. Algoritem v prvem delu uporablja pravila za igranje z zaprtimi kartami. V drugem delu, v igri s skupnimi kartami, pa algoritem igra po načelu situacijske igre in izkušenj avtorja. Tako je nastal poker bot oz. program Rembrant, ki igra poker Texas Hold'em. Ključne besede: poker, texas hold'em, program, poker bot, karte Poker program Rembrant Poker program Rembrant is a program for playing Texas Hold'em poker heads up. Program includes an algorithm which is divided into two parts. The first part is preflop phase and one stage of betting. The second part is postflop phase with three phases of betting. The algoritm in preflop is based on common poker rules for playing preflop cards. In second phase the algorithm is playing with the rules of situation play mixed with experience of author. Poker program Rembrant played at ACPC competition in San Francisco and achieved good results. 1 Splošno o pokru in poker botih Poker spada v družino iger s kartami, kjer je mogoce staviti in kjer se koncne kombinacije kart rangirajo. Razlicne zvrsti igre se med seboj razlikujejo glede na: nacin deljenja kart, nacin ovrednotenja koncnih kombinacij, kako je postavljena omejitev posamezne stave in število stav v fazi igre. Poznamo vec razlicnih vrst pokra, kjer obstajajo enaki vzorci nacina stavljanja in rangiranja koncnih kombinacij. Zgodovina pokra je že od nekdaj predmet razlicnih razprav. Ena prvih iger, ki je uporabljala stavljanje, rangiranje kart in blefiranje, izhaja iz 15. stoletja in se imenuje "Pochspiel". Prvi zametki pokra so vidni v perzijski igri "As Nas", a žal pred letom 1890 ni o igri nikakršnih znanih zapisov [1]. V 90. letih prejšnjega stoletja so zgodovinarji iger postavili razlicne teorije o nastanku pokra. Nekateri so trdili, da je poker izpeljanka iz arabske igre, drugi pa, da je nastal iz francoske igre, imenovane "poque" (ime najverjetne izhaja iz irske besede "poca", pocket - žep) [2]. Sodobna razmišljanja zavracajo takšne teorije, ker so osredinjene na trivialno igro s kartami, ki bi se lahko razvila iz poljubnega števila predhodnih iger s kartami. Unikatne Prejet 24. november, 2011 Odobren 6. december, 2011 lastnosti pokra se vrtijo okrog stavljanja. Vzorcev stav se ni bilo v nobeni stari igri. Skozi ta pogled je poker nastal v zgodnjih ali srednjih letih 18. stoletja, in se do leta 1800 razširil cez obmocje reke Mississippi. Igrali so igre iz družine straight ali draw z 52 kartami. 1.1 Poker bot Rembrant Poker je predstavnik iger z nepopolnimi informacijami in je tako idealna podlaga za raziskave podobnih problemov. Probleme lahko preprosto prevedemo v vsakdanji svet, kjer se pogosto znajdemo v položaju, ko ne poznamo vseh okolišcin (nepopolna informacija), preden se moramo odlociti. Razlicna tekmovanja s poker boti pomagajo pri razvoju boljših strategij in metod umetne inteligence, ki bi jih lahko uporabili tudi na drugih podrocjih (e-izobraževanje, borza, finance, medicina ...). Torej vsepovsod, kjer imamo opravka z nepopolnimi informacijami [3]. Prvi poker bot ORAC je nastal leta 1984. Avtor je bil poklicni igralec pokra in avtor mnogih knjig o pokru, Mike Caro. Svojega bota je poimenoval tako, da je obrnil crke svojega priimka. Leta 1984 je na tekmovanju World Series of Poker predstavil svoje delo in navdušil vse prisotne. ORAC je vseboval tudi že kalkulator za racunanje razmerja stav in kolicine žetonov, ki so že v igri (ang. pot odds) [4]. Leta 2005 je bilo organizirano tekmovanje "World Series of Poker Robots", na katerem so se pomerili strokovnjaki s podrocja umetne inteligence za 100.000 dolarjev nagrade s svojimi poker boti. Leta 2006 je raziskovalna skupina "Computer Poker Research Group" na Univerzi v Alberti (Kanada) uvedla letno tekmovanje racunal-niških programov, ki znajo igrati poker. Tekmovanje "Annual Computer Poker Competition" (ACPC) [5] je vsako leto organizirano na konferencah "Association for the Advancement of Artificial Intelligence" ali "Inter- national Joint Conférences on Artificial Intelligence", kjer se pomerijo najboljši poker boti na svetu [6]. Leta 2007 je Univerza v Alberti izvedla tekmovanje "Man vs Machine", kjer je njihov poker bot Polaris igral proti povabljenim igralcem pokra [7]. Leta 2011 je tekmovanje ACPC potekalo v San Franciscu, udeležil pa se ga je tudi naš poker bot. 2 Algoritem Implementirali smo program, kije preprost in učinkovit. Da bi dosegli zastavljeni cilj, smo se osredinili na lastne izkušnje in poznavanje pokra. To znanje smo v program prenesli s pomocjo situacijskih pravil. Pogoj za definiranje situacijskih pravil je poznavanje pravil igre. Med pravila spadajo akcije in zmagovalne kombinacije kart. Prav tako pa mora program vsebovati še komunikacijski protokol, ki omogoca interakcijo z uporabnikom ali drugimi poker boti. 2.1 Akcije Akcija je posamezna poteza igralca, ki ima pravico do igranja v posamezni fazi igre. V fazi stavljanja algoritem izvede eno od naslednjih akcij: • Naprej (ang. check) - Igralec ne stavi in igralna pravica se prenese na naslednjega igralca. • Stava (ang. bet) - Igralec položi na igralno površino želeno kolicino žetonov. • Ponovna stava (ang. re-raise) - Igralec stavi vecje število žetonov, kot jih je stavil v isti fazi igralec pred njim. • Placilo (ang. call) - Igralec z žetoni izenaci predhodno višino stave. • Odstop (ang. fold ali muck) - Igralec ne želi vec sodelovati v igri, ali zato, ker ima slabe karte, ali pa je stava previsoka, da bi jo placal. Muck je izraz, ki se uporablja, kadar premagan igralec odvrže zaprte karte. • All-in - igralec stavi vse svoje žetone. 2.2 Zmagovalne kombinacije V drugi fazi igre, imenovani postflop ali igra s skupnimi kartami, se pred vsako fazo stavljanja izracuna trenutna koncna kombinacija petih kart, sestavljena iz zacetnih in skupnih kart. Koncne kombinacije od najvišje do najnižje: • kraljeva lestvica (royal flush): A K Q J T v isti barvi, • barvna lestvica (straight flush) : pet zaporednih kart (npr. 4 5 6 7 8) v isti barvi, • poker: štiri karte iste vrednosti (npr. 7 7 7 7 *), • full house: tris in par (npr. A A A Q Q), • barva (Flush): pet kart iste barve (npr. pet src), • kenta oz. lestvica (Straight): pet zaporednih kart (npr. 5 6 7 8 9) ne v isti barvi, • tris: tri karte iste vrednosti (npr. 8 8 8 **), • dva para: (npr. A A K K *), • par: dve karti iste vrednosti (npr. 9 9 * * *) in • High Card: (npr A * * * *). Tabela 1 prikazuje matematične verjetnosti, da se iz zacetnih in skupnih kart sestavi določena kombinacija na flopu (prva faza skupnih kart) [8]. Tabela 1: Matematične verjetnosti Kombinacija kart Verjetnost zadetka po flopu [%] Najvišja karta 50 Par 42 Dva para 4,75 Tris 2,1 Lestvica 0,39 Barva 0,20 Full house 0,14 Poker 0,024 Barvna lestvica 0,0015 Royal flush 0,0000375 2.3 Komunikacijski protokol Uporabniški vmesnik uporablja komunikacijski protokol, ki mu omogoča komunikacijo s programom. Pri tem protokolu se prenašajo informacije o akcijah kot prikazuje naslednji primer: Pozicija : št. igre : akcije : lastne karte / skupne karte • Pozicija - pomeni malo slepo stavo (small blind), ali pa veliko slepo stavo (big blind) • Št. igre - zaporedno število, ki je informacija o odigranih igrah. • Akcije - osnovne poker akcije (check, call, raise in fold). • Posamezne faze stavljanja in karte so locene z znakom "/". • Lastne karte in skupne karte - vsaka karta je ozna-cena z znakom za barvo in vrednostjo. Veljavne vrednosti kart so: 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A, pri cemer je T = 10, J = fant, Q = dama, K = kralj, A = as. Veljavne vrednosti igralnih barv so: c, s, d in h. Oznake izhajajo iz angleških imen za igralne barve; c = križ (ang. club), s = pik (ang. spade), d = kara (ang. diamond) in h = srce (ang. heart). Na primer oznaka: Ts = 10 v piku. Formalen zapis protokola v BNF (Backus-Naur Form) obliki: ::= ":" <št.igre> ":" ":" "/" ::= "1" I "0" <št. Igre> ::= ::= "f" I "c" I "r" ::= ::= ::= "/" "/" ::= "h" I "s" I "c" I "d" ::= "2" I "3" I "4" I "5" I "6" I "7" I "8" I "9" I "T" I "J" I "Q" I "K" I "A" Primer sporočila: 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Sporočilo vsebuje zadnjo akcijo bota in zdaj je na vrsti nasprotnik. 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Trenutno je v teku 13. igra. 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Vplacane slepe stave in akcije pred flopom in na flopu. Vplacani sta bili mala slepa stava 1 in velika slepa stava 2. Bot je stavil na 6, igralec je povišal na 18. Bot je ponovno stavil više, na 30. Igralec je stavo izenacil na 30. Po koncani prvi fazi stavljanja so skupne karte imenovane flop. Zdaj je igralec minimalno stavil in tako povišal število žetonov na 32. Zadnjo akcijo je izvedel bot in povišal na 96. 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Bot ima pik kralja in karo 2. 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Na flopu so skupne karte pik 5, pik 2 in srce 6. 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Igra je v drugi fazi stavljanja - dve akciji po flopu. Ugotovi se tudi, da je igralec 0, v tem primeru clovek, vložil 32 žetonov in igralec 1, v tem primeru poker bot, vložil 96 žetonov. Iz tega sledi, da mora prvi igralec placati še 64 žetonov, ce hoce ostati v igri. 0:13:b1b2r6r18r30c30/r32r96:Ks2dI/5s2s6h Bot je zadel najnižji par - par dvojk in ima možnost barve - tri karte so piki. 3 Opis algoritma Glavna ideja je bila izdelati preprost in ucinkovit program za igranje pokra. Pri izvedbi smo uporabljali metode situacijskih pravil, ki smo jih definirali na podlagi lastnih izkušenj. Algoritem programa smo razdelili na dve skupini - preflop in postflop. Preflop je faza igre pred skupnimi kartami, ko vsak posamezni igralec prejme dve zaprti karti (karte, jih vidi samo posameznik). Postflop je faza igre s skupnimi kartami, ki se deli na tri faze: flop, turn in river. Na flopu se dodajo tri skupne karte (karte, ki jih vidijo vsi igralci) in po ena na turnu in riverju. 3.1 Preflop Opis algoritma za igro preflop: Vhod: kombinacija zacetnih kart in akcija nasprotnika. Izhod: akcija bota. Algoritem: • izracun skupine, kateri pripada zacetna kombinacija kart, • zbiranje informacij o akciji nasprotnika in • izbira akcije. Igra preflop je faza igre pred skupnimi kartami. Vsak posamezni igralec prejme dve zaprti karti in se na podlagi znanja in izkušenj odloci za akcijo pred flopom. Iz kupcka 52 kart je tako mogoce dobiti 1326 razlicnih zacetnih kombinacij kart. Do vseh mogocih kombinacij pridemo tako, da množimo število vseh kart (52) s številom vseh preostalih kart (51), ki jih lahko dobi igralec. Ker se pri tem podvojijo dolocene kombinacije, je treba vse skupaj deliti še z 2 [9]. Najmocnejša kombinacija kart, ki jih lahko dobi posameznik, sta dva asa (najvišji mogoci par). Najslabša kombinacija kart pred flopom sta karti 2 in 7. Kombinacije kart od 2 do 6 lahko tvorijo lestvico. Karta 7 je torej prva karta, s katero v kombinaciji z 2 ne more tvoriti lestvice. Zato je ta kombinacija oznacena kot najslabša [10]. V praksi se velikokrat zgodi, da igralci poskušajo z blefiranjem zmagati in tako osmešiti nasprotnike, ko jim pokažejo najslabše zacetne karte. Naš algoritem za igranje igre pred flopom ima vse mogoce kombinacije razdeljene v devet razlicnih skupin. Posamezne kombinacije zacetnih kart spadajo v posamezno skupino in glede na doloceno akcijo se na podlagi skupine doloci naslednja poteza. Karte se razvrstijo v posamezno skupino glede na vrednost in barvo, ki jo imajo. V skupini 1 so najmocnejše zacetne kombinacije kart. Pripadajoce akcije so opisane v tabeli 2. V to skupino spadata kombinaciji AA in KK. Tej skupini se rece tudi "premium karte" in jih je težko premagati. Da se premaga premium karta, sta potrebna najmanj dva para [11]. Tabela 2: Akcije za skupino 1 Akcija nasprotnika Akcija bota Ostalo Raise 3-5x BB Raise Re-raise 3-4x stave Re-raise All-in All-in Call V skupino 2 spadata naslednja para po velikosti QQ in JJ, kakor tudi kombinacije najvišjih kart. Torej AK in AKs. Oznaka AKs pomeni, da sta karti is barve. Crka s pomeni okrajšavo za angleško besedo suited. Pripadajoce akcije so opisane v tabeli 3. Tabela 3: Akcije za skupino 2 Akcija nasprotnika Akcija bota Ostalo Raise 3-5x BB Raise Re-raise 3-4x stave Re-raise QQ ali JJ: call AK ali AKs: All-in All-in Call V skupino 3 spada naslednji par po velikosti TT. V tej skupini so tudi kombinacije kart: A in Q iste ali razlicne barve, A in J iste barve in K in Q iste barve. Pripadajoce akcije so opisane v tabeli 4. Tabela 4: Akcije za skupino 3 Akcija nasprotnika Akcija bota Ostalo Raise 3-5x BB Raise Call Re-raise Call All-in Fold Tabela 8: Akcije za skupino 7 Akcija nasprotnika Akcija bota Ostalo Raise Re-raise All-in Raise 3-5x BB Raise <= 20 call else fold Fold Fold V skupino 4 spadajo naslednji pari po velikosti 99, 88 in 77. V tej skupini so tudi kombinacije kart: A in T iste ali različne barve, K in J iste barve in A in J različne barve. Pripadajoče akcije so opisane v tabeli 5. Tabela 5: Akcije za skupino 4 Akcija nasprotnika Akcija bota Ostalo Raise Re-raise All-in Raise 3-5x BB Raise <= 40 call else fold Raise <= 40 call else fold Fold V skupino 5 spadajo kombinacije kart: K in Q različne barve, Q in J iste barve, K in T iste barve in J in T iste barve. Pripadajoče akcije so opisane v tabeli 6. Tabela 6: Akcije za skupino 5 Akcija nasprotnika Akcija bota Ostalo Raise Re-raise All-in Raise 3-5x BB Raise <= 30 call else fold Raise <= 30 call else fold Fold V skupino 6 spadaj vsi preostali pari in kombinacije: K in J različne barve, Q in T iste barve, A in 9 iste barve, A in 8 iste barve in Q in J različne barve. Pripadajoče akcije so opisane v tabeli 7. Tabela 7: Akcije za skupino 6 Akcija nasprotnika Akcija bota Ostalo Raise Re-raise All-in Raise 3-5x BB Raise <= 20 call else fold Raise <= 20 call else fold Fold V skupino 7 spadajo kombinacije: AX iste barve, kjer je X manjši od 8, K in T različne barve, J in T različne barve, K in 9 iste barve, Q in 9 iste barve, T in 9 iste barve in J in 9 iste barve. Pripadajoče akcije so opisane v tabeli 8. V skupino 8 spadajo kombinacije: AX različne barve, kjer je X manjši od deset in konektorji enake barve XYs, kjer sta X in Y manjša od deset in nista enaka. Pripadajoče akcije so opisane v tabeli 9. V skupino 9 spadajo vse preostale kombinacije, ki ne spadajo v nobeno od zgornjih skupin. Pripadajoče akcije so opisane v tabeli 10. 3.2 Postflop Igra postflop je faza igre, ko so na mizi skupne karte. V to vrsto spadajo tri faze igre: flop, turn in river. Flop Tabela 9: Akcije za skupino 8 Akcija nasprotnika Akcija bota Ostalo Raise Re-raise All-in Check Raise <= 5 call else fold Fold Fold je faza igre, kjer se odprejo tri skupne karte. Pri turnu in riveru se doda še po ena odprta skupna karta. Opis algoritma za igro postflop: Vhod : lastne karte, skupne karte in akcija nasprotnika. Izhod : akcija bota. Algoritem: izračun trenutno najmočnejše kombinacije iz začetnih in skupnih kart. Funkcija za izračun kombinacije dobi na vhodu lastne karte in trenutne skupne karte. Iz vseh kart tvori najmočnejšo mogočo kombinacijo petih kart. Sledi faza zbiranja informacij o akciji nasprotnika. Funkcija dekodira sporočilo o akciji nasprotnika. Na zadnjem koraku se določi akcija. Algoritem za izračun trenutno najmočnejše kombinacije med začetnimi in skupnimi kartami se deli na tri dele: • V prvem delu se pred vsako fazo stav izvede funkcija, ki izbriše informacije o končni kombinaciji petih kart iz predhodne faze stavljanja. • V drugem delu se izvede funkcija, ki primerja začetne in skupne karte. Postopek primerjave posamezne začetne karte s posamezno skupno karto je naslednji. Ce imata karti enaki vrednosti, si funkcija shrani in zapomni trenutno vrednost kombinacije (par, dva para, tris, set, full house, poker, barva lestvica). V nadaljevanju preveri, ali začetne karte v kombinaciji s skupnimi tvorijo zaporedje vsaj treh kart (možnost lestvice) in ali obstajajo vsaj tri karte izmed začetnih in skupnih, ki imajo isto igralno barvo (srce, kara, križ ali pik). • V tretjem delu se izvede funkcija, ki ovrednoti zbrane informacije in določi trenutno najmočnejšo kombinacijo petih kart. Funkcija preveri, ali obstaja možnost para, dveh parov, trisa, seta, full housa in pokra. Glede na število enakih kart, ki jih je našla prejšnja funkcija, se tukaj izračunajo kombinacije, ki vsebujejo par. Posamezna kombinacija se deli še na podkombinacije. Pri paru na primer obstaja pet različnih vrst parov: najvišji (ang. over pair), visoki (ang. top pair), srednji (ang. middle pair), nizki (ang. bottom pair) ali najnižji par (ang. under pair). Funkcija prav tako preveri, ali obstaja možnost barve in možnost lestvice. Ko ne obstaja nobena kombinacija, se kot kombinacija "visoka karta" POKER PROGRAM REMBRANT Tabela 10: Akcije za skupino 9 Akcija nasprotnika Akcija bota Ostalo Check Raise Fold Re-raise Fold All-in Fold postflop. Tabela 11: Postflop, skupina 1 - High card Akcija nasprotnika Flop Turn River Raise Fold Fold Fold Re-raise Fold Fold Fold All-in Fold Fold Fold Check Check Check Check Ostalo Check/Raise Check Check vrne višja izmed začetnih kart. Algoritem igra posamezno fazo igre glede na to, kakšne karte se prikažejo v določeni fazi. S tem poskuša prevzeti človeške lastnosti igranja. Na eni strani pasivna igra, kadar ima bot dobro kombinacijo, ki jo je zelo težko premagati, na drugi pa agresivna igra, kadar ima dobre karte in obstaja nevarnost, da bi s preveč pasivno igro nasprotnik zadel boljšo kombinačijo. Glede na situacijo lahko pride tudi do mešanja obeh zvrsti, kar nasprotniku zelo oteži delo pri ugotavljanju igralne strategije poker bota. Igralna strategija je različna za vse tri faze igre s skupnimi kartami. Najpomembnejša od vseh je prva faza - igra po flopu. V tej fazi je treba pri slabših kartah od nasprotnika pridobiti čim več informačij o tem, kakšne so njegove karte. Na podlagi pridobljenih informačij se določi igra v poznejših fazah. Algoritem pri posamezni fazi stavljanja preveri, kakšna je trenutna kombinačija, ki jo sestavi iz začetnih in skupnih kart, ter kakšna je lahko maksimalna kombinačija, ki jo lahko doseže, če ga zadenejo preostale karte. V posamezni fazi se preveri tudi nevarnost skupnih kart. V tem primeru se preveri, ali obstaja iz skupnih kart možnost barve ali lestviče. Kadar sta na mizi vsaj dve karti enake barve, mora bot igrati agresivneje, da iz igre izloči nasprotnika, ki čaka, da bo dobil še eno karto iste barve in bo imel s tem barvo. Podoben primer je pri lestviči, kjer pa je spet odvisno, v kakšnem zaporedju so karte na mizi. Kadar so tri karte z zaporednimi številkami, postane bot agresiven in ponovno poskuša z visoko stavo iz igre spraviti nasprotnika, ki po vseh pravilih ne sme plačevati za dodatne karte, da bi naredil lestvičo. Po drugi strani pa, kadar so na mizi štiri karte, katerim manjka samo ena karta za lestvičo, bo algoritem odigral tako, da ne bo plačeval nasprotnikovih stav. Algoritem je naravnan na situačijsko igro. Pri tem se na nobenem koraku ne preverja, ali je matematično smiselno igrati ali ne. Prav tako v nobeni fazi ne računa, koliko kart iz preostalega kupčka še lahko zadene in ali se statistično splača plačevati stave. Algoritem razdeli trenutne kombinačije na sedem skupin. Na podlagi ak-čije nasprotnika in skupnih kart se odigrajo določene akčije iz posamezne skupine. Pri postflopu se kombinačije prav tako razedelijo v posamezne skupine, tako kot pri preflopu, vendar se kategorizirajo glede na trenutno kombinačijo. Končna kombinačija High čard pomeni kombinačijo, kjer se ni nič zadelo. Tabela 11 prikazuje akčije za končno kombinačijo High čard za vse tri faze igre Končna kombinačija par je kombinačija, kjer v končni kombinačiji nastopata dve karti z enako vrednostjo. Tabela 12 prikazuje akčije za končno kombinačijo par. Tabela 12: Postflop, skupina 2 - par Akcija Visoki Srednji Nizek Najvišji Najnižji naspro- par par par par par tnika Raise Re- Call Fold Re- Fold Raise Raise Re-raise All-in Fold Fold All-in Fold All-in Call Fold Fold Call Fold Check Check Check Check Check Check /Raise /Raise /Raise Ostalo Check Check Check Check Check /Raise /Raise /Raise /Raise /Raise Končna kombinačija dva para pomeni kombinačijo, kjer v končni kombinačiji nastopata dve različni karti z dvema enakima vrednostma. Tabela 13 prikazuje akčije za končno kombinačijo dveh parov. Tabela 13: Postflop, skupina 3 - dva para Akcija 2 zacetni 1 zacetna 1 par 2 para naspro- in 2 sku- in 1 zacetne skupne tnika pni skupna karte in karte + par iz 1 par skupnih skupne kart karte Raise Re-Raise Call/Re- Call/Re- Call/Fold Raise Raise Re-raise All-in Call/All- Re- Fold in Raise/Call All-in Call Call/Fold Call/Fold Fold Check Raise Raise Raise Raise Ostalo Raise Raise Raise Raise Končna kombinačija tris pomeni kombinačijo, kjer v končni kombinačiji nastopajo tri karte z enako vrednostjo. Tabela 14 prikazuje akčije za končno kombinačijo tris. Tabela 14: Postflop, skupina 4 - tris Akcija nasprotnika Tris Set Raise Call/Re-Raise Re-Raise Re-raise Call Call/All-in All-in Call Call Check Check/Raise Check/Raise Ostalo Check/Raise Check/Raise Končna kombinačija lestviča je kombinačija, kjer v končni kombinačiji nastopa pet kart z zaporednimi vre- dnostmi. Tabela 15 prikazuje akcije za koncno kombinacijo lestvica. Tabela 15: Postflop, skupina 5 - lestvica Akcija nasprotnika Zgornja Spodnja Zgornja in spodnja Srednja Raise Call /Re- Call Call /Re- Call Raise Raise Re-raise Call Call Call /All- All-in /All-in /Fold in All-in Call Call Call Call /Fold Check Check Check Check Check /Raise /Raise /Raise /Raise Ostalo Check Check Check Check /Raise /Raise /Raise /Raise Koncna kombinacija barva je kombinacija, kjer v koncni kombinaciji nastopa pet kart z enako barvo. Tabela 16 prikazuje akcije za koncno kombinacijo barva. Tabela 16: Postflop, skupina 6 - barva Akcija nasprotnika Nuts - barva z asom Ostalo Raise Call/Re-Raise Re-Raise Re-raise Call/All-in All-in All-in Call Call/Fold Check Check/Raise Check/Raise Ostalo Check/Raise Check/Raise Koncne kombinacije full house, poker, barva lestvica (straight flush) in royal flush se igrajo z enakimi akcijami. Te kombinacije v praksi niso pogoste, zato jih lahko igramo skupaj, kajti verjetnost, da nas premaga višja kombinacija, je zanemarljiva. Tabela 17 prikazuje akcije za kombinacije 7, 8, 9 in 10 skupine. Tabela 17: Postflop, skupina 7,8,9 in 10 Akcija nasprotnika Odgovor Raise Call/Re-Raise Re-raise Call/All-in All-in Call Check Check/Raise Ostalo Check/Raise 4 Preizkušanje Poker bot je nastopil na tekmovanju ACPC 2011, ki je bilo organizirano v San Franciscu. Razdeljeno je bilo na vec zvrsti: limit in no-limit Texas Hold'em za dva in za tri igralce. Poker bot Rembrant je nastopil v skupini no-limit Texas Hold'em za dva igralca. Vsak bot je odigral proti vsakemu 6000 iger. Po prvi polovici iger so se karte igralcev zamenjale, da se je iznicil faktor srece. Znotraj skupine sta obstajali dve razlicni tekmovanji: total bankroll (povprecno število priigranih žetonov) in instant run-off (izpadanje igralcev). V kategoriji, kjer se je seštevalo povprecno število priigranih žetonov, je naš poker bot zasedel 6. mesto, ceprav je premagal zmagovalca tekmovanja. V kategoriji na izpadanje igralcev, kjer je vsak krog izpadel najslabši igralec, pa je naš bot zasedel odlicno 4. mesto. S tem smo dosegli, da se je relativno preprost algoritem izkazal za dobrega igralca pokra. 5 Sklep Implementirali smo program za igranje pokra Texas Hold'em, ki temelji na preprostih situacijskih pravilih. Pravila smo postavili glede na lastne izkušnje in znanje. Algoritem za program smo razdelili v dve skupini. Na fazo igre pred skupnimi kartami in na fazo igre s skupnimi kartami. Poker bot Rembrant se je udeležil tekmovanja ACPC 2011 v San Franciscu in dosegel odlicno 6. in 4. mesto v igri no-limit Texas Hold'em za dva igralca. Na podlagi doseženih rezultatov lahko sklepamo, da je preprost program, postal zmogljiv igralec pokra. V nadaljnjem delu bomo poskušali program še izboljšati s preslikavo situacijskih pravil v odlocitveno drevo. Program bi tako postal še hitrejši in robustnejši. Odlocitvena drevesa bi vsebovala tudi informacije o akcijah nasprotnikov. Tako bi si program zapomnil vzorec igranja nasprotnika, kar bi omogocalo boljšo odlocitev v poznejši fazi igre, ce bi se situacija morda ponovila. Literatura [1] Robert Frederic Foster Foster's complete Hoyle F.A.Stokec Company, 1909 [2] Spletna stran http://www.legendsofamerica.com/we-poker.html [3] Spletna stran http://www.pokerbot.si [4] Mike Caro Caro's book of poker tells. The psychology and body language of poker. Cardoza publishing New York, 2003. [5] Spletna stran http://www.aaai.org [6] Spletna stran http://ijcai.org/ [7] Spletna stran http://webdocs.cs.ualberta.ca/ games/poker/man-machine/2007/ [8] David Sklansky and Ed Miller. No Limit Hold 'em, Theory and practice. Creel Printing, Inc. Las Vegas, Nevada, junij 2006 [9] Sam Braids The intelligent guide to Texas Hold'em poker Intelligent Games Publishing, 2003 [10] Ed Miller, David Sklansky, Mason Malmuth Small stakes Hold 'em - winning big with expert play Creel Printers, Inc. Las Vegas, Nevada, Januar 2005 [11] Spletna stran http://www.articlesbase.com/online-gambling-articles/world-series-of-poker-robots-1230821.html Gregor Vohl je diplomiral leta 2011 na Fakulteti za elektrotehniko, racunalništvo in informatiko Univerze v Mariboru. Trenutno je na omenjeni fakulteti študent doktorskega študija. Borko Boškovic je diplomiral leta 2004 in doktoriral leta 2010 na Fakulteti za elektrotehniko, racunalništvo in informatiko Univerze v Mariboru. Trenutno na omenjeni fakulteti zaseda mesto asistenta z doktoratom. Njegova podrocja raziskovanja so šahovski algoritmi in evolucijsko racunanje. Na strokovnem podrocju se ukvarja tudi s programskimi jeziki, integracijskim programiranjem in procesiranjem naravnih jezikov. Janez Brest je diplomiral leta 1995, magistriral leta 1998 in doktoriral leta 2000 na Fakulteti za elektrotehniko, racunalništvo in informatiko Univerze v Mariboru. Trenutno je redni profesor na omenjeni fakulteti. Njegova podrocja raziskovanja vkljucujejo evolucijsko racunanje, umetno inteligenco in optimiziranje. Njegova strokovna podrocja zajemajo tudi programske jezike, spletno programiranje ter paralelno in porazdeljeno procesiranje.