Як я можу моделювати фліпси до досягнення N успіхів?


17

Ми з вами вирішили пограти в гру, де ми по черзі гортаємо монету. Перший гравець, який перевернув 10 головок, виграє гру. Природно, є аргумент про те, хто повинен йти першим.

Симулятори цієї гри показують, що гравець, який перевертає спочатку, виграє на 6% більше, ніж той, хто перевертає другий (перший гравець виграє приблизно 53% часу). Мені цікаво моделювати це аналітично.

Це не біноміальна випадкова величина, оскільки немає фіксованої кількості випробувань (гортайте, поки хтось не отримає 10 головок). Як я можу це моделювати? Це негативний біноміальний розподіл?


Щоб мати можливість відтворити мої результати, ось мій пітон:

import numpy as np
from numba import jit


@jit
def sim(N):

    P1_wins = 0
    P2_wins = 0

    for i in range(N):

        P1_heads = 0
        P2_heads = 0
        while True:

            P1_heads += np.random.randint(0,2)

            if P1_heads == 10:
                P1_wins+=1
                break

            P2_heads+= np.random.randint(0,2)
            if P2_heads==10:
                P2_wins+=1
                break
    return P1_wins/N, P2_wins/N


a,b = sim(1000000)

3
Коли ви кидаєте монету до невдач а потім дивитесь на розподіл кількості успіхів, які трапляються до закінчення такого експерименту, то це за визначенням негативний біноміальний розподіл . r
Тім

2
Я не можу відтворити значення 2%. Я вважаю, що перший гравець виграє часу. 53.290977425133892%
whuber

1
@whuber так, я вважаю, ти маєш рацію. Я запускав своє моделювання менше разів, ніж повинен був. Мої результати співмірні з вашими.
Деметрі Пананос

1
Якщо один виграє 53% часу, інший має становити 47%, то чи не слід в описі "перший гравець виграє на 6% більше, ніж другий гравець", або "на 3% більше, ніж у половині часу"? Не (як це зараз говориться) "на 3% більше, ніж той гравець, який другий перевертає"
JesseM

3
Ви отримали це запитання від FiveThirtyEight Riddler Express ?
чотиридцять

Відповіді:


19

Розподіл кількості хвостів перед досягненням голів - негативний двочлен з параметрами і . Нехай - функція ймовірності, а - функція виживання: для кожного , - шанс гравця хвостів до голів, а - шанс гравця на або більше хвостів до голів .10 1 / 2 F G п 0 е ( п ) п 10 G ( п ) п 1010101/2fGn0f(n)n10G(n)n10

Оскільки гравці котяться незалежно, шанс першого гравця виграє, прокатуючи рівно хвостиків, отримується шляхом множення цього шансу на випадковість, коли другий гравець прокатить або більше хвостів, рівний .n f ( n ) G ( n )nnf(n)G(n)

Підсумовування всіх можливих дає шанси на перемогу першого гравця якn

n=0f(n)G(n)53.290977425133892%.

Це приблизно на більше половини часу.3%

Загалом, замінюючи будь-яким натуральним числом , відповідь можна дати з точки зору гіпергеометричної функції: вона дорівнюєм10m

1/2+22m12F1(m,m,1,1/4).

При використанні упередженої монети з шансом голів це узагальнюється доp

12+12(p2m)2F1(m,m,1,(1p)2).

Ось Rмоделювання мільйона таких ігор. Він повідомляє про оцінку . Біноміальний тест гіпотези для порівняння його з теоретичним результатом має Z-бал , що є незначною різницею.- 0,8430.53250.843

n.sim <- 1e6
set.seed(17)
xy <- matrix(rnbinom(2*n.sim, 10, 1/2), nrow=2)
p <- mean(xy[1,] <= xy[2,])
cat("Estimate:", signif(p, 4), 
    "Z-score:", signif((p - 0.532909774) / sqrt(p*(1-p)) * sqrt(n.sim), 3))

1
Як зауваження, яке може бути не очевидним на перший погляд, наші відповіді чисельно узгоджуються: (.53290977425133892 - .5) * 2 по суті є саме такою ймовірністю, яку я дав.
Дугал

1
@Dougal Дякую, що вказали на це. Я переглянув вашу відповідь, побачив , і знаючи, що вона не узгоджується з формою відповіді, яку вимагають у питанні, я не визнала, що ви правильно зробили обчислення. Загалом, це гарна ідея створити відповідь на будь-яке запитання у формі, яка запитується, якщо це можливо: це дозволяє легко розпізнати, коли це правильно та легко порівняти відповіді. 6.6%
whuber

1
@whuber Я відповідав на фразу "Симуляції цієї гри показують, що гравець, який перевертає спочатку, виграє на 2% (EDIT: на 3% більше після імітації більшої кількості ігор) більше, ніж той гравець, який другий гортає". Я б інтерпретував "виграш на 2% більше" як ; правильне значення дійсно становить 6,6%. Я не впевнений у способі інтерпретації "виграє на 2% більше", означає "виграє 52% часу", хоча, мабуть, саме це було призначено. Pr(A wins)Pr(B wins)=2%
Дугал

@Dougal Я погоджуюся, що опис ОП є заплутаним і навіть неправильним. Однак код і його результат дали зрозуміти, що він мав на увазі "на 3% більше половини часу", а не на "3% більше, ніж інший гравець".
whuber

1
@whuber Погодився. На жаль, я відповів на питання ще до того, як код був розміщений, і сам не запустив симуляцію. :)
Дугал

15

Ми можемо моделювати гру так:

  • Гравець A кілька разів перегортає монету, отримуючи результати поки не отримає 10 головок. Нехай індекс часу з 10 - х голів випадкової величини .A1,A2,X
  • Гравець B робить те саме. Нехай індекс часу з 10 - х голів випадкової величини , яка є н.о.р. копії .YX
  • Якщо , гравець A виграє; інакше Гравець В виграє. Тобто,XY
    Pr(A wins)=Pr(XY)=Pr(X>Y)+Pr(X=Y)Pr(B wins)=Pr(Y>X)=Pr(X>Y).

Таким чином, розрив у коефіцієнтах виграшу становить

Pr(X=Y)=kPr(X=k,Y=k)=kPr(X=k)2.

Як ви підозрювали, (і ) розподіляються по суті відповідно до негативного біноміального розподілу. Позначення для цього різняться, але в параметризації Вікіпедії ми маємо голови як "провал", а хвости як "успіх"; нам потрібно "провалів" (голов) перед припиненням експерименту, і ймовірність успіху . Тоді число "успіхів", яке , має і ймовірність зіткнення дорівнює що Mathematica корисно говорить нам, що цеXYr=10p=12X10

Pr(X10=k)=(k+9k)210k,
Pr(X=Y)=k=0(k+9k)222k20,
7649952511622614676.6%.

Таким чином, коефіцієнт виграшу гравця B становить , а гравець A - .Pr(Y>X)46.7%619380496116226146753.3%


голови не повинні бути в ряду, всього 10. Я припускаю, що це ви і фіксуєте.
Деметрі Пананос

6
(+1) Мені подобається такий підхід краще, ніж той, який я розмістив, тому що він обчислювально простіший: він вимагає лише функції ймовірності, яка має просте вираження в біноміальних коефіцієнтах.
whuber

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

1

Нехай є подією, коли гравець у рулоні перевертає i головує перед тим, як інший гравець перевертає j голови, і нехай - перші два фліпи, що мають пробний простір де h означає головки і t хвости, і нехай .EijX{hh,ht,th,tt}pijPr(Eij)

Тоді pij=Pr(Ei1j1|X=hh)Pr(X=hh)+Pr(Ei1j|X=ht)Pr(X=ht)+Pr(Eij1|X=th)Pr(X=th)+Pr(Eij|X=tt)Pr(X=tt)

Припустимо, що стандартна монета означає, щоPr(X=)=1/4pij=1/4[pi1j1+pi1j+pij1+pij]

рішення для ,pij=1/3[pi1j1+pi1j+pij1]

Але і , маючи на увазі, що рекурсія повністю припиняється. Однак пряма наївна рекурсивна реалізація дасть низьку ефективність, оскільки гілки перетинаються.p0j=p00=1pi0=0

Ефективна реалізація матиме складність і складність пам'яті . Ось простий склад, реалізований у Haskell:O(ij)O(min(i,j))

Prelude> let p i j = last. head. drop j $ iterate ((1:).(f 1)) start where
  start = 1 : replicate i 0;
  f c v = case v of (a:[]) -> [];
                    (a:b:rest) -> sum : f sum (b:rest) where
                     sum = (a+b+c)/3 
Prelude> p 0 0
1.0
Prelude> p 1 0
0.0
Prelude> p 10 10
0.5329097742513388
Prelude> 

ОНОВЛЕННЯ: Хтось у коментарях вище запитував, чи варто припускати, щоб згорнути 10 головок поспіль чи ні. Тож нехай стане подією, коли гравець, що перебуває в рулоні, перевертає i головує поспіль, перш ніж інший гравець перевертає голову поспіль, враховуючи, що вони вже перевернули відповідно k та l послідовно голови.Ekl

Продовжується як раніше, але цього разу обумовлюючи лише перший переворот, деpk,l=11/2[pl,k+1+pl,0]pil=pii=1,pki=0

Це лінійна система з невідомими та одним унікальним рішенням.i2

Щоб перетворити його в ітераційну схему, просто додайте ітераційне число n та коефіцієнт чутливості ϵ :

pk,l,n+1=1/(1+ϵ)[ϵpk,l,n+11/2(pl,k+1,n+pl,0,n)]

Виберіть ϵ і pk,l,0 розумом і запустіть ітерацію на кілька кроків і стежте за терміном виправлення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.