Жребий брошен

\(5\) равные числа приводят к подвоху. Однако вероятность этого зависит от того, что вы считаете попыткой: один бросок \(5\) кубиков или полный ход, в течение которого вы продолжаете совпадать с кубиками и перебрасываете их \(2\) раз. Здесь мы используем \(5\) игральные кости с числами \(1\) до \(6\) и независимыми результатами. Каждый трюк считается успехом; вероятность, которую вы ищете, не ограничивается определенным количеством точек, например \(6\) .


Согласно инструкциям игры , перед каждым дополнительным броском вы можете еще раз решить, какие кубики останутся лежать. Наша единственная цель — какой-то трюк, а не лучший общий результат в игре. Один бросок дает \(6^5=7776\) одинаково вероятные результаты при дифференцировании игральных костей. Из них \(6\) показывают одинаковое число на всех кубиках. Таким образом, вероятность равна \(\frac{6}{7776}=\frac{1}{1296}\) . Как только взятка достигнута, вы заканчиваете ход; Всего разрешено максимум \(3\) бросков.

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

Самая тривиальная стратегия также является и лучшей: если вы хотите максимизировать шанс, вы сохраняете самую большую группу одинаковых чисел. Целевой номер также может измениться: из \((2,2,3,4,5)\) вы сначала сохраняете два \(2\) . Если при следующем броске выпадает \((6,6,6)\) , вы сохраняете эту группу и перебрасываете два \(2\) . Последний шанс увеличивается с \(\frac{1}{216}\) до \(\frac{1}{36}\) . И последнее, но не менее важное: давайте предположим: трюк немедленно завершает эпизод; дальнейшие пометы опускаются.

Самый простой способ произвести расчет — начать с последнего броска. Если \(4\) одних и тех же кубиков уже доступны, только оставшиеся кости должны пройти: шанс равен \(\frac{1}{6}\) . Если \(3\) — одинаковые кубики, на двух других должно быть указано выпавшее число. Поскольку их результаты независимы, умножьте шансы и получите \(\frac{1}{6}\cdot\frac{1}{6}=\frac{1}{36}\) . С другой стороны, если держать одновременно разные цифры, с последним броском проблем быть не может. Так что важно не только количество, но и то, что вы храните.

Если осталось \(2\) бросков, каждый недостающий кубик получает еще один шанс. Если \(4\) кубика одинаковы, одного удара оставшимися кубиками достаточно. Здесь расчет счетчика короче: он не достигает целевого числа в обеих попытках с вероятностью \(\frac{5}{6}\cdot\frac{5}{6}=\frac{25}{36}\) . Таким образом, вероятность успеха равна \(1-\frac{25}{36}=\frac{11}{36}\) . Для небольших групп вы просчитываете все возможные последствия бросков и позволяете изменить цель. Следующие шансы возникают при лучшем выборе стопа:

Самая большая группаРезультаты в \(1.\) пометеШанс при \(2\) оставшихся бросках
\(1\)\(720\)\(\frac{221}{17496}\)
\(2\)\(5400\)\(\frac{113}{3888}\)
\(3\)\(1500\)\(\frac{121}{1296}\)
\(4\)\(150\)\(\frac{11}{36}\)
\(5\)\(6\)\(1\)

Линии встречаются с разной частотой. Например, самая большая группа \(2\) кубиков создается за \(5400\) из \(7776\) возможных первых бросков. К ним относятся одна пара и \(2\) пары; Если есть ничья, вы выбираете один из них. Мы умножаем каждый шанс справа на число в середине и делим сумму на \(7776\) . Это возвращает \(p_3\) ; для \(p_2\) вы используете только бросок остатка. Перед первым броском с оптимальным выбором остановки применяются следующие значения: \(p_2\) для максимума \(2\) и \(p_3\) для максимума \(3\) бросков.:

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

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

Можно полностью проверить, действительно ли лучше держать самую большую группу. Следующий PHP-скрипт рассматривает все возможные варианты, включая смешанные числа или отсутствие кубиков вообще. Он начинается в конце хода, затем вычисляет лучшие решения для \(1\) и \(2\) оставшихся бросков и, наконец, усредняет результаты первого броска. Одни и те же узоры используются повторно, чтобы сохранить небольшой счет. Все сравнения производятся с целыми числами; округляется только процентное значение:

<?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);

Около \(4{,}60\%\) означает: даже при лучшем выборе проблема остается редкой. Если вы каждый раз перебрасываете все, шанс за максимум \(3\) попыток составит всего около \(0{,}23130\%\) . Если вы продолжаете подбирать кубики, но придерживаетесь целевого числа, выбранного после \(1.\) броска, вы достигнете примерно \(4{,}52941\%\) . Таким образом, переход на более крупную группу дает небольшое дополнительное преимущество. Независимо от того, математическая ли это стратегия или чистое интуитивное чувство: Kniffel — вневременная, увлекательная и, прежде всего, увлекательная настольная игра.

Назад