De dobbelsteen is geworpen

\(5\) gelijke getallen resulteren in een slag. Hoe waarschijnlijk dit is, hangt echter af van wat je als een poging telt: een enkele worp met \(5\) dobbelstenen of een volledige beurt waarin je de dobbelstenen bij elkaar blijft zoeken en ze tot \(2\) keer opnieuw gooit. Hier gebruiken we \(5\) eerlijke dobbelstenen met de getallen \(1\) tot en met \(6\) en onafhankelijke resultaten. Elke truc telt als een succes; de waarschijnlijkheid waarnaar u op zoek bent, is niet beperkt tot een specifiek aantal punten, zoals \(6\) .


Volgens de spelinstructies kun je voor elke extra worp opnieuw beslissen welke dobbelstenen blijven liggen. Ons enige doel is een truc, niet de beste totaalscore in een wedstrijd. Een enkele worp heeft \(6^5=7776\) even waarschijnlijke resultaten bij het differentiëren van de dobbelstenen. Hiervan toont \(6\) hetzelfde nummer op alle dobbelstenen. De kans is dus \(\frac{6}{7776}=\frac{1}{1296}\) . Zodra een slag is bereikt, beëindigt u de zet; In totaal zijn maximaal \(3\) worpen toegestaan.

$$p_1=\frac{6}{6^5}=\frac{1}{1296}\approx0{,}07716\%.$$

De meest triviale strategie is ook de beste: als je de kans wilt maximaliseren, behoud je de grootste groep identieke getallen. Het doelnummer kan ook veranderen: Van \((2,2,3,4,5)\) houd je eerst de twee \(2\) . Als de volgende worp \((6,6,6)\) oplevert, behoudt u deze groep en gooit u de twee \(2\) opnieuw. De laatste kans neemt toe van \(\frac{1}{216}\) naar \(\frac{1}{36}\) . En last but not least, laten we aannemen: een gimmick beëindigt de aflevering onmiddellijk; verdere nesten worden weggelaten.

De eenvoudigste manier om de berekening uit te voeren is door met de laatste worp te beginnen. Als \(4\) van dezelfde dobbelstenen al beschikbaar zijn, hoeven alleen de overgebleven dobbelstenen te passen: de kans is \(\frac{1}{6}\) . Als \(3\) dezelfde dobbelstenen zijn, moeten de andere twee het dobbelsteennummer weergeven. Omdat hun uitkomsten onafhankelijk zijn, vermenigvuldigt u de kansen en krijgt u \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . Aan de andere kant, als je tegelijkertijd verschillende getallen vasthoudt, kan er geen probleem zijn met de laatste worp. Het gaat dus niet alleen om het aantal, maar ook om wat u behoudt.

Met \(2\) resterende worpen krijgt elke ontbrekende dobbelsteen nog een kans. Als \(4\) dobbelstenen hetzelfde zijn, is één slag met de overgebleven dobbelstenen voldoende. De tellerberekening is hier korter: hij mist het doelgetal bij beide pogingen met waarschijnlijkheid \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . De kans op succes is daarom \(1-\frac{25}{36}=\frac{11}{36}\) . Voor kleinere groepen tel je alle mogelijke gevolgen van de worpen en laat je het doelwit veranderen. Bij de beste stopkeuze ontstaan ​​de volgende kansen:

Grootste groepResultaten in het \(1.\) nestKans met \(2\) resterende worpen
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

De lijnen komen niet met dezelfde frequentie voor. Er wordt bijvoorbeeld een grootste groep \(2\) dobbelstenen gemaakt in \(5400\) van de \(7776\) mogelijke eerste worpen. Deze omvatten een enkel paar en \(2\) paren; Als er een gelijkspel is, kies je er één. We vermenigvuldigen elke kans aan de rechterkant met het getal in het midden en delen de som door \(7776\) . Dit retourneert \(p_3\) ; voor \(p_2\) gebruik je alleen een restworp. Voor de eerste worp met optimale stopkeuze gelden de volgende waarden: \(p_2\) voor maximaal \(2\) en \(p_3\) voor maximaal \(3\) worpen:

$$p_2=\frac{221}{17496}\approx1{,}26315\%.$$

$$p_3=\frac{347897}{7558272}\approx4{,}60286425\%.$$

Of het behouden van de grootste groep echt het beste is, kan volledig worden getest. Het volgende PHP-script houdt rekening met elke mogelijke selectie, inclusief gemengde getallen of helemaal geen dobbelstenen. Het begint aan het einde van de beurt, berekent vervolgens de beste beslissingen voor de resterende \(1\) en \(2\) resterende worpen en berekent uiteindelijk het gemiddelde over de eerste worp. Dezelfde patronen worden hergebruikt om de rekening klein te houden. Alle vergelijkingen worden gemaakt met gehele getallen; alleen de procentuele weergave is afgerond:

<?php

declare(strict_types=1);

if (PHP_INT_SIZE < 8) {
    throw new RuntimeException('64-Bit-PHP erforderlich.');
}

function combinations(array $limits): array
{
    $result = [[]];
    foreach ($limits as $limit) {
        $next = [];
        foreach ($result as $prefix) {
            for ($i = 0; $i <= $limit; $i++) {
                $next[] = [...$prefix, $i];
            }
        }
        $result = $next;
    }
    return $result;
}

function outcomes(int $number): array
{
    static $cache = [];
    if (isset($cache[$number])) {
        return $cache[$number];
    }
    $result = [];
    foreach (combinations(array_fill(0, $number, value: 5)) as $dice) {
        $counts = array_fill(0, count: 6, value: 0);
        foreach ($dice as $face) {
            $counts[$face]++;
        }
        $key = implode(',', $counts);
        $result[$key] = ($result[$key] ?? 0) + 1;
    }
    return $cache[$number] = $result;
}

function pattern(array $counts): string
{
    rsort($counts);
    return implode(',', $counts);
}

$states = [];
$values = [];
foreach (outcomes(5) as $key => $count) {
    $counts = array_map('intval', explode(',', $key));
    rsort($counts);
    $states[pattern($counts)] = $counts;
    $values[pattern($counts)] = (int) ($counts[0] === 5);
}

// Gemeinsamer Nenner: 6^(5 * verbleibende Würfe).
for ($remaining = 1; $remaining <= 2; $remaining++) {
    $next = [];
    foreach ($states as $key => $counts) {
        $best = 0;
        foreach (combinations($counts) as $held) {
            $number = 5 - array_sum($held);
            $total = 0;
            foreach (outcomes($number) as $rolled => $count) {
                $after = array_map('intval', explode(',', $rolled));
                foreach ($held as $face => $amount) {
                    $after[$face] += $amount;
                }
                $total += $count * $values[pattern($after)];
            }
            $best = max($best, $total * (6 ** (5 - $number)));
        }
        $next[$key] = $best;
    }
    $values = $next;
}

$numerator = 0;
$denominator = 6 ** 15;
foreach (outcomes(5) as $key => $count) {
    $numerator += $count * $values[pattern(array_map('intval', explode(',', $key)))];
}
[$a, $b] = [$numerator, $denominator];
while ($b !== 0) {
    [$a, $b] = [$b, $a % $b];
}
echo intdiv($numerator, $a), '/', intdiv($denominator, $a), PHP_EOL;
printf("%.10f%%\n", (100 * $numerator) / $denominator);

Rond \(4{,}60\%\) betekent: Zelfs met de beste keuze blijft een probleem zeldzaam. Als je alles elke keer opnieuw gooit, is de kans op maximaal \(3\) pogingen slechts ongeveer \(0{,}23130\%\) . Als je de dobbelstenen blijft matchen, maar je houdt aan het doelgetal dat je na de \(1.\) worp hebt gekozen, bereik je ongeveer \(4{,}52941\%\) . Overstappen naar de grotere groep brengt dus een klein extra voordeel met zich mee. Of het nu gaat om wiskundige strategie of puur onderbuikgevoel: Kniffel is een tijdloos, vermakelijk en vooral vermakelijk bordspel.

Terug