Vous et moi décidons de jouer à un jeu où nous lançons à tour de rôle une pièce. Le premier joueur à retourner 10 têtes au total remporte la partie. Naturellement, il y a un débat sur qui devrait aller en premier.
Les simulations de ce jeu montrent que le joueur qui retourne en premier gagne 6% de plus que le joueur qui retourne en deuxième (le premier joueur gagne environ 53% du temps). Je suis intéressé par la modélisation analytique.
Ce n'est pas une variable aléatoire binomiale, car il n'y a pas de nombre fixe d'essais (retournez jusqu'à ce que quelqu'un obtienne 10 têtes). Comment puis-je modéliser cela? Est-ce la distribution binomiale négative?
Afin de pouvoir recréer mes résultats, voici mon code 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
Demetri Pananos
la source
la source
Réponses:
La distribution du nombre de queues avant d' atteindre la tête est binomiale négative avec les paramètres 10 et une / deux . Soit f la fonction de probabilité et G la fonction de survie: pour chaque n ≥ 0 , f ( n ) est la chance du joueur d'avoir n queues avant 10 têtes et G ( n10 10 1/2 f G n≥0 f(n) n 10 est la chance du joueur d'avoir n ou plusieurs queues avant 10 têtes.G(n) n 10
Parce que les joueurs roulent indépendamment, la chance que le premier joueur gagne en roulant exactement queues est obtenue en multipliant cette chance par la chance que le deuxième joueur roule n ou plusieurs queues, égal à f ( n ) G ( n ) .n n f(n)G(n)
La somme de tous les possibles donne au premier joueur des chances de gagnern
C'est environ plus que la moitié du temps.3%
En général, remplacer par tout entier positif m , la réponse peut être donnée en fonction d'une fonction hypergéométrique: elle est égale à10 m
Lorsque vous utilisez une pièce biaisée avec une chance de têtes, cela se généralise pourp
Voici une0.5325 −0.843 , ce qui est une différence insignifiante.
R
simulation d'un million de ces jeux. Il rapporte une estimation de . Un test d'hypothèse binomiale pour le comparer au résultat théorique a un score Z de - 0,843la source
Nous pouvons modéliser le jeu comme ceci:
L'écart dans les taux de gain est doncPr(X=Y)=∑kPr(X=k,Y=k)=∑kPr(X=k)2.
Comme vous le soupçonniez,X (et Y ) sont distribués essentiellement selon une distribution binomiale négative. Les notations varient, mais dans le paramétrage de Wikipedia , nous avons les têtes comme un "échec" et les queues comme un "succès"; nous avons besoin de r=10 "échecs" (têtes) avant l'arrêt de l'expérience, et probabilité de réussite p=12 . Alors le nombre de "succès", qui estX−10 , aPr(X−10=k)=(k+9k)2−10−k,
et la probabilité de collision est
Pr(X=Y)=∑k=0∞(k+9k)22−2k−20,
ce que Mathematica nous dit utilement est764995251162261467≈6.6% .
Ainsi, le taux de victoire du joueur B estPr(Y>X)≈46.7% , et le joueur A est 6193804961162261467≈53.3% .
la source
LetEij be the event that the player on roll flips i heads before the other player flips j heads, and let X be the first two flips having sample space {hh,ht,th,tt} where h means heads and t tails, and let pij≡Pr(Eij) .
Thenpij=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.
la source