Audamir

časť 06

Koľko hĺbky má kockový poker? Presný výpočet, ktorý predchádza stavbe

Päť kociek, dve prehodenia a deväť výplatných tabuliek. Presný výpočet ukazuje, o koľko je optimálna hra lepšia než jednoduché pravidlo, a že to závisí od tabuľky viac, než sa čakalo. Nástroj aj tabuľky sú v článku celé.

· 15 min čítania

V článku Od krčmy po Knucklebones stojí, že kockový poker je dobrý na jeden večer: po hodine hry v ňom nie je čo objavovať. Tá veta vychádza z merania, ktoré sa v Audamire spravilo skôr, než sa pre kasíno začalo čokoľvek stavať. Tabuľka, z ktorej meranie vtedy vyšlo, sa nezachovala, takže jeho čísla sa nedajú overiť. Tento článok meranie opakuje od začiatku: s nástrojom, ktorý je v ňom celý, a s deviatimi výplatnými tabuľkami, ktoré sú vypísané. Výsledok je menej jednoznačný než tá veta a závisí od tabuľky, preto sa o ňom píše osobitne.

Čo je hĺbka hry a prečo ju merať pred stavbou

Hra je hlboká, keď je dlhá cesta od hry bez rozhodovania k hre s najlepšími rozhodnutiami. Na tej ceste stačia tri body: náhoda (hráč, ktorý nerozhoduje), jednoduché pravidlo (hráč, ktorý sa vždy riadi jednou vetou) a optimum (hráč, ktorý v každej situácii urobí najlepšie možné rozhodnutie). Ak jednoduché pravidlo dosiahne takmer optimum, po prvej hodine hry sa už nedá nič nové objaviť. Ak dosiahne len polovicu, je kam rásť.

Dá sa to zistiť pred stavbou: stačí vypočítať, čo dosiahne optimum, čo pravidlo a čo náhoda. V článku o kockách v hrách je z toho kritérium pre plánovanú kockovú hru s bossom: rozdiel medzi optimom a náhodou aspoň 25 percentuálnych bodov (b. b.) a medzi optimom a jednoduchým pravidlom aspoň 5 b. b.; ak prototyp tieto hranice nesplní, nápad sa zahodí. Tam išlo o šancu na výhru v súboji. Tu sa tá istá miera použije na podiel očakávanej výplaty optima, takže je to podobné meranie, nie to isté. Hranice 25 a 5 sú návrh, nie dôkaz.

Hra, ktorá sa meria

Päť šesťstenných kociek. Hráč hodí všetkými a potom dvakrát môže ľubovoľné kocky nechať a ostatné prehodiť. Po poslednom hode sa podľa kombinácie vyplatí výplatná tabuľka: päťka, štvorica, full house (trojica a dvojica), postupka (1 až 5 alebo 2 až 6), trojica, dva páry a pár; všetko ostatné platí 0. Výplata je na jednotku stávky: 3 znamená tri stávky späť. Súper tu nie je, hráč hrá proti tabuľke. Je to teda kockový poker, aký by mala kasínová obrazovka v hre, nie súboj dvoch hráčov, aký je v Zaklínačovi.

Päť kociek má 7 776 možných hodov. Pri prvom hode vychádzajú takto (spočítané ručne a overené v testoch nástroja):

KombináciaHodov z 7 776Šanca
päťka (5 rovnakých)60,08 %
štvorica (4 + 1)1501,93 %
full house (3 + 2)3003,86 %
postupka (1 až 5 alebo 2 až 6)2403,09 %
trojica (3 + 1 + 1)1 20015,43 %
dva páry (2 + 2 + 1)1 80023,15 %
pár (2 + 1 + 1 + 1)3 60046,30 %
nič (bez dvojice a bez postupky)4806,17 %

Štyri spôsoby, ako hrať

  1. Optimum. V každej ruke a s každým počtom ostávajúcich prehodení nechá to, z čoho vychádza najvyššia očakávaná výplata.
  2. „Nechaj najčastejšiu hodnotu“. Nechá všetky kocky s hodnotou, ktorá je na najviac kockách, ostatné prehodí. Pri remíze vyhráva vyššia hodnota (dva páry: vyšší pár; všetky kocky rôzne: najvyššia kocka). Remíza je pravidlo, ktoré sa muselo určiť, ale pri týchto tabuľkách nič nemení: obe verzie dávajú rovnaké čísla, lebo tabuľky sa nemenia, keď sa kocky prevrátia (1 na 6, 2 na 5, 3 na 4).
  3. Bez prehadzovania. Hráč zoberie prvý hod.
  4. Náhodná. Každú kocku nechá s šancou 1/2, nech ukazuje čokoľvek. Počíta sa presne, nie simuláciou. Vychádza presne rovnako ako bez prehadzovania, a to z princípu: rozhodnutie nezávisí od toho, čo kocky ukazujú, takže kocka, ktorá sa nechá, aj kocka, ktorá sa prehodí, je po kroku rovnomerná a nezávislá od ostatných. Ruka na konci má rozdelenie ako po jedinom hode, nech je šanca nechať kocku akákoľvek. Preto má tabuľka nižšie jeden stĺpec pre obe.

Výplatné tabuľky

Deväť tabuliek, v poradí päťka, štvorica, full house, postupka, trojica, dva páry, pár (nič platí vždy 0). Posledný stĺpec je návratnosť optima: koľko stávok sa v priemere vráti pri najlepšej hre.

Tabuľkapäťkaštvoricafull housepostupkatrojicadva párypárNávratnosť optima
A1054321,51326,1 %
B10643210,5332,9 %
C8533211288,5 %
D20854321489,0 %
E532,521,510,5202,7 %
F4210,50,50095,1 %
G511110094,2 %
H51,51,51,500093,6 %
I10640210,5330,1 %

Tabuľky A až E sú štedré: pri najlepšej hre sa vráti 2,0 až 4,9 stávky na jednu vsadenú. Také tabuľky by nikto nenasadil do kasína, slúžia na to, aby bolo vidieť, ako výsledok závisí od tvaru tabuľky (rebríček od päťky po pár, plochý rebríček, strmý vrchol). Tabuľky F, G a H sú kasínové: návratnosť optima je 93,6 až 95,1 %, teda pri najlepšej hre sa stráca. G je plochá od štvorice po trojicu, H platí postupku rovnako ako štvoricu a full house. Tabuľka I je tabuľka B bez postupky. Tabuľky sú vybrané ručne, nie vyčerpávajúco.

Ako sa to počítalo

Počíta sa presne, nie vzorkovaním. Ruka je multimnožina kociek (nezáleží na poradí, len na tom, koľko kociek ukazuje ktorú stenu), takže ich je pre päť kociek a šesť stien len 252. Pre každú ruku a každé, čo sa z nej dá nechať (podmultimnožina), je známe, aké ruky po prehodení ostatných kociek vzniknú a s akou šancou. Potom sa ide odzadu, metódou dynamického programovania:

  • s nijakým prehodením navyše je hodnota ruky jej výplata;
  • s jedným prehodením navyše je hodnota ruky najlepšie nechanie: priemer hodnôt rúk, ktoré z neho po prehodení vzniknú, vážený ich šancou;
  • s dvoma je to to isté o stupeň vyššie;
  • hodnota hry je priemer hodnôt všetkých 252 rúk po prvom hode, vážený ich šancou.

Pravidlo „najčastejšia“, bez prehadzovania a náhodná stratégia používajú ten istý chod odzadu, len namiesto najlepšieho nechania použijú pevné. Celý výpočet trvá asi tretinu sekundy. Tu je jadro celé; beží v Node 18 alebo novšom a vypíše tri hodnoty pre tabuľku B:

// Kockový poker, presne: päť kociek, dve prehodenia.
// Ruka je vektor počtov (h[f] = koľko kociek ukazuje stenu f), ruky sú multimnožiny.
const TABLE = [10, 6, 4, 3, 2, 1, 0.5]; // päťka, štvorica, full house, postupka, trojica, dva páry, pár

function payout(h) { // nič platí 0
  const shape = h.filter((c) => c > 0).sort((a, b) => b - a).join('');
  const faces = h.map((c, f) => (c ? f : -1)).filter((f) => f >= 0);
  const straight = faces.at(-1) - faces[0] === 4 ? 3 : -1;
  const kind = { 5: 0, 41: 1, 32: 2, 311: 4, 221: 5, 2111: 6 }[shape] ?? straight;
  return kind < 0 ? 0 : TABLE[kind];
}

function solve(payout, { dice = 5, sides = 6, rerolls = 2 } = {}) {
  const fact = (n) => (n <= 1 ? 1 : n * fact(n - 1));
  const sum = (a) => a.reduce((x, y) => x + y, 0);
  // všetky multimnožiny m kociek ako vektory počtov a šanca každej
  const multisets = (m, k = sides) => (k === 1 ? [[m]] :
    Array.from({ length: m + 1 }, (_, c) => multisets(m - c, k - 1).map((h) => [c, ...h])).flat());
  const chance = (h) => fact(sum(h)) / h.reduce((p, c) => p * fact(c), 1) / sides ** sum(h);
  const rolls = Array.from({ length: dice + 1 }, (_, m) => multisets(m).map((h) => [h, chance(h)]));
  const hands = multisets(dice);
  const at = new Map(hands.map((h, i) => [h.join(), i]));
  // všetko, čo sa z ruky dá nechať (podmultimnožiny)
  const subsets = (h) => h.reduce((all, c) =>
    all.flatMap((k) => Array.from({ length: c + 1 }, (_, x) => [...k, x])), [[]]);
  // pre každú ruku každé nechanie a ruky, ktoré po prehodení ostatných kociek vzniknú, s ich šancami
  const keeps = hands.map((h) => subsets(h).map((keep) => [keep, rolls[dice - sum(keep)].map(
    ([r, p]) => [at.get(keep.map((c, f) => c + r[f]).join()), p])]));
  // hodnota každej ruky pri stratégii `pick`, odzadu: najprv nijaké prehodenie, potom jedno, potom dve
  const value = (pick) => {
    let V = hands.map(payout);
    for (let left = 1; left <= rerolls; left++) {
      V = hands.map((h, i) => pick(h, keeps[i].map(
        ([keep, next]) => [keep, next.reduce((e, [j, p]) => e + p * V[j], 0)])));
    }
    return rolls[dice].reduce((e, [h, p]) => e + p * V[at.get(h.join())], 0);
  };
  const best = (h, options) => Math.max(...options.map(([, e]) => e)); // optimum: najlepšie nechanie
  const rule = (h, options) => { // „nechaj najčastejšiu hodnotu“: remíza ide vyššej hodnote
    const top = h.lastIndexOf(Math.max(...h));
    return options.find(([keep]) => keep.every((c, f) => c === (f === top ? h[f] : 0)))[1];
  };
  return {
    optimal: value(best),
    rule: value(rule),
    none: rolls[dice].reduce((e, [h, p]) => e + p * payout(h), 0), // bez prehadzovania
  };
}

console.log(solve(payout)); // { optimal: 3.3295…, rule: 3.2233…, none: 1.1419… }

Nástroj v repozitári webu (tools/dice-poker/dice-poker.js, bez závislostí) robí to isté a navyše vypíše všetky tabuľky, kritérium a miesta, kde sa optimum a pravidlo líšia. Kód vyššie sa spúšťa v testoch a jeho výsledky sa porovnávajú s nástrojom pre všetkých deväť tabuliek.

Ako sa overilo, že počíta dobre

Meranie, ktoré nemá kontrolu, je názor s desatinnými miestami. Preto sa nástroj overil viacerými cestami, z ktorých ani jedna nepoužíva jeho vnútro:

  • Hrubá sila. Samostatná verzia, ktorá nepozná multimnožiny: kocky sú zoznam hodnôt, každé nechanie je množina kociek, prehodia sa všetky možné výsledky. Na malých hrách (1 až 4 kocky, 2 až 6 stien, 0 až 3 prehodenia) s výplatami, ktoré nie sú súmerné, sa zhoduje v optime, v oboch verziách remízy, bez prehadzovania aj v náhodnej stratégii (do 10⁻⁹).
  • Všetky stratégie. V troch malých hrách sa vyhodnotila každá pevne daná stratégia (v najväčšej ich bolo 1 728). Najlepšia z nich je optimum z programu a žiadna ho neprekoná.
  • Súčty. Šance hodov, každého nechania, rúk na konci aj kombinácií sú spolu 1. Kombinácie 7 776 hodov sa spočítali ručne (6, 150, 300, 240, 1 200, 1 800, 3 600, 480) aj z hodnôt kociek.
  • Číslo zvonku. Šanca na päťku za tri hody (prvý hod a dve prehodenia), keď sa vždy necháva najčastejšia hodnota, je podľa riešení úloh o hre Yahtzee z kurzu pravdepodobnosti na Cornellovej univerzite 0,046029 (4,6 %). Nástroj dáva pre výplatu len za päťku 0,0460286 a to isté číslo vychádza pre optimum aj pre obe verzie remízy. Pre jedno prehodenie sa porovnáva s uzavretým vzorcom z ručne spočítaných hodov (0,0126315).
  • Hranie. Milión rúk na každú tabuľku a stratégiu s generátorom so zadaným semienkom, 36 priemerov; najväčší rozdiel proti presnej hodnote je 3,06 štandardnej chyby (tabuľka A, pravidlo), s dvoma inými semienkami tej istej hodnoty −1,0 a 0,8, teda náhodné kolísanie. Frekvencie kombinácií na konci pre tabuľku B sedia tiež. Beh trvá asi minútu a nie je súčasťou bežných testov.
  • Pokazené verzie. 31 zámerne pokazených verzií nástroja (výplata, remíza, počet prehodení, počet rúk a ďalšie) a každá zhodí aspoň jeden test.
  • Prvý nezávislý výpočet. Pred nástrojom sa pre tabuľky A až E spravil samostatný výpočet a dal 326, 333, 289, 489 a 203 % návratnosti optima a 95,3, 96,8, 98,9, 98,5 a 95,4 % pre pravidlo. Nástroj dáva tie isté čísla.

Výsledky

Stĺpec „Optimum“ je návratnosť optima. „Najčastejšia“ a „Bez prehadzovania“ (náhodná vychádza rovnako) sú podiel na optime: očakávaná výplata stratégie vydelená očakávanou výplatou optima. „Medzera“ je rozdiel proti optimu v percentuálnych bodoch (b. b.). Posledný stĺpec je kritérium z článku o kockách v hrách: optimum aspoň o 25 b. b. nad náhodou a aspoň o 5 b. b. nad pravidlom.

TabuľkaOptimum„Najčastejšia“Bez prehadzovaniaMedzera: pravidloMedzera: náhodaKritérium
A326,1 %95,3 %45,1 %4,754,9nie
B332,9 %96,8 %34,3 %3,265,7nie
C288,5 %98,9 %45,5 %1,154,5nie
D489,0 %98,5 %38,3 %1,561,7nie
E202,7 %95,4 %45,1 %4,654,9nie
F95,1 %99,9 %18,2 %0,181,8nie
G94,2 %98,5 %26,2 %1,573,8nie
H93,6 %79,7 %14,6 %20,385,4áno
I330,1 %97,6 %31,8 %2,468,2nie

Čo z toho vidno:

  • Pri tabuľkách, ktoré platia od päťky po pár (A až E), pravidlo dosahuje 95,3 až 98,9 % optima. Medzera je 1,1 až 4,7 b. b., pod hranicou 5. Bez prehadzovania je to 34,3 až 45,5 %.
  • Kasínové tabuľky F a G sú ešte bližšie: pravidlo má 99,9 a 98,5 % optima, bez prehadzovania len 18,2 a 26,2 %.
  • Tabuľka H je výnimka a ukazuje prečo. Postupka platí rovnako ako štvorica a full house a pravidlo sa nikdy nesnaží o postupku, ba hotovú postupku rozbije. Pravidlo má 79,7 % optima, medzera je 20,3 b. b. a kritérium je splnené.
  • Postupka nevysvetľuje celú medzeru ani pri tabuľke B. Bez postupky (tabuľka I) má pravidlo 97,6 % namiesto 96,8 %: medzera klesne z 3,2 na 2,4 b. b., postupka z nej teda vysvetľuje len 0,8 b. b.
  • Optimum a pravidlo robia iné veci nie v jednej ruke, ale v mnohých. Pri tabuľke B nechá optimum pri prvom prehodení iné kocky než pravidlo v 38 z 252 rúk (21,6 % hodov), pri tabuľke F v 6 (9,3 %), pri tabuľke H v 100 (39,4 %). Najčastejšia zmena: hotová postupka 1 2 3 4 5 alebo 2 3 4 5 6, ktorú optimum nechá celú, kým pravidlo nechá jednu kocku.
  • Optimum nehoní najvyššiu kombináciu. Pri tabuľke B dosiahne pravidlo päťku v 4,60 % prípadov, optimum len v 4,21 %; optimum má viac full house (22,6 % proti 9,9 %) a postupiek (3,3 % proti 0,02 %).

Čo z toho plynie

Podľa kritéria z článku o kockách v hrách sa nápad, ktorý medzeru 5 b. b. nesplní, zahodí. Splnila ju z deviatich tabuliek len jedna, H. Pre tabuľky, ktoré platia rebríček od päťky po pár, platí to, čo stálo v článku o kockách v hrách: jednoduché pravidlo je v blízkosti optima a po hodine hry nie je čo objavovať. Meranie to ale spresňuje:

  • Výsledok je vlastnosť tabuľky, nie kociek. Hĺbka v kockovom pokri je jedna vec, ktorú pravidlo nevie: nechať a ťahať postupku. Tabuľka, ktorá postupku platí vysoko, hĺbku vráti.
  • Hlboká tabuľka nie je dobrá tabuľka. H má kritérium splnené, ale platí štvoricu, full house a postupku rovnako a nič nižšie; hráč, ktorý sa riadi pravidlom, stráca pätinu toho, čo by dostal pri najlepšej hre. Či je to zaujímavejšia hra, alebo len tabuľka, ktorú ľudia nechápu, sa týmto meraním zistiť nedá.
  • Kocky ako príchuť, nie ako základ. Kocková hra na jeden večer v krčme je presne to, čo ten poker je. Na základ hry nestačí.
  • Staré čísla. Prvé meranie (v článku o kockách v hrách uvedené ako 98 % a 34 %) pochádzalo z tabuľky, ktorá sa nezachovala. Nové čísla pre štedré tabuľky (95 až 99 % a 34 až 46 %) sú v rovnakom rádovom rozsahu, ale nie sú to tie isté čísla a nenahrádzajú ich späť.

Čo je o tom v dokumentoch hry

Dôvodom, prečo sa v Audamire kasíno s pokrom nerobí, nebolo meranie. Dokumenty hovoria toto:

  • Rozhodnutie z 18. 10. 2026. Autor hry považuje poker za príliš sporný spôsob, ako míňať Zlaté kocky, a nahradil ho systémom skriniek a spájania pri Avatarovi[1]. O tom, ako ten systém vyzerá, je článok o skrinkách (pripravovaný článok č. 12). Číslo kapitoly o kasíne ostalo v dokumente ako zarážka, lebo sa naň odkazujú iné dokumenty.
  • Pravidlá portálov. Dokument o distribúcii hry (koncept z 18. 10. 2026, nie schválený plán) pri pravidlách obsahu portálov (CrazyGames: PEGI 12, Poki: žiadne nákupy v hre) odporúča nedávať kasíno s kockovým pokrom do verzie pre portály, lebo ide o hazard.
  • Poznámka pre záznam. V pracovnom dokumente stálo k tomu meranie jednou vetou: zjednodušená tabuľka, päť kociek, dve prehodenia, presné dynamické programovanie; jednoduchá stratégia „nechaj najčastejšiu hodnotu“ dosahuje 98 % optima (250 % oproti 254 % na skúšobnej tabuľke), bez prehadzovania len 34 %, takže hĺbka kockového pokra je plytká a po hodine hry nie je čo objavovať. Čísla v tej vete sú z tabuľky, ktorá sa nezachovala, a z tohto článku sa neoveria; slúžia ako záznam, nie ako tvrdenie.
  • Podmienka, keby sa kasíno niekedy chcelo. Výplatná tabuľka musí dať optimálnej hre zápornú očakávanú hodnotu (návratnosť ≈ 92 – 96 %), s limitom stávky a denným limitom. Tabuľky F, G a H sú príklady s návratnosťou optima 93,6 až 95,1 %; limit stávky a denný limit nie sú predmetom merania.

Čo sa nemeralo

  • Súboj dvoch hráčov ako v Zaklínačovi (stávky, súper, ktorý vidí tvoje rozhodnutia). Meralo sa jednoduchšie: jeden hráč proti výplatnej tabuľke.
  • Iné kockové hry: Yahtzee s trinástimi kategóriami, Farkle, Liar's Dice a ďalšie. Nástroj vie meniť počet kociek, stien a prehodení, ale tu sa uvádza len päť kociek, šesť stien a dve prehodenia.
  • Ľudí. Čo hráči skutočne robia, ako sa mýlia a ako ich tabuľka láka alebo odrádza, sa nemeralo a výpočet o tom nič nehovorí.
  • Všetky možné tabuľky. Deväť ručne vybraných nie je vyčerpávajúce a výsledok závisí od tabuľky, ako je vidno vyššie.
  • Presnosť čísel. Počíta sa s číslami s pohyblivou desatinnou čiarkou, nie so zlomkami; rozdiel je rádovo 10⁻¹⁵ a v tabuľkách sa neukáže.
  • Kritérium (25 a 5 b. b.) je návrh z článku o kockách v hrách a tu sa použilo na iné meranie, než na ktoré bolo písané.

Čo si z toho odnášam

  • Odpoveď na otázku „je to hlboké?“ je číslo, nie dojem. Optimum, pravidlo a náhoda sa dajú vypočítať skôr, než vznikne prvý riadok hry.
  • Odpoveď závisí od pravidiel, ktoré sa nemerali. Rovnaké kocky s inou tabuľkou dávajú inú hĺbku.
  • Meranie treba vedieť zopakovať. Prvé meranie z októbra sa zopakovať nedá, lebo sa nezachovala jeho tabuľka. Preto sú tu tabuľky aj kód celé.

Zdroje a poznámky

  • Kritérium a prvé meranie: Od krčmy po Knucklebones, oddiel o hĺbke.
  • Číslo zvonku (päťka za tri hody): riešenia úloh o hre Yahtzee, Cornell University, kurz pravdepodobnosti 2006 – 2007 (úloha 8: 0,046029, „4,6 %“) a zadanie úloh. Strana pri úlohe 7 (cieľ sa po prvom hode nemení) uvádza 0,045211, čo nesedí s jej vlastnými číslami; uzavretý vzorec dáva 0,045294. V nástroji sa použilo číslo z úlohy 8, ktoré sedí.
  • Rozhodnutie o kasíne a pravidlá portálov: pracovné dokumenty hry (ROADMAP, kapitola 12; dokument o distribúcii, koncept z 18. 10. 2026). Nie sú verejné; čo z nich vyplýva, je v oddiele vyššie.
  • Tabuľky a nástroj: node tools/dice-poker/dice-poker.js (všetky tabuľky; --table B, --payouts 10,6,4,3,2,1,0.5, --rerolls 2, --diff) a node tools/dice-poker/verify.js (hranie, milión rúk, semienko 20261105). Zmerané 5. 11. 2026.
  • Nenašlo sa alebo neoverené: pôvodná tabuľka z prvého merania; pravidlá a výplaty kockového pokra v Zaklínačovi; skutočné kasínové tabuľky pre kockový poker (tabuľky F až H sú príklady vymyslené tak, aby mali návratnosť 92 až 96 %, nie zdokumentované tabuľky).

Poznámky

  1. Do verzie 0.80.1 z 1. novembra 2026 sa Avatar volal Hero Dice (pozri Z Hero Dice na Avatar (pripravovaný článok č. 39)). ↩︎