Як часто доводиться катати 6-сторонній штамп, щоб хоча б раз отримати кожне число?


41

Я щойно грав у гру з моїми дітьми, яка в основному зводиться до того: хто хоч раз перекочує кожне число на 6-сторонній матриці, той виграє.

Я виграв, врешті-решт, а інші закінчили на 1-2 витки пізніше. Тепер мені цікаво: яке очікування тривалості гри?

Я знаю, що очікування кількості рулонів, поки ви не потрапите на певне число, n=1n16(56)n1=6.

Однак у мене є два питання:

  1. Скільки разів вам доводиться катати шестигранну штамп, доки не отримаєте кожне число хоча б раз?
  2. Серед чотирьох незалежних випробувань (тобто з чотирма гравцями), яке очікування максимальної кількості роликів потрібно? [зауважте: це максимум, а не мінімум, тому що у їхньому віці це скоріше про закінчення, ніж про те, щоб першими туди дітись]

Я можу змоделювати результат, але мені цікаво, як би я пішов про його обчислення аналітично.


Ось моделювання Монте-Карло в Matlab

mx=zeros(1000000,1);
for i=1:1000000,
   %# assume it's never going to take us >100 rolls
   r=randi(6,100,1);
   %# since R2013a, unique returns the first occurrence
   %# for earlier versions, take the minimum of x
   %# and subtract it from the total array length
   [~,x]=unique(r); 
   mx(i,1)=max(x);
end

%# make sure we haven't violated an assumption
assert(numel(x)==6)

%# find the expected value for the coupon collector problem
expectationForOneRun = mean(mx)

%# find the expected number of rolls as a maximum of four independent players
maxExpectationForFourRuns = mean( max( reshape( mx, 4, []), [], 1) )

expectationForOneRun =
   14.7014 (SEM 0.006)

maxExpectationForFourRuns =
   21.4815 (SEM 0.01)

11
Проблема колекціонера купонів також бачить - googling надасть вам ще багато звернень та більше інформації. Спробуйте також пошукати це на сайті stats.SE .
Glen_b

1
@Glen_b: Дякую, я не знав цього імені!
Йонас

1
@whuber: Я не впевнений, що це питання слід було закрити. Він хоче, щоб очікувався мінімальний час удару з чотирьох випробувань. Я збирався виправити свою відповідь на рішення щодо динамічного програмування.
Ніл Г

2
@whuber: Я відредагую свій пост, щоб уточнити
Йонас

Відповіді:


22

Оскільки вимагається "повністю аналітичний підхід", ось точне рішення. Він також пропонує альтернативний підхід до вирішення питання на ймовірності намалювати чорну кулю в наборі чорно-білих куль із змішаними умовами заміни .


Кількість ходів у грі, X , може бути змодельоване як сума шість незалежних реалізацій геометричного (p) змінних з вірогідністю p=1,5/6,4/6,3/6,2/6,1/6 , кожен з них зміщений на 1 (оскільки геометрична змінна налічує лише рулони, що передуютьуспіх, і ми також повинні рахувати ті списки, за якими спостерігалися успіхи). Обчислюючи геометричний розподіл, ми отримаємо відповіді, які на 6 менше, ніж потрібні, і тому треба обов’язково додати 6 наприкінці.

Виробляє функція ймовірності (PGF) такої геометричної змінної з параметром p є

f(z,p)=p1(1p)z.

Тому pgf для суми цих шести змінних є

g(z)=i=16f(z,i/6)=6z4(5 2z+5+10 3z+45 4z+4+5z+4+5).

(Продукт можна обчислити в цьому закритому вигляді, розділивши його на п'ять доданків за допомогою часткових дробів.)

gz

F(z)=6z4((1) 1z+4+(5) 2z+4(10) 3z+4+(10) 4z+4(5) 5z+4+(1) 6z+4).

(Я написав цей вираз у формі, яка пропонує альтернативне виведення через Принцип включення-виключення.)

З цього ми отримуємо очікувану кількість рухів у грі (відповідаючи на перше запитання) як

E(6+X)=6+i=1(1F(i))=14710.

mXF(z)mm=4

6+i=1(1F(i)4)21.4820363.

6.77108.6

Малюнок

18500.3%


Цей метод рішення був натхненний спостереженням, що суми геометричних змінних є сумішами (можливо, з негативними вагами) геометричних змінних, що мають однакові параметри. Аналогічна залежність є серед змінних Gamma (з різними параметрами швидкості). Прошу вибачення за те, що я працював у Mathematica, але я впевнений, що Matlab теж може виконати ці розрахунки :-).
whuber

2
Це відповідь, на яку я сподівався. Дуже дякую! Думаю, я мав би змогу підрахувати числові результати в Matlab :)
Йонас

f(z,p)=p1(1p)zi=16f(z,i/6)F(z)g(z)

1
f(z,p)

@MartijnWeterings Дякую - я вважаю, що це більш точний і звичайний термін. (Ви можете сказати, що я схильний вважати pmf та pgf майже як одне і те ж, через довгу звичку використовувати функції генерації.) Я зміню термінологію в цій публікації.
whuber

13

{0,,6}ii6ii+16i6

i=0566i=14.7

(6,6,6,6)jiTiijpipijij. Ви можете виявити час та ймовірності враження за допомогою динамічного програмування. Це не так складно, оскільки існує порядок переходу, щоб заповнити вражаючі часи та ймовірності. Наприклад, для двох гинуть: спочатку обчислюють T і p для (0,0), потім для (1,0), потім (1, 1), (2, 0), потім (2, 1) тощо.

На Python:

import numpy as np
import itertools as it
from tools.decorator import memoized  # A standard memoization decorator

SIDES = 6

@memoized
def get_t_and_p(state):
    if all(s == 0 for s in state):
        return 0, 1.0
    n = len(state)
    choices = [[s - 1, s] if s > 0 else [s]
               for s in state]
    ts = []
    ps = []
    for last_state in it.product(*choices):
        if last_state == state:
            continue
        last_t, last_p = get_t_and_p(tuple(sorted(last_state)))
        if last_p == 0.0:
            continue
        transition_p = 1.0
        stay_p = 1.0
        for ls, s in zip(last_state, state):
            if ls < s:
                transition_p *= (SIDES - ls) / SIDES
            else:
                transition_p *= ls / SIDES
            stay_p *= ls / SIDES
        if transition_p == 0.0:
            continue
        transition_time = 1 / (1 - stay_p)
        ts.append(last_t + transition_time)
        ps.append(last_p * transition_p / (1 - stay_p))
    if len(ts) == 0:
        return 0, 0.0
    t = np.average(ts, weights=ps)
    p = sum(ps)
    return t, p

print(get_t_and_p((SIDES,) * 4)[0])

1
Ви пропустили очікувану максимальну кількість рулонів у чотирьох незалежних повторах гри.
ймовірністьлогічний

Ах, я щойно це помітив. Я думаю, ти маєш на увазі мінімум, але так.
Ніл Г

@NeilG: Я фактично маю на увазі максимум (див. Моє оновлене запитання), хоча я припускаю, що стратегія однакова для min та max. Чи можете ви детально розробити стратегію динамічного програмування?
Йонас

@Jonas: оновлено максимум. У мене дуже багато роботи, але я можу пізніше це кодувати для вас.
Ніл Г

2
@NeilG: Дякую Я сподівався отримати цілком аналітичний підхід, але код DP також є повчальним.
Йонас

6

Швидкий і брудний підрахунок Монте-Карло в R тривалості гри для 1 гравця:

N = 1e5
sample_length = function(n) { # random game length
    x = numeric(0)
    while(length(unique(x)) < n) x[length(x)+1] = sample(1:n,1)
    return(length(x))
}
game_lengths = replicate(N, sample_length(6))

μ^=14.684σ^=6.24[14.645,14.722]

Щоб визначити тривалість гри з чотирма гравцями, ми можемо згрупувати зразки на четвереньках і взяти середню мінімальну довжину для кожної групи (ви запитували про максимум, але я припускаю, що ви мали на увазі мінімум, оскільки я прочитав це, гра закінчується, коли комусь вдається отримати всі номери):

grouped_lengths = matrix(game_lengths, ncol=4)
min_lengths = apply(grouped_lengths, 1, min)

μ^=9.44σ^=2.26[9.411,9.468]


1
Я дійшов до дуже подібного результату за допомогою симуляції Matlab, але мені було цікаво, як я вирішуватиму це аналітично. Крім того, оскільки я граю зі своїми дітьми, вони всі хочуть закінчити гру, незалежно від того, хто виграє, тому я хочу запитати про максимум.
Йонас

5

m

T1=6
Tm=1+6m6Tm+m6Tm1

m1

  • Tm6m6m6
  • Tm1mm6

14.7


Ti=Ti1+66i+1

1
Так вибачте, що зробив помилку, я її виправляю
ThePawn

Сподіваюся, ви не заперечуєте, що я додав відповідь. 14.7 є правильним, але відношення рецидивів досі є помилковими…
Ніл Г

Немає проблем, слід було бути обережним перший раз :). Ваша відповідь чудова.
Пола

5

Просте та інтуїтивне пояснення до першого питання:

Спочатку потрібно прокрутити будь-яке число. Це легко, завжди буде потрібно рівно 1 рулон.

5665

4664

3663

І так далі, поки ми успішно не виконаємо наш 6-й ролик:

66+65+64+63+62+61=14.7 rolls

Ця відповідь схожа на відповідь Ніла Г., лише без ланцюга Маркова.


1

функція щільності ймовірності (або дискретний еквівалент) для отримання наступного нового числа:

f = сума (p * (1 - p) ^ (i - 1), i = 1 .. inf)

де p - ймовірність на один рулон, 1, коли жодне число не прокручено, 5/6 після 1, 4/6 .. до 1/6 для останнього числа

очікуване значення, mu = sum (i * p * (1 - p) ^ (i - 1), i = 1 .. inf), дозволяючи n = i - 1, і виводячи p поза підсумовування,

mu = p * сума ((n + 1) * (1 - p) ^ n, n = 0 .. inf)

mu = p * сума (n (1-p) ^ n, n = 0 .. inf) + p * sum ((1-p) ^ n, n = 0 .. inf) mu = p * (1-p ) / (1-p-1) ^ 2 + p * 1 / (1- (1-p))

mu = p * (1 - p) / p ^ 2 + p / p

mu = (1 - p) / p + p / p

mu = (1 - p + p) / p

mu = 1 / п

Сума очікуваних значень (мс) для ps 1, 5/6, 4/6, 3/6, 2/6 та 1/6 становить 14,7, як повідомлялося раніше, але 1 / p на необхідну кількість є загальним незалежно від розміру штампу

аналогічно ми можемо обчислити стандартне відхилення аналітично

сигма ^ 2 = сума ((i - mu) ^ 2 * p * (1 - p) ^ (i - 1), i = 1 .. inf)

Я пошкодую вам тут алгебру, але сигма ^ 2 = (1-р) / р ^ 2

У випадку 6 сума сигми ^ 2 для кожного кроку становить 38,99 для стандартного відхилення приблизно 6,24, знову ж таки, як імітується


-4

Питання 1 було:

Скільки разів вам доводиться закочувати шестигранну кістку, поки ви не отримаєте кожне число хоча б раз?

Очевидно, що правильна відповідь повинна бути "нескінченною".


6
Це відповіло б на питання "гарантувати з абсолютною впевненістю, щоб отримати кожне число хоча б один раз". На запитання, яке було задано, відповідь - випадкова величина, розподіл якої може бути досить приблизною.
Glen_b
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.