Мы с тобой решили сыграть в игру, в которой мы по очереди подбрасываем монету. Первый игрок, который перевернет 10 голов, выигрывает игру. Естественно, есть спор о том, кто должен идти первым.
Моделирование этой игры показывает, что игрок, который переворачивает первый, выигрывает на 6% больше, чем игрок, который переворачивает второй (первый игрок выигрывает примерно в 53% времени). Я заинтересован в моделировании этого аналитически.
Это не биноминальная случайная величина, так как не существует фиксированного количества испытаний (переворачивайте, пока кто-то не получит 10 голов). Как я могу смоделировать это? Это отрицательное биномиальное распределение?
Чтобы восстановить мои результаты, вот мой код на Python:
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)
probability
python
binomial
negative-binomial
Димитрий Пананос
источник
источник
Ответы:
Распределение числа хвостов до достижения головок является отрицательным биномиальным с параметрами 10 и 1 / 2 . Пусть F есть функция вероятности и G функция выживания: для каждого п ≥ 0 , ф ( п ) есть шанс игрока из п хвостов перед тем10 10 1/2 f G n≥0 f(n) n голов и G ( п ) есть шанс игрока из русских или более хвостовпрежде чем 10 голов.10 G(n) n 10
Поскольку игроки бросают независимо, шанс того, что первый игрок выиграет с броском ровноn хвостов, получается умножением этого шанса на шанс того, что второй игрок бросит или более хвостов, равный f ( n ) G ( n ) .n f(n)G(n)
Суммирование по всем возможным дает шансы на победу первого игрока какn
Это примерно на больше, чем в половине случаев.3%
В общем случае, заменяя на любое положительное целое число m , ответ можно дать в терминах гипергеометрической функции: он равен10 m
При использовании смещенной монеты с вероятностью голов, это обобщаетp
Вот0.5325 . Тест биномиальной гипотезы сравнить его с теоретическим результатом имеет Z-балл , что является незначительным различием.−0.843
R
симуляция миллиона таких игр. Он сообщает, что оценкаисточник
Мы можем смоделировать игру так:
Разрыв в показателях выигрыша, таким образом ,Pr(X=Y)=∑kPr(X=k,Y=k)=∑kPr(X=k)2.
Как вы подозревали,X (и Y ) распределены по существу в соответствии с отрицательным биномиальным распределением. Обозначения для этого различаются, но в параметризации Википедии мы имеем головы как «провал» и хвосты как «успех»; нам нужно r=10 «неудач» (голов) до того, как эксперимент будет остановлен, а вероятность успеха p=12 . Тогда число «успехов», которое составляетX−10 , имеетPr(X−10=k)=(k+9k)2−10−k,
и вероятность столкновения равна
Pr(X=Y)=∑k=0∞(k+9k)22−2k−20,
что Mathematica сообщает нам,764995251162261467≈6.6% .
Таким образом, выигрыш игрока B составляетPr(Y>X)≈46.7% , а игрока A - 6193804961162261467≈53.3% .
источник
ПустьEij будет событием, когда игрок при броске переворачивает мои головы до того, как другой игрок перевернет j голов, и пусть X будет первыми двумя переворотами, имеющими пробное пространство {hh,ht,th,tt} где h означает головы и т хвосты, и пусть pij≡Pr(Eij) .
Тогдаpij=Pr(Ei−1j−1|X=hh)∗Pr(X=hh)+Pr(Ei−1j|X=ht)∗Pr(X=ht)+Pr(Eij−1|X=th)∗Pr(X=th)+Pr(Eij|X=tt)∗Pr(X=tt)
Assuming a standard coinPr(X=∗)=1/4 means that pij=1/4∗[pi−1j−1+pi−1j+pij−1+pij]
solving forpij , =1/3∗[pi−1j−1+pi−1j+pij−1]
Butp0j=p00=1 and pi0=0 , implying that the recursion fully terminates. However, a direct naive recursive implementation will yield poor performance because the branches intersect.
An efficient implementation will have complexityO(i∗j) and memory complexity O(min(i,j)) . Here's a simple fold implemented in Haskell:
UPDATE: Someone in the comments above asked whether one was suppose to roll 10 heads in a row or not. So letEkl be the event that the player on roll flips i heads in a row before the other player flips i heads in a row, given that they already flipped k and l consecutive heads respectively.
Proceeding as before above, but this time conditioning on the first flip only,pk,l=1−1/2∗[pl,k+1+pl,0] where pil=pii=1,pki=0
This is a linear system withi2 unknowns and one unique solution.
To convert it into an iterative scheme, simply add an iterate numbern and a sensitivity factor ϵ :
Chooseϵ and pk,l,0 wisely and run the iteration for a few steps and monitor the correction term.
источник