MASARYKOVA UNIVERZITA PŘÍRODOVĚDECKÁ FAKULTA Matematické aspekty hold em pokeru Bakalářská práce Brno 2009 Lenka Zouharová
Prohlašuji, že jsem celou bakalářskou práci vypracovala samostatně za použití uvedené literatury....
Děkuji Mgr. Davidu Krumlovi, Ph.D. za vedení mé bakalářské práce, cenné připomínky, návrhy, ochotu a čas, který mi věnoval.
Zadání
Anotace Tato práce se zabývá matematickými aspekty pokerové hry Texas Hold em. Zaměřuje se zejména na problematiku výpočtu pravděpodobnosti. V první kapitole je rozebrán princip hry a možnosti vyhodnocení výherních šancí. Druhá část analyzuje návrh a implementaci programu na výpočet pravděpodobnosti výhry v různých fázích hry využívajícího metodu Monte Carlo. Tento program je pak využit v praxi. Klíčová slova Poker, Texas Hold em, výherní kombinace, pravděpodobnost výhry, outs, Monte Carlo, simulace, implementace, PHP, Java
English annotation This thesis deals with mathematical aspects of poker game Texas Hold em. It addresses especially on problems calculation of probability. In first chapter is analysed game principle and possibilities of evaluation winning chances. The second part analyses concept and platform implementation to calculation winning probability in a number of game phases making use method Monte Carlo. Then this program is employed in practice. Keywords Poker, Texas Hold em, winning combinations, probability of win, outs, Monte Carlo, simulation, implementation, PHP, Java
Obsah Úvod... 9 1. Poker... 10 1.2 Obecná pravidla... 10 1.3 Texas Hold em... 10 1.3.1 Průběh hry... 11 1.3.2 Varianty... 12 1.4 Přehled výherních kombinací... 14 1.5 Výpočet pravděpodobnosti... 17 1.5.1 Počítání outs... 17 1.5.2 Výpočet pravděpodobnosti výhry banku... 20 1.5.3 Metoda Monte Carlo... 21 1.6 Typologie hráčů... 22 2. Analýza problému a návrh řešení... 23 3. Implementace... 25 3.1 Implementace v jazyce PHP... 26 3.1.1 Výpočet pravděpodobnosti... 29 3.1.2 Úskalí při použití webové stránky... 30 3.1.3 Omezení implementace... 30 3.2 Implementace v jazyce JAVA... 30 3.2.1 Nedostatky této implementace... 32 3.2.3 Java applet... 33 4. Využití v praxi... 35 4.1 Startovní kombinace... 35 4.2 Testování... 36 Závěr... 40
Literatura... 41 Seznam tabulek... 42 Seznam obrázků... 43
Úvod Tato práce se zabývá matematickými problémy v karetní hře poker, konkrétně jeho variantě Texas Hold em. Přestože se nejedná o hazardní hru, jak si mnoho nezasvěcených myslí, my sami ji můžeme ovlivnit pouze strategií svých sázek. Proto je vhodné analyzovat aspekty, které ovlivňují naše rozhodování v průběhu hry. Čím jsou naše rozhodnutí lepší, tím spíše můžeme očekávat vítězství. Přestože je takových aspektů mnoho, my se v práci zaměříme zejména na výpočet pravděpodobnosti výhry. Výsledky práce mohou poté posloužit jako základ při hledání optimálních herních strategií a získané informace pak mohou být aplikovány v různých odvětvích. Součástí této práce jsou vytvořené programy pro výpočet žádaných výsledků, kde je pravděpodobnost výhry v každém kole hry určena z aktuálně známých karet hráče simulací velkého počtu her. Tímto získáme pseudostatistický odhad. Reálná statistika by musela obsahovat mnohem větší škálu informací s obrovskou datovou základnou sesbíranou z různých pokerových heren za dlouhou řadu let, kde by se vykrystalizovaly častěji získávané výherní kombinace, vliv na výsledky hry na základě počtu hráčů, herních zkušeností, věku, blafování apod. Zohlednění těchto a jiných vlivů není součástí této práce, nehledě na to, že programově zachytit či nasimulovat duševní rozpoložení hráče při hře o skutečné peníze je velice obtížné, možná až nereálné a spadá spíše do oblasti moderní vědy o umělé inteligenci. Při zpracovávání první kapitoly byly využity informace ze zdrojů [5], [6], a [7]. Údaje o možnostech jednotlivých výherních kombinací jsou převzaty z [8]. Podkapitola o metodě Monte Carlo byla zpracována podle [9]. Návody na implementaci programu v jazyce PHP se zabývá [1] a [2], manuál k jazyku Java lze nastudovat v literatuře [3]. Získané znalosti je pak možné doplnit praktickými příklady v různých internetových zdrojích, např. [4]. 9
1. Poker 1.2 Obecná pravidla Poker se hraje v mnoha variantách. Mezi nejoblíbenější patří Texas Hold em, Omaha, Five Card Draw, Seven Card Stud nebo Hi-Lo Split. Jednotlivé varianty však mají hodně společného: V závislosti na typu hry může hrát různý počet hráčů převážně od dvou do deseti. Při hře se používá standardní balíček o 52 kartách ve čtyřech barvách - kříže, káry, piky, srdce. Každá barva má 13 karet. Nejvýše postavenou kartou je eso, za ním je král, dáma, kluk a dále následují čísla od desítky po dvojku. Eso se také v některých případech používá jako jednička, tedy nejnižší karta. Partie se dělí na několik sázkových kol, při nichž hráči sází do společného banku. Hra probíhá ve směru hodinových ručiček. Vybraní hráči musí na začátku partie umístit do společného banku povinné sázky Jakmile je hráč na řadě, může si vybrat z následujících možností pokud nikdo před ním nevsadil, může zůstat ve hře bez vsazení (check), pokud některý z hráčů před ním vsadil, může dorovnat sázku (call), zvýšit ji (raise) nebo složit karty (fold). Cílem hry je porazit soupeře sestavením co nejsilnější kombinace z rozdaných karet nebo jej blafováním přimět věřit, že tuto nejsilnější kombinaci máte, a donutit jej předčasně složit karty. Hráč může výsledek hry ovlivnit pouze strategií svých sázek. 1.3 Texas Hold em Texas Hold em je varianta pokeru, která přišla z Texasu, a dnes patří k bezkonkurenčně nejoblíbenější variantě. Hraje se sedmi kartami, z čehož dvě karty dostane hráč (tzv. hole) a zbytek je postupně vykládán na stůl. Výherní kombinace je potom určována z pěti nejlepších karet (tzv. hand). Hraje se u stolu, kde sedí dva nebo více hráčů. Teoretický maximální počet hráčů by mohl být až 23, obvykle však hraje u stolu maximálně deset hráčů. 10
1.3.1 Průběh hry Umístění blindů V pokeru, a tedy i v Texas Hold em, je důležité místo hráče označené jako dealer. Tento hráč ve hře bez krupiéra rozdává karty. Toto místo se po každé hře posouvá o jedno ve směru hry. Hru začínají povinné sázky, tzv. antes a malý a velký blind. Ante je malá částka povinně vložená všemi hráči. Nezapočítává se do výše sázek, ale je součástí banku. Ante se však většinou ve variantě Texas Hold em nevyužívají. Malý blind vkládá hráč, sedící na pozici vlevo od dealera, a v příštím kole se stane dealerem. Obvykle se jedná o polovinu velkého blindu. Ten vkládá hráč vlevo od malého blindu a téměř vždy se rovná limitu sázky pro první kolo sázení. Tyto povinné sázky slouží k tomu, aby bylo vždy o co hrát, a musí být vsazeny ještě před tím, než jsou jim rozdány karty. Výše těchto sázek je v průběhu hry, většinou po pěti odehraných partiích, navyšována. Rozdávání karet a první kolo sázek Po povinných sázkách následuje rozdání karet. Každý hráč dostane dvě karty, které ostatní hráči nevidí. Po rozdání karet začíná první sázkové kolo. První na řadě je hráč následující za velkým blindem, tedy třetí za dealerem. Hráči mohou buď dorovnat velký blind, navýšit nebo složit karty. Aby se hráč mohl partie zúčastnit, musí buď dorovnat nejvyšší dosavadní sázku soupeře před ním, na začátku tedy velký blind nebo, pokud nemá dostatek žetonů, vsadit do hry všechny zbývající žetony. Hráč, který se chystá složit nesmí ukázat své karty. Je to proto, aby ostatní nemohli využít informaci o tom, jaké karty chybí v balíčku, a spočítat tak své šance na výhru. Hráč, který položí karty kdykoli v průběhu hry se již dané hry neúčastní a o žetony, které vsadil, bojují zbývající hráči. Flop Pokud ve hře zůstanou alespoň dva hráči, na stůl se vyloží tři společné karty obrázkem nahoru. Tyto karty se označují jako flop. Po jejich vyložení následuje druhé kolo sázek. V tomto kole již neexistuje sázka, kterou by bylo nutné ze začátku dorovnávat a tak je možné, pokud nevsadí někdo ze soupeřů, zůstat ve hře bez vsazení. Toto i všechna další sázková kola začíná hráč na pozici malého blindu nebo první hráč ve směru hodinových ručiček, který ještě zůstal ve hře. Pravidla sázení jsou obdobná jako v prvním kole. 11
Turn Zůstanou-li ve hře alespoň dva hráči je na stůl vyložena čtvrtá společná karta, označována jako turn. Po jejím vyložení následuje třetí kolo sázek. River Jestliže jsou stále ve hře alespoň dva hráči, je na stůl vyložena pátá společná karta zvaná river. Po jejím vyložení následuje poslední kolo sázek. Showdown Poté co bylo čtvrté kolo sázek ukončeno nastává tzv. showdown, tedy ukazování karet. Pokud jeden hráč nedonutil svými sázkami ostatní hráče složit karty, určí vítěze nejsilnější výherní kombinace sestavená z pěti karet. V kombinaci může hráč využít obě své karty, jednu nebo žádnou. Pokud by nikdo nevyužil své karty, měli by všichni hráči stejné kombinace a bank by si rozdělili rovným dílem. Pokud se stalo, že v průběhu sázení dal nějaký hráč do hry všechny své žetony a tento hráč vyhraje, dostane z banku pouze do výše dorovnání jeho žetonů ostatními soupeři. Zbytek banku si rozdělí zbývající hráči podle stejných pravidel. Podrobnější vysvětlení dělení banku bude rozebráno později. Pozn.: Termíny flop, turn a river jsou v literatuře popisovány jako označení příslušných karet vykládaných na stůl před jednotlivými sázkovými koly, je však možné je chápat i jako označení celého sázkového kola. 1.3.2 Varianty Fix limit Texas Hold em Pokud se hraje poker s limitem, může hráč v průběhu jednoho kola navýšit sázku maximálně třikrát. Po třetím navýšení může buď karty složit a ve hře skončit, nebo dorovnat poslední sázku. Je stanovena i minimální a maximální výše sázky. Sázky a navyšování sázek jsou vždy ekvivalentní výši povinných sázek. Příklad: Pokud jsou povinné sázky 2 a 4, pak maximální navýšení je 4. Pokud již bylo dosaženo maximálního počtu sázek, pak je bank zmrazen. Až s novým sázecím kolem je opět povoleno třikrát navýšit sázky. 12
Pot limit Texas Hold em Maximální částka, kterou může hráč vsadit, je dána součtem peněz v banku v daném okamžiku a dvojnásobku spodního limitu hry. Příklad: První hráč je na tahu, povinné sázky jsou 2 a 4 a v banku je dalších 6 žetonů. Maximální částka je tedy 6 (částka v banku) + 8 (dvojnásobný spodní limit hry) = 14. No limit Texas Hold em V tomto typu her není stanoven žádný limit. Každý hráč může kdykoliv vsadit a to i všechny svoje zbývající žetony. Nicméně pokud nejde o all-in, tedy sázku všech zbývajících žetonů, musí být sázka alespoň tak vysoká, jako velký blind a navýšení musí být ve výši předešlé sázky nebo navýšení. Kdykoli si hráč přeje dorovnat sázku, ale nemá dostatek žetonů, aby sázku pokryl, vsadí vše co má (jde all-in). Od toho okamžiku může vyhrát pouze tu část banku, kterou pokrývá svými žetony. Pro ty hráče, kteří stále žetony mají a chtějí dál sázet, se vytvoří vedlejší bank (side pot). O tento bank hrají tedy pouze ti hráči, kteří se na něm podíleli. V praxi může vzniknout i situace, kdy budou žetony rozděleny do tolika banků, kolik je u stolu hráčů. Příklad 1: Pokud má hráč A 14 žetonů a vsadí všechno, hráč B si může stále vsadit, ačkoliv mu zbývá pouze 8 žetonů. Hráč A v tomto případě dostane zpět svých 6 žetonů, které vsadil, neboť tyto žetony zbudou po pokrytí částky 8 žetonů vsazených druhým hráčem. Příklad 2: Hráč A vsadil 10 žetonů, hráč B jeho sázku dorovnal, vsadil tedy také 10 žetonů. Hráč C chce zůstat ve hře, ale zbývá mu 8 žetonů. Vsadí tedy vše co má. V tuto chvíli se žetony hráčů A a B převyšující sázku hráče C přesouvají a vytvářejí vedlejší bank o velikosti 2 + 2 = 4 žetony. V hlavním banku zůstává 3 * 8 = 24 žetonů a zatímco hráč C může hrát jen o hlavní bank, jelikož pouze do něj přispěl svými sázkami, tak oba soupeři mohou hrát o oba banky. Pozn.: My budeme dále pracovat s variantou no limit Texas Hold em a pro zjednodušení nebudeme uvažovat dělení banků na hlavní a vedlejší. Pokud nebude mít hráč dostatek žetonů na to, aby dorovnal, složí karty. 13
1.4 Přehled výherních kombinací Pořadí výherních kombinací je uspořádáno podle pravděpodobnosti. Čím je kombinace vzácnější, tím je cennější a má proto i vyšší hodnotu. Celkem existuje v pokeru 2 598 960 různých karetních kombinací, které mohou ovlivnit chování hráčů při sázení. Královská postupka (Royal flush) Královská postupka je postupka v barvě s esem jako nejvyšší kartou. Je to nejvyšší možná kombinace v pokeru a existují pouze 4 piková, kárová, srdcová a křížová.. Postupka v barvě (Straight flush) Postupka (pět po sobě následujících karet) sestavená v jediné barvě. V případě rovnosti kombinací vyhrává postupka zakončená vyšší kartou. Jestliže mají dva hráči postupku zakončenou stejnou kartou, vyhrávají oba a bank se dělí rovným dílem. Kombinace postupka v barvě má celkem 36 možných variant. Čtveřice (Poker) Čtveřice je kombinace obsahující čtyři karty se stejnou hodnotou. V případě rovnosti kombinací, vyhrává vyšší čtveřice. Jestliže mají dva hráči čtveřici sestavenou se stejných hodnot, rozhoduje poslední karta pětice nezahrnutá v kombinaci (tzv. kicker). Je-li i tato karta 14
stejná, dělí se bank rovným dílem. Hráči mají k dispozici 624 možných druhů této pokerové kombinace. Full house Tato kombinace je složena ze tří karet stejné hodnoty spolu s párem jiné hodnoty. Hodnota full housu se určuje podle trojice. Vyhrává tedy kombinace se silnější trojicí, v případě rovnosti se silnější dvojicí. V situaci, kdy má více hráčů stejnou kombinaci, dělí se bank rovným dílem. Existuje celkem 3744 možných variant kombinace full house. Flush Fleš tvoří jakýchkoli pět karet stejné barvy. Tyto karty nemusí být v řadě za sebou. Pokud by byly, tvořily by postupku v barvě. Hodnota kombinace se určí podle nejvyšší karty. Jestliže je hodnota této karty stejná, dělí se bank rovným dílem. Celkem je možné sestavit 5108 druhů této kombinace. Postupka (Streight) Postupku tvoří pět za sebou jdoucích karet v různých barvách. V případě rovnosti kombinací vyhrává postupka zakončená vyšší kartou. Jestliže má více hráčů postupku zakončenou stejnou kartou, dělí se bank rovným dílem. Celkem je možné v pokeru vytvořit 10 200 těchto kombinací, které se budou navzájem lišit. 15
Důležité je mít v tomto případě na paměti, že karta hodnoty eso může být v pokerových hrách započítávána buď jako hodnotově nejvyšší, nebo jako nejnižší karta. Z toho plyne, že nejméně hodnotnou postupkou je sestava karet 5432A, v níž má eso hodnotu 1. Takzvaná rohová sestava 32AKQ, anglicky označená názvem around the cor-ner, v níž eso představuje současně nejnižší i nejvyšší hodnotu, není obvykle povolena. Trojice (Trips) Varianta sestavena ze trojice karet se stejnou hodnotou. V případě rovnosti kombinací vyhrává vyšší trojice. Jestliže má více hráčů stejnou trojici, rozhodují dvě zbylé karty. Prakticky je možné sestavit 54 912 různých kombinací s označením trojice. Dva páry (Two pairs) Tuto kombinaci tvoří dvě dvojice karet se stejnou hodnotou. V případě rovnosti kombinací vyhrává vyšší pár z obou dvojic, je-li vyšší pár stejný, rozhoduje nižší pár. Jestliže je i nižší pár stejný, rozhoduje zbývající karta. Celkem existuje 123 552 odlišných kombinací typu dva páry. Pár (Pair) Jeden pár je sestaven z dvojice karet stejné hodnoty. Vyšší pár poráží nižší. Má-li více hráčů stejnou dvojici, rozhodují zbývající tři karty z pětice. Existuje celkem 1 098 240 možností této kombinace. 16
Nejvyšší karta (Hight card) Jestliže není sestavena žádná kombinace, porovnává se postupně síla jednotlivých karet v pětici. Hráč se silnější kartou vyhrává. Pozn.: Hodnocení (zejména tzv. kickerů) se může v různých hernách lišit. 1.5 Výpočet pravděpodobnosti 1.5.1 Počítání outs Pokud chceme v pokeru co nejvíce vyhrávat, je nezbytné, abychom si uměli vypočítat pravděpodobnost, že nám dojde karta do námi zamýšlené kombinace. Pokud si dokážeme pravděpodobnost spočítat, můžeme se pak při hře snadněji rozhodovat o našich budoucích krocích. Pro správný výpočet pravděpodobnosti sestavení výherní kombinace (hand odds) musíme nejprve zjistit počet outs. Outs je označení pro karty, které ještě mohou přijít na stůl mezi společné karty a které nám pomohou k vytvoření lepší kombinace, než právě v daný moment držíme resp. které nám pomohou vytvořit lepší kombinaci než drží náš soupeř. Ukážeme si výpočet outs na konkrétních příkladech. Příklad 1: Držíme-li v ruce 8 a 9 a na flop přijde 7, J a A, máme šanci na sestavení postupky. Tu nám vytvoří pouze jakákoliv 10. Ta je v balíčku ve čtyřech barvách, naše outs je tudíž 4. Příklad 2: V ruce držíme 4 a 10. Jsme na flopu, na který přišlo 2, 8, K. Máme tedy 4 karty stejné barvy (4,10 v ruce a 2, 8 ze společných karet) a máme tak reálnou možnost na sestavení flushe, pokud by na turn nebo river přišla jakákoliv karta v barvě. Křížových 17
karet, které ještě mohou na turn a river dojít je 9 (13 křížových karet z balíčku - 2 křížové karty z ruky - 2 křížové karty z flopu). 9 je tedy hodnota našeho outs. Pokud bychom při stejném flopu drželi například jenom jedny kříže (4, 10 ), měli bychom outs 10 (13-1 naše křížová karta z ruky - 2 křížové karty z flopu). Při hraní pokeru není až tak neobvyklé, že máme šanci na vytvoření více kombinací. Výpočet outs v těchto situacích je o něco málo složitější než při počítání outs u jedné kombinace. Příklad 3: V ruce držíme 7 a 8 na flop přijde 10, J, A. Máme tak šanci na vytvoření postupky, pokud by přišla jakákoliv 9 nebo barvy, pokud by přišla ještě jedna srdcová karta. Výsledné outs spočítáme jako součet 13 4 = 9 outs pro zbývající srdcové karty + 3 outs pro 9, 9, 9 (9 je již započítána mezi devíti srdcovými outs). Outs je tedy 12. Příklad 4: V ruce držíme 7 a 8 na flop přijde 9, 10, A. Na flush máme opět 9 outs. Ale čekáme i na 6 a J do postupky. 6 a J máme již započítané v outs pro flush, tudíž nám pro outs postupky zbývá 6, 6, 6 a J, J, J, tedy 6 karet. Konečné outs pro tuto situaci je 9 + 6 = 15. Jestliže umíme spočítat outs, můžeme lehce určit pravděpodobnost na vytvoření kombinace. Nejjednodušším, ale zároveň nejméně přesným (odchylka až několika málo procent), způsobem počítání pravděpodobnosti sestavení výherní kombinace je podle snadného pravidla 4 a 2, které spočívá v pouhém vynásobení počtu outs číslovkou 4, pokud se právě nacházíme na flopu a nebo číslovkou 2, pokud jsme momentálně na turnu. Příklad: Jestliže máme 9 outs na flopu provedeme výpočet 9 * 4 = 36% a na turnu 9 * 2 = 18% šance na složení flushe. Počítání pravděpodobnosti sestavení výherní kombinace pomocí pravidla 4 a 2 je rychlé a efektivní, ovšem čím více outs máme, tím se výsledek bude více odchylovat od skutečné hodnoty, proto jsou tyto hodnoty spíše orientační. O něco přesnější bude váš výsledek, jestliže od výpočtu po flopu odečteme 1, tedy 9 * 4 1 = 35 %, a po turnu přičteme 1, tedy 9 * 2 + 1 = 19 %. 18
Pokud máme možnost nebo dobrou paměť, nejpřesnější pravděpodobnost najdeme v tabulkách, kde je pro výpočet po flopu použit vzorec 1 - [((47 - outs) / 47) x ((46 - outs) / 46)] a po turnu 1 - [(46 - outs) / 46]. Pravděpodobnost outs Outs Načatá kombinace Šance z flopu na river Šance z turnu na river v % v % 20 67,5 43,5 19 65,0 41,3 18 62,4 39,1 17 59,8 37,0 16 57,0 34,8 15 Postupka v barvě 54,1 32,6 14 51,2 30,4 13 48,1 28,3 12 45,0 26,1 11 41,7 23,9 10 38,4 21,7 9 35,0 19,6 8 Flush 31,5 17,4 7 Postupka 27,8 15,2 6 24,1 13,0 5 20,3 10,9 4 Dva páry 16,5 8,7 3 12,5 6,5 2 8,4 4,3 1 4,3 2,2 Tabulka č. 1 19
Ostatní pravděpodobnosti Pár Na flopu vznikne trojice v 11,8 % případů A-K Na flopu získá krále nebo eso ve 32,4 % případů Dvě karty v barvě Vytvoří flush v 6,5 % případů Dvě karty v barvě Na flopu vytvoří flush v 0,8 % případů Dvě karty v barvě Na flopu vytvoří čtyřkaretní flush v 10,9 % případů Dvě nesouvisející karty Vytvoří dva páry ve 2,2 % případů Tabulka č. 2 Zdroj: Lou Krieger: Poker Jak hrát a vyhrát 1.5.2 Výpočet pravděpodobnosti výhry banku Se strategií pravděpodobnosti bezprostředně souvisí i poměr již vložené sázky. Výpočet poměru banku a sázky je nezbytnou součástí hry pro každého hráče pokeru. Pravděpodobnost výhry banku je v tomto případě definována jako poměr výše dorovnání vůči velikosti banku (včetně sázky soupeře a našeho dorovnání). pot odds = výše dorovnání / (bank + sázka soupeře + dorovnání) Příklad: Po flopu máme 10 outs, tedy zhruba 40% šanci na výhru. Máme-li 40% šanci na výhru, pak to znamená, že ve 40 partiích ze 100 vyhrajete, ve zbylých prohrajeme (tedy 2:3). Je-li bank 100, pak je rozumné dorovnat sázku maximálně 200. Pokud totiž v pěti partiích soupeř vsadí 200 a vy pokaždé dorovnáte, pak pětkrát vsadíte 200 a z toho dvakrát vyhrajete 500 (bank 100 + 200 sázka soupeře + 200 naše dorovnání), čímž budete na nule. pot odds = 200/(100+200+200) = 0.4 = 40 % = pravděpodobnost sestavení výherní kombinace Při sázce vyšší než 200 se v dané situaci vyplatí karty složit. 20
1.5.3 Metoda Monte Carlo Další (a pro tuto práci stěžejní) možností jak zjistit pravděpodobnost výhry, je určení pravděpodobnosti pomocí metody Monte Carlo. Tato metoda je numerickou metodou statistického modelování náhodných veličin. Teoretické principy této metody byly odvozeny již před rokem 1944, ale uplatnění bylo nalezeno až s rozvojem výpočetní techniky. Základní myšlenkou této metody je totiž provedení dostatečného počtu (n) simulací, které se poté mohou zpracovávat klasickými statickými metodami. Každý pokus je nezávislý na ostatních, díky čemuž je metoda často nazývána metodou statistických pokusů. Počet opakování může být libovolný a závisí na požadované přesnosti výpočtu. Chyba výsledných veličin se přirozeně snižuje se zvyšujícím se počtem simulací. Náhodná veličina X získaná tímto způsobem je přibližně rovna X, tedy X X. Tato přibližná rovnost má přesnost ε se spolehlivostí α, jestliže pro nerovnost X - X < ε platí P( X - X < ε ) = α. Položíme-li ε = 0.01 α = 0.95, potom v 95 případech ze 100 by se přibližná hodnota nelišila od skutečné o více než 0.01. Pravděpodobnost výhry, tedy naši náhodnou veličinu, budeme odhadovat pomocí 1 aritmetického průměru X = ( X 1 + X 2 +... + X n ), kde X 1, X 2,..., X n jsou nezávislé, n stejnoměrně rozdělené náhodné veličiny, přičemž jejich střední hodnota E(X i ) je rovna X a mají konečný rozptyl σ 2. Podle centrální limitní věty má náhodná veličina X asymptoticky normální rozdělení se střední hodnotou 2 σ E ( X ) = X a rozptylem D( X ) = n. Protože však často rozptyl neznáme, nahrazujeme jej výběrovým rozptylem s 2 n 1 2 ( X i ). 1 i= 1 = n X Jestliže tedy označíme 0 prohra a 1 výhra, spočítáme pravděpodonost výhry n P = 1 n ( X i ). Hodnota pravděpodobnosti je závislá na vybrané podmnožině n, což znamená, i= 1 že s každým dalším pokusem o výpočet, se bude pravděpodobnost výhry nepatrně lišit. Je proto vhodné určit interval spolehlivosti, tedy interval, ve kterém bude spočítaná hodnota 21
s určitou pravděpodobností (např. 95 %) ležet. Je-li X 1,..., X n z normálního rozdělení N(µ, σ 2 ), pak interval spolehlivosti vypadá takto: (P - u 1 - α/2 s ; P + u1 - α/2 n s ), kde u1 - α/2 je kvantil standardizovaného normálního rozdělení. Tuto hodnotu najdeme v tabulkách. Například námi používaný kvantil pro 95% interval spolehlivosti má hodnotu u 0.975 = 1.95996. n 1.6 Typologie hráčů Pokud jsme schopni spočítat pravděpodobnost výhry a na jejím základě přizpůsobit svou herní taktiku, můžeme totéž zjednodušeně nasimulovat s počítačem jako hráčem, jestliže mu řekneme za jakých podmínek má dorovnávat, přihazovat nebo skládat karty. U herního stolu se můžeme setkat se 4 základními typy hráčů: uvolněný, opatrný, pasivní a agresivní. Uvolněný tak se označuje hráč hrající přílišné množství kombinací. Procentuálně vyjádřeno, hraje-li více jak 35 % startovních kombinací. Najdou se však i hráči hrající například 80 % (zde se s velkou pravděpodobností jedná o začátečníka). Opatrný - je hráč, který hraje jen silnější startovní kombinace se kterými má větší šance vyhrát. Záleží mu také na pozici, na které se nachází. Obvyklé procento hraných kombinací je okolo 20 %. Pasivní tento hráč sází pouze vzácně. Většinu her spíše dorovnává sázky nebo skládá karty. Tento typ hráče vsází pouze tehdy, pokud natrefil na velmi dobrou karetní kombinaci. Agresivní - jsou hráči sázející a navyšující sázky častěji než ostatní případně vyššími částkami. Jsou ochotni sázet i se slabší kombinací v ruce, pokud věří, že soupeř může své karty zahodit. 22
2. Analýza problému a návrh řešení Hlavním cílem práce je vytvoření programu, který dokáže vypočítat pravděpodobnost výhry ve variantě Texas Hold em. Pro splnění tohoto cíle stačí vytvořit zjednodušenou verzi pokeru, kdy můžeme zcela pominout například systém sázek, neboť nám stačí zjistit šance hráče na výhru na určité úrovni hry. Porovnáním s výsledkem dané hry si pak můžeme udělat představu o tom, zda odhady mají nějakou vypovídací hodnotu. Z pravidel uvedených v předchozí kapitole je tedy pro hru důležité: 1. stanovit počet hráčů; každý hráč dostane 2 karty 2. na stůl přijdou 3 karty (flop) 3. na stůl se přidá další karta (turn) 4. na stůl se přidá poslední karta (river) 5. vyhodnotit výsledek hry podle výherních kombinací a určit hráče, který vítězí Mezi jednotlivými body mají ve skutečné hře hráči možnost upravovat sázky a právě v této části by se jim mohla hodit statistická pomůcka, která by jim napověděla, zda pokračovat ve hře, či při nízké pravděpodobnosti na výhru raději složit karty. Pravděpodobnosti se tedy počítají mezi každými dvěma uvedenými body. Nezbytnou podmínkou je správné vyhodnocení výherních kombinací. Člověk snadno podle dříve zmíněných výherních kombinací správně určí nejlepší kombinaci rychlým porovnáním karet všech hráčů. Porovnávat však v programu současně výherní kombinace jednotlivých hráčů a k tomu v případě shody hledat, kdo má lepší kicker, by bylo komplikované a zřejmě také náročné a pomalé. Pro algoritmické vyhodnocení kombinací je proto použit systém ohodnocení karet každého hráče číslem, kdy vyšší číslo vyhrává. Pokud má nejvyšší číslo více hráčů, vyhrávají všichni v těchto případech se dělí bank na více částí. Ohodnocení má tato pravidla: 1. nalezni nejvýhodnější hand nejsilnější možnou výherní kombinaci pěti karet ze sedmi možných 2. přiřaď kombinaci skóre podle vzorce: skóre = základní skóre + nejvyšší karta + vedlejší skóre základní skóre je konstantní číslo přiřazené každé výherní kombinaci, kdy nejvyšší hodnotu má královská postupka a nejmenší naopak dvojice a po ní nejvyšší karta. 23
nejvyšší karta je síla hrací karty mající nejvyšší vliv v dané výherní kombinaci. Možné hodnoty jsou 2-14. Pro postupku je to například nejvyšší karta postupky, pro dvojici hodnota karet v páru, pro full house hodnota karty v trojici a například královská postupka naopak žádné další hodnocení nepotřebuje. vedlejší skóre u kombinací, které se skládají z více částí je tvořeno součtem všech dosud nezapočítaných částí vynásobených postupnou mocninou vybraného koeficientu snižující jejich váhu. Koeficient byl stanoven na hodnotu 0.01, aby hodnota nemohla přesáhnout do důležitější části a způsobit tak chybné vyhodnocení. Části mohou tvořit například slabší dvojice u dvou párů, dvojice u full house případně se jako jednotlivé části započítává každý zbývající kicker (vždy od nejsilnějšího). 3. získané skóre porovnej se skóre ostatních hráčů, které se získá stejnými pravidly, a vyber vítěze s největším skóre Pro lepší pochopení nastíněného principu ohodnocování výherních kombinací je uvedeno několik příkladů: Tyto karty netvoří žádnou výherní kombinaci, spadají tedy pod kategorii nejvyšší karta. Budou ohodnoceny: 0 (konstanta pro tuto výherní kombinaci) + 12 bodů (král, nejvýznamnější karta) + 11 * 0.01 (královna, největší kicker, proto již koeficient) + 7 * 0.0001 + 5 * 0.000001 + 3 * 0.00000001 bodů. Full house je ohodnocen takto: 600 (konstanta) + 14 (eso v trojici) + 13 * 0.01 (král, vedlejší hodnota) 24
Hodnocení trojice je následující: 300 + 12 + 7 * 0.01 + 5 * 0.0001 (trojice má dva kickery) Pokud je stanoven systém vyhodnocení výsledků, je možné vytvořit program, simulující jednotlivé herní kombinace. 3. Implementace Pro vytvoření programu byl vybrán objektově orientovaný přístup, který je již delší dobu moderním trendem programování a přináší řadu výhod. Pod objekty v programu si můžeme představit právě objekty ze skutečného světa, které takto vytváříme přenesením jejich vlastností a chování do tříd ve zdrojovém kódu a jejich atributů a metod. Pro tuto práci se přímo nabízí vytvoření objektů pro hráče, karty, balíček karet či samotné hry pokeru, které odráží tyto pojmy tak jak je známe ve skutečném světě. Jejich spojením a zařazením do programu pak snadno získáme požadovanou funkčnost. Pro realizaci zadaného úkolu byl vybrán jazyk PHP. Tento skriptovací jazyk je známý a nejčastěji používaný pro vývoj dynamických webových stránek. Výsledek je pak možno prohlížet bez jakéhokoliv instalování podpůrných nástrojů v internetovém prohlížeči, který je součástí snad každého běžného počítače. Původním záměrem bylo vytvořit zjednodušenou verzi hry poker, kde by na základě vypočítaných pravděpodobností bylo možné upravovat sázky v jednotlivých kolech a ověřit tak výpočty přímo v praxi. Pro některá úskalí a nevýhody, které budou popsány v další podkapitole, byla vytvořena další verze programu v jazyce Java, tentokrát zaměřená zejména na velké množství simulací her a získání tak přesnějších výsledků. Jazyk Java byl vybrán pro svou platformovou nezávislost, volnou dostupnost vývojového prostředí i dokumentace a na mnoha místech zmiňovanou 25
jednoduchost. Pro mírnou podobnost s jazykem PHP nebylo až na některá úskalí velkým problémem vytvořit podobný program právě v tomto jazyce. 3.1 Implementace v jazyce PHP Tato implementace byla provedena jako první zejména díky předchozím zkušenostem s programováním v tomto jazyce. Jedná se o jazyk poměrně jednoduchý, ve kterém lze snadno vytvářet složité datové struktury, protože se jedná o ležérně typovaný jazyk neprovádí se žádná kontrola datových typů a proto je vhodným pomocníkem pro začátečníky v programování. Nejdříve byly podle návrhu řešení vytvořeny třídy Hráč, Balík, Karta, Bank a Poker pro jednotlivé používané objekty a poté byly tyto objekty využity k vytvoření zjednodušené hry. Třída Hráč popisuje chování a majetek hráče. Obsahuje metody pro výpis jeho karet, samotnou simulaci požadovaného počtu her, na jejímž konci je vyhodnocen počet výher, metody pro sázky hráče, včetně sázek hráčů, za které hraje počítač řídící se spočítanou pravděpodobností. Jsou zde nastaveny různé typy hráčů, kteří dorovnávají, navyšují nebo skládají karty při různých hodnotách pravděpodobnosti. Je tak možné sledovat úspěšnost různých strategií. Ve třídě Balík jsou vytvořeny všechny karty balíčku, je zajištěno jejich míchání, odebírání z balíčku, případně jejich navracení zpátky. Samotná jednotlivá karta je pak vytvořena ve třídě Karta, kde je zajištěno nastavení její hodnoty, barvy a přiřazení odpovídajícího obrázku. Třída Bank zajišťuje přihazování do společného banku a jeho následné vybírání na konci každé partie. Vyhodnocení výherních kombinací podle již dříve objasněných pravidel zajišťuje třída Poker. Každá třída je samostatný soubor, který je třeba pomocí příslušné funkce načíst do hlavní části programu, která zajišťuje vlastní hru. Tato část obsahuje inicializaci hráčů, balíčku karet, vytvoření banku nebo nastavení jednotlivých proměnných na začátku hry. Obsahuje také 26
formuláře pro ovládání programu přímo uživatelem. Zdrojový kód pro průchod jednotlivými koly je pro přehlednost také umístěn v samostatném souboru. Ten je pak načten na požadované místo ve hře. Efekt je stejný, jako by obsah tohoto souboru byl umístěn přímo na místě načítání. Záměrem bylo umístit toto řešení na internet, aby bylo možné si jej snadno a pohodlně vyzkoušet. Výsledkem je tedy webová stránka, ve které je inicializována hra proti třem soupeřům (za tyto hraje počítač). V jednotlivých kolech je možné dorovnávat či zvyšovat sázky, případně včas složit karty a sledovat jak dopadne tato hra. Jak bylo zmíněno, hra je výrazně zjednodušena a nepostihuje všechny možné aspekty ohledně možností sázek apod., neboť účelem této práce není realizace nové verze pokeru, ale výpočet pravděpodobnosti výhry. Hra se hraje postupně v jednotlivých partiích (označeny jako Hra: číslo), každá partie se skládá ze čtyř kol. Při každé partii se, tak jak je tomu i v reálné hře, posouvá hráč, který začíná sázky. Na obrázku č. 1 je znázorněna obrazovka v prvním kole hry. Červeně označené oblasti slouží pouze pro následující popis významu těchto částí. V oblasti 1 nalezneme informace o aktuálním stavu hry aktuální kolo hry, poslední sázky jednotlivých hráčů a stav banku při každé sázce. V oblasti 2 je uvedena vypočítaná pravděpodobnost na výhru hráče. Oblast 3 obsahuje ovládací prvky pro hráče, kde je možnost nastavovat výši sázek případně ukončit hru a spustit novou. Kliknutím na ikonku mince je možno dorovnat potřebnou částku pro pokračování v kole. Ikonka modrého znaménka plus zajistí přihození násobku povinné sázky. Po nastavení požadované výše sázky je nutné sázku potvrdit klepnutím na tlačítko Odeslat. Tlačítkem Složit karty vzdáváte tuto partii. Tlačítko Nová hra vynuluje veškeré dosažené výsledky a spouští hru úplně od začátku. 4. oblast ukazuje karty hráče a v dalších kolech také společné karty na stole. 27
Obrázek č. 1 Na následujícím obrázku je ukázka po ukončení jedné partie hry, kdy jsou zobrazeny také karty soupeřů pro možnost ověření správnosti vyhodnocení. U výherce je uveden název jeho výherní kombinace a počet žetonů, které získal. Je možné, že hra bude mít i více výherců, v takovém případě by se bank rozdělil mezi ně. 28
Obrázek č. 2 3.1.1 Výpočet pravděpodobnosti Vyhodnocení šancí na výhru je prováděno následovně. Pro každé kolo se použijí karty hráče se společnými kartami na stole. Pro ně je pak simulováno několik her, ze kterých se jednoduchým sčítáním spočítá, kolikrát hráč se svými kartami zvítězil. Potřebnou pravděpodobnost získáme tak, že výsledek vydělíme počtem simulací. Vlastní simulace znamená, že se pokaždé všem soupeřům rozdají znovu karty, protože v tu chvíli nevíme jaké mají. Stejně tak se na stůl doplní do pěti karet pokud je třeba. Pro tyto karty provedeme výběr nejlepší pětice karet pro každého hráče a ohodnotíme ji. Čím většího počtu opakování jsme schopni dosáhnout, tím přesnější odhad získáme, protože postihneme více možných kombinací, které mohou nastat. Jelikož se počet všech kombinací pohybuje kolem 1 000 000 000 (záleží na kole, ve kterém se právě nacházíme), není možné v reálném čase vyzkoušet všechny. 29
3.1.2 Úskalí při použití webové stránky Hlavním a zásadním problémem je bezestavovost webových stránek. To znamená, že požadovaná stránka se načte a zobrazí, ale nepamatuje si nic o tom, co se dělo před jejím zobrazením. Hru tedy nelze tímto způsobem přívětivě naprogramovat. Pro uchování sázek jednotlivých hráčů je nutné je ukládat v trvalé paměti, což umožňují takzvaná Sessions a Cookies, a předávat je mezi jednotlivými načítání stránek. S tím souvisí další komplikace, a to vlastní řešení vkládání sázek. Pokud hráč hraje například druhý v pořadí, musí před ním vsadit počítač a až po té se uživateli nabídne formulář k vložení sázky. Po odeslání potřebujeme zobrazit znovu jak sázku, kterou vložil první počítač, tak sázku, kterou zadal hráč, a posléze všechny další sázky zbylých počítačů. Právě kvůli bezestavovosti je zvolen postupný výpis akcí ve formě vnořeného rámce, kterým lze v případě potřeby listovat. Je tak zachována nedaleká historie akcí soupeřů, na jejichž základě si hráč může udělat představu o tom, zda má smysl riskovat či odstoupit. Takto vytvořená hra se tedy v žádném případě nemůže srovnávat s komfortem klasických desktopových her či her za použití technologie Flash animací apod. Pro dokreslení řešeného problému je však dostačující a uživatelsky přívětivější než textový výpis hodnot karet a čísel s předpokládanou úspěšností výhry. 3.1.3 Omezení implementace Jazyk PHP kvůli svým jinak výborným vlastnostem bohužel nedosahuje rychlosti a výkonu jiných jazyků. Simulace pro 1000 opakování pro hráče trvá průměrně 10 sekund, což je při standardním limitu 30 sekund pro běh skriptů v PHP hodně. Počet opakování simulací je proto nutné snížit na únosnou mez, v důsledku čehož ale snižujeme dosaženou přesnost výsledků. 3.2 Implementace v jazyce JAVA Tato realizace byla navržena kvůli omezením implementace v jazyce PHP a byla zaměřena zejména na větší množství simulací. Nebyla již tedy koncipována na vytvoření alespoň jednoduché hry, ale spíše jako konzolová aplikace, která je schopna pro každé teoretické kolo 30
hry provést v krátkém čase mnohokrát simulaci a získat tak také přesnější výsledky než-li předchozí implementace. Výhodou jazyce Java je nezávislost na platformě a snadná instalace potřebného prostředí. V dnešní době má požadované vybavení na počítači nainstalován snad každý, protože Javu využívá řada aplikací. Počáteční postup tvorby programu byl podobný jako u předchozího programu. Podle návrhu byly vytvořeny třídy, které byly tentokrát koncipovány spíše pro rychlejší provedení potřebných výpočtů. Odpadly tak metody zajišťující sázení a nebylo ani třeba tvořit bank. Z těchto tříd byl pak vytvořen výpočetní program, který pro volitelný počet hráčů vypíše výsledky pro čtyři teoretická kola hry není zde žádné ovládání hry uživatelem, žádné sázky, pouze výpis jednotlivých pravděpodobností a výsledků. Výpočet šance na výhru se provádí po rozdání dvou karet hráčům, po přidání karty na stůl, tedy flopu, dále po turnu a také po přidání poslední karty, riveru. Je tak možno sledovat jak se vlivem jedné nové karty pravděpodobnost na výhru může závratně propadnout či naopak prudce stoupnout. Děje se tak však jen ve zvláštních případech, ve většině případů je odchylka relativně malá. Namísto vykreslování obrázků karet je použit jednoduchý formát výpisu: dvojice (barva, hodnota), kde barvu tvoří první písmenko z anglického názvu barvy: H srdce, C kříže, D káry, S piky. Výhodou je značné navýšení počtu opakování simulací. Během 1-2 sekundy je možno vypočítat pro každý uvedený výpočet 1000 kombinací hry. Tedy 4 krát výpočet pro 4 hráče po 1000 opakování je 16 000 výpočtů za 2 sekundy. Což je několikrát rychlejší než pokus o výpočet v aplikaci vytvořené v PHP. Při pokusu o 1 000 000 opakování v simulaci trvalo vyhodnocení zhruba 4 minuty, ale proběhlo úspěšně. 31
Ukázka výsledků při 10 000 opakování pro každou simulaci: S8. S2. pravděpodobnost výhry je 0,006000 % S8. S2. DA. S9. D2. pravděpodobnost výhry je 15,644000 % S8. S2. DA. S9. D2. CJ. pravděpodobnost výhry je 8,090000 % S8. S2. DA. S9. D2. CJ. S7. pravděpodobnost výhry je 8,089000 % 3.2.1 Nedostatky této implementace Výsledný program podle plánovaného záměru počítá výsledky velmi rychle a také přesněji než prvotní implementace. Nedostatkem byla pouze textová reprezentace, která není příliš uživatelsky přívětivá a přenositelnost, kdy je vyžadováno nainstalované běhové prostředí pro Javu. Ani jeden nedostatek však nebyl zásadní a při návrhu této implementace bylo spíše počítáno s konzolovou aplikací zejména proto, že při spouštění pomocí skriptů je možné provádět snadno opakované simulace a výsledky dále různě zpracovávat předáním do jiného programu, uložením do souboru či databáze. Jako další možné vylepšení tedy bylo vhodné vytvořit applet, který zobrazuje karty v grafické podobě a také je přístupnější díky zapouzdření v internetovém prohlížeči. Prohlížeč vyžaduje nainstalovaný doplněk pro zobrazení appletů. Ten však obvykle umí nainstalovat automaticky a stačí pouze schválení této akce uživatelem, tudíž by s tímto neměl být žádný problém. 32
3.2.3 Java applet Po stanovení cílů, které by applet měl zvládat byla vytvořena grafická varianta simulací výpočtů, která je přístupná přes internetový prohlížeč s nainstalovanou podporou jazyka Java. Ve vývojovém prostředí Netbeans 6.1. bylo i přes předešlé nulové znalosti jak Javy tak tvorby grafických aplikací možné s pomocí nástroje návrháře tuto aplikaci vytvořit. Tvorbu provázely sice časté obtíže, protože styl návrhu takovéto aplikace se poněkud odlišuje od tvorby předchozích uvedených programů, ale výsledkem je funkční applet, který umožňuje po jednotlivých krocích sledovat vypočítanou aktuální pravděpodobnost výhry viz obrázek xx. Stručný návod ovládání programu: Zvolte počet hráčů a počet opakování a klepněte na tlačítko Nová hra vpravo dole. Toto tlačítko vždy spustí novou hru s přednastavenými hodnotami. Počet opakování určuje přesnost odhadu. Odhad se počítá simulací zadaného počtu her se známými kartami hráče a kartami viditelnými na stole. Počet výher v těchto hrách je pak základem pro výpočet pravděpodobnosti. Vyšší číslo tedy zpřesňuje výpočty, ale zároveň výpočty trvají déle, proto u volby 1 000 000 může některá fáze výpočtu trvat až cca 2 minuty. Tlačítko Další krok posouvá hru do dalšího kola (přidání karty na stůl ). Podle fáze hry se popisek tlačítka mění podle jeho funkce. Tlačítko Vyhodnocení zobrazí karty všech hráčů a zároveň vítěze hry (může jich být více) Tlačítko Nová hra v levé části spustí znovu hru se stejnými parametry V levé textové oblasti je postupně vypisována vypočítaná pravděpodobnost každého kola hry a také vyhodnocení. Pravá oblast slouží k výpisu aktuálního nastavení hry a případně k výpisu chybových hlášení 33
Obrázek č. 3 Ovládání je již uživatelsky přívětivější než předchozí program, nicméně obě dvě verze mají své využití. Konzolová aplikace je vhodnější a rychlejší pro získání rozsáhlejšího statistického přehledu, grafická verze naopak umožní pohodlnou prezentaci výsledků. Na obrázku č. 4 je znázorněna poslední fáze hry včetně vyhodnocení. Obrázek č. 4 34
4. Využití v praxi 4.1 Startovní kombinace Poker je hrou rozhodování. Protože hráč nemůže mít pod kontrolou, jaké přijdou karty nebo jak zareaguje soupeř, svoje umění může uplatnit v rozhodování. Vůbec nejdůležitější rozhodnutí, které hráč činí, je to, zda se se svými dvěma kartami zúčastní hry, nebo je složí ještě před flopem. Jestliže se rozhodne hrát, rozhodne se tak i investovat peníze do banku. Mnoho hráčů prohrává právě proto, že hraje příliš mnoho kombinací. V Texas Hold'emu existuje celkem 169 různých startovních kombinací. Všechny mají možnost vyhrát, ale existuje několik startovních kombinací, jejichž pravděpodobnost výhry je větší. Přestože hodně záleží na počtu hráčů u stolu, limitech sázek a podobně, je dobrá startovní kombinace jedním ze základu úspěchu. Většina dlouhodobě ziskových hráčů hraje pouze několik málo kombinací. Návod, které kombinace je dobré hrát a které raději zahazovat, najdete v následujících tabulkách. Páry a karty v barvě A-A A-K K-Q Q-J J-10 10-9 9-8 8-7 7-6 6-5 5-4 4-3 3-2 K-K A-Q K-J Q-10 J-9 10-8 9-7 8-6 7-5 6-4 5-3 4-2 Q-Q A-J K-10 Q-9 J-8 10-7 9-6 8-5 7-4 6-3 5-2 J-J A-10 K-9 Q-8 J-7 10-6 9-5 8-4 7-3 6-2 10-10 A-9 K-8 Q-7 J-6 10-5 9-4 8-3 7-2 9-9 A-8 K-7 Q-6 J-5 10-4 9-3 8-2 8-8 A-7 K-6 Q-5 J-4 10-3 9-2 7-7 A-6 K-5 Q-4 J-3 10-2 6-6 A-5 K-4 Q-3 J-2 5-5 A-4 K-3 Q-2 4-4 A-3 K-2 3-3 A-2 2-2 Tabulka č. 3 35
Karty různých barev A-K K-Q Q-J J-10 10-9 9-8 8-7 7-6 6-5 5-4 4-3 3-2 A-Q K-J Q-10 J-9 10-8 9-7 8-6 7-5 6-4 5-3 4-2 A-J K-10 Q-9 J-8 10-7 9-6 8-5 7-4 6-3 5-2 A-10 K-9 Q-8 J-7 10-6 9-5 8-4 7-3 6-2 A-9 K-8 Q-7 J-6 10-5 9-4 8-3 7-2 A-8 K-7 Q-6 J-5 10-4 9-3 8-2 A-7 K-6 Q-5 J-4 10-3 9-2 A-6 K-5 Q-4 J-3 10-2 A-5 K-4 Q-3 J-2 A-4 K-3 Q-2 A-3 K-2 A-2 Tabulka č. 4 Hrajte v jakékoli pozici Hrajte na střední/pozdní pozici Hrajte jen na pozdní pozici Nehrajte vůbec Zdroj: Lou Krieger: Poker Jak hrát a vyhrát 4.2 Testování Pokud bychom chtěli otestovat, nakolik tyto tabulky fungují v praxi, můžeme využít jeden z programů a sledovat vývoj hry s vybranými startovními kombinacemi. V tabulce č. 5 je sledován vývoj pravděpodobností karet, označených jako karty hratelné v jakékoli pozici. Hrány byly konkrétní hry proti čtyřem soupeřům. K výpočtu šancí bylo použito 1 000 simulací, kdy byly protivníkům rozdávány náhodné karty. V první části tabulky je zachyceno 5 her s kartami ve stejné barvě, konkrétně A K. Jsou to karty silné s průměrnou šancí výhry v pěti hráčích 50 %. S postupným vykládáním karet na stůl se již pravděpodobnost výhry různí, v některých hrách je dokonce minimální. V druhé části tabulky jsou sledovány karty K J. 36
Vývoj šancí vysokých karet Pořadí hry Startovní karty Karty ve stejné barvě 1. 2. 3. 4. 5. A K cca 50 % Karty v různých barvách 1. 2. 3. 4. 5. Tabulka č. 5 K J cca 40 % Flop Turn River 2 5 8 25,5 % K 3 2 64,2 % 5 Q 6 13,4 % A 9 Q 60,3 % 3 A 3 56,3 % Q A 2 32,5 % K 10 8 60,6 % 7 Q 10 37,6 % 9 K 8 58,4 % 6 5 K 56,9 % 9 7,6 % 9 63,7 % J 12,9 % 4 62,7 % 2 53,1 % 8 14,5 % Q 57,4 % 9 91,8 % J 66,7 % 6 49,6 % 7 1,2 % 9 58,8 % 2 2,2 % 2 60,5 % 4 44,6 % J 22,9 % 9 96,8 % K 97,9 % A 74,6 % Q 54,1 % Výhra / prohra Prohra Prohra Prohra Výhra Výhra Prohra Výhra Výhra Výhra Výhra Výherní kombinace Dva páry Trojice Pár Pár Dva páry Dva páry Postupka Postupka Dva páry Dva páry V tabulce č. 6 jsou pak zachyceny hry se slabými kombinacemi, které je doporučeno skládat. Stejně jako v předchozí tabulce se hrálo proti čtyřem protivníkům a šance byly opět určeny 1 000 simulací. V první části jsou opět uvedeny partie karet stejné barvy. Sledovanou kombinací byla 8 3 s průměrnou pravděpodobností na začátku hry 25 %. Ve 2. hře je zachycena již zmiňovaná situace, kdy vítězí všichni s použitím všech karet na stole. Následujících 5 her pak bylo odehráno s kartami v různých barvách. Sledována byla kombinace 8 3. 37
Vývoj šancí nízkých karet Pořadí hry Startovní karty Karty ve stejné barvě 1. 2. 3. 4. 5. 8 3 cca 25 % Karty v různé barvě 1. 2. 3. 4. 5. Tabulka č. 6 8 3 cca 20 % Flop Turn River 6 10 A 6,3 % 9 K A 9,4 % 6 6 7 31,3 % 2 7 A 8,7 % J 6 7 13,7 % 2 8 5 8,3 % 10 Q Q 10,4 % 3 K 10 19,6 % 5 9 10 19,6 % A A 6 11,6 % 2 1,6 % 9 7,7 % K 20,6 % K 1,8 % 4 8,4 % J 1,9 % 8 23,4 % 8 48,4 % 8 48,4 % 6 16,9 % 2 0,2 % A 32,6 % Q 1,3 % 3 8,1 % 6 0,1 % 9 0,1 % 4 29,2 % 2 17,3 % J 0,2 % K 33,5 % Výhra / prohra Prohra Výhra Prohra Prohra Prohra Prohra Výhra Prohra Prohra Prohra Výherní kombinace Trojice Dva páry Dva páry Postupka Dva páry Pár Dva páry Flush Pár Full House Následující tabulky jsou pak doplněním tabulek č. 3 a 4, kdy bylo opět využito jednoho z programů. Novou informací je procento výher jednotlivých startovních kombinací v 100 000 partiích proti jednomu soupeři s náhodnými kartami. Síla párů a karet v barvě (v %) A-A 85,61 K-K 82,86 Q-Q 80,52 J-J 78,29 10-10 67,10 9-9 72,91 A-K 68,05 A-Q 67,29 A-J 66,52 A-10 69,84 A-9 64,06 A-8 63,50 K-Q 64,72 K-J 63,68 K-10 63,19 K-9 61,70 K-8 59,96 K-7 59,48 Q-J 61,82 Q-10 60,96 Q-9 58,52 Q-8 57,76 Q-7 56,23 Q-6 55,82 J-10 59,25 J-9 57,48 J-8 56,12 J-7 54,57 J-6 52,85 J-5 52,34 10-9 56,17 10-8 54,57 10-7 52,73 10-6 51,33 10-5 49,69 10-4 48,93 9-8 53,17 9-7 51,68 9-6 49,72 9-5 48,30 9-4 46,55 9-3 45,64 8-7 50,79 8-6 49,18 8-5 47,32 8-4 45,38 8-3 43,86 8-2 43,12 7-6 48,60 7-5 46,68 7-4 44,74 7-3 42,66 7-2 40,92 6-5 46,43 6-4 44,80 6-3 42,79 6-2 40,87 5-4 43,06 5-3 41,53 5-2 39,55 4-3 40,60 4-2 38,88 3-2 37,56 38
39 8-8 70,48 A-7 62,71 K-6 58,86 Q-5 54,98 J-4 51,52 10-3 48,13 9-2 44,98 7-7 67,37 A-6 62,07 K-5 57,96 Q-4 54,15 J-3 50,65 10-2 46,99 6-6 64,46 A-5 60,69 K-4 56,74 Q-3 53,31 J-2 49,55 5-5 61,35 A-4 60,42 K-3 56,36 Q-2 51,96 4-4 58,42 A-3 59,11 K-2 55,22 3-3 55,02 A-2 58,17 2-2 51,63 Tabulka č. 7 Síla karet různých barev (v %) A-K 66,12 K-Q 62,91 Q-J 59,60 J-10 57,43 10-9 53,34 9-8 50,53 8-7 47,52 7-6 45,14 6-5 43,74 5-4 40,29 4-3 37,54 3-2 34,60 A-Q 65,41 K-J 62,03 Q-10 58,86 J-9 57,20 10-8 52,51 9-7 49,35 8-6 46,25 7-5 43,70 6-4 41,81 5-3 38,62 4-2 35,27 A-J 64,60 K-10 61,34 Q-9 57,31 J-8 55,87 10-7 50,41 9-6 47,35 8-5 44,31 7-4 41,89 6-3 39,58 5-2 36,31 A-10 64,27 K-9 59,60 Q-8 55,87 J-7 52,02 10-6 48,90 9-5 45,57 8-4 42,35 7-3 39,94 6-2 37,69 A-9 62,52 K-8 58,01 Q-7 54,13 J-6 50,45 10-5 46,90 9-4 43,43 8-3 40,69 7-2 37,78 A-8 61,55 K-7 57,36 Q-6 53,28 J-5 49,49 10-4 46,13 9-3 42,90 8-2 39,70 A-7 61,12 K-6 56,60 Q-5 52,06 J-4 48,70 10-3 45,27 9-2 41,92 A-6 60,06 K-5 55,62 Q-4 51,39 J-3 47,85 10-2 44,20 A-5 59,15 K-4 54,62 Q-3 50,75 J-2 46,99 A-4 58,20 K-3 53,66 Q-2 49,80 A-3 57,08 K-2 52,63 A-2 56,28 Tabulka č. 8
Závěr Jak již bylo řečeno v úvodu, poker není hazardní hrou, ve které jde pouze o štěstí. Můžeme vyhrát, ale i prohrát velké množství peněz. Proto je velkou výhodou, ne-li základem, umět si spočítat šance na výhru a podle toho přizpůsobit svou herní strategii. Hráč, který dokáže okamžitě a správně reagovat na situaci u stolu, dokáže i eliminovat svoje případné ztráty. Hlavním cílem bakalářské práce proto bylo vytvořit program, který by byl schopen vypočítat výherní pravděpodobnost v různých fázích hry Texas Hold em. Ve výsledku byly vytvořeny programy dva. První byl napsán v jazyce PHP, který je vhodný především pro svou graficky a uživatelsky přívětivou prezentaci výsledků na internetu. Je umístěn na webové stránce http://zapik.cz/poker/.v průběhu realizace se však ukázaly některé nedostatky tohoto jazyka, především v rychlosti. Proto byl vytvořen druhý program v jazyce Java, který je již zaměřen na velké množství simulací a tedy i větší přesnost výpočtu pravděpodobnosti. Program je umístěn na adrese http://poker.zapik.cz/java/applet.html. Zdrojový kód obou programů bude přiložen u elektronické verze této práce. V této práci byl tedy nejdříve popsán průběh samotné hry včetně hodnocení jednotlivých výherních kombinací. Poté byly rozebrány rozdílné způsoby výpočtu pravděpodobnosti výhry, z nichž pro nás stěžejní byla metoda Monte Carlo, která byla použita právě v programech. Další část pak popisovala postupy při vytváření jednotlivých programů a na závěr byly programy využity při sledování vývoje šancí vybraných startovních kombinací. 40
Literatura [1] BRÁZA, Jiří. PHP 5 : Začínáme programovat. 1. vyd. Praha : Prada Publishing, a.s., 2005. 244 s. ISBN 80-247-1146-X. [2] GILMORE, W. Jason. Velká kniha PHP 5 a MySQL : kompendium znalostí pro začátečníky i profesionály. 1. vyd. Brno : Zoner Press, 2005. 711 s. ISBN 80-86815-20-X. [3] ZAKHOUR, Sharon, et al. Java 6 : Výukový kurz. Computer Press, 2007. 536 s. ISBN 978-80-251-1575-6. [4] Linuxsoft.cz [online]. c2003-2009. Dostupný z WWW: <http://www.linuxsoft.cz>. [5] KRIEGER, Lou. Poker : Jak hrát a vyhrát. Praha : Slovart, s.r.o., 2007. 256 s. ISBN 978-80-7209-869-9. [6] Poker24.cz : 1. československý poker web [online]. c2006. Dostupný z WWW: <www.poker.24.cz>. [7] Poker-online.cz [online]. c2007. Dostupný z WWW: <www.poker-online.cz>. [8] Pokertip.cz : Pro život s pokerem [online]. c2005-2009. Dostupný z WWW: <http://www.pokertip.cz/karetni-kombinace-v-pokeru.p24.html>. [9] SLABEJOVÁ, Danica. Metoda Monte Carlo. [s.l.], 2007. 38 s. Masarykova univerzita v Brně. Vedoucí bakalářské práce prof. RNDr. Gejza Wimmer, DrSc. Dostupný z WWW: <http://is.muni.cz/th/151336/prif_b/>. 41