N başarılı olana kadar döndürmeleri nasıl modelleyebilirim?


17

Sen ve ben sırayla bozuk para çeviren bir oyun oynamaya karar veriyoruz. Toplamda 10 kafa çeviren ilk oyuncu oyunu kazanır. Doğal olarak, önce kimin gitmesi gerektiği konusunda bir tartışma var.

Bu oyunun simülasyonları, ilk çeviren oyuncunun ikinci çeviren oyuncudan% 6 daha fazla kazandığını göstermektedir (ilk oyuncu zamanın yaklaşık% 53'ünü kazanır). Bunu analitik olarak modellemekle ilgileniyorum.

Sabit sayıda deneme olmadığı için bu bir binomial rastgele değişken değildir (biri 10 kafa alana kadar çevirin). Bunu nasıl modelleyebilirim? Negatif binom dağılımı mı?


Sonuçlarımı yeniden oluşturabilmek için işte python kodum:

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 başarısız oluncaya kadar bir bozuk para atarsanız ve daha sonra böyle bir deneyi bitirmeden önce gerçekleşen başarı sayısının dağılımına baktığınızda, bu tanım negatif binom dağılımıdır .
Tim

2
% 2 değerini yeniden oluşturamıyorum. Ben ilk oyuncu kazanır bulmak 53.290977425133892% zamanın.
whuber

1
@whuber evet, haklı olduğuna inanıyorum. Simülasyonumu benden daha az çalıştırdım. Sonuçlarım sizinkilerle orantılı.
Demetri Pananos

1
Biri zamanın% 53'ünü kazanırsa, diğeri% 47 olmalıdır, bu yüzden açıklamada "ilk oyuncu ikinci oyuncudan% 6 daha fazla kazanır" veya "yarıdan% 3 daha fazla kazanır" yazılmamalı mı? Değil (şu anda söylediği gibi) "İkinci
çeviren

3
Bu soruyu FiveThirtyEight Riddler Express'ten mi aldın ?
17'de

Yanıtlar:


19

Ulaşmadan önce kuyruk sayısında dağılımı kafaları olan negatif binom parametrelerle 10 ve 1 / 2 . Let f olasılık fonksiyonu ve olmak G hayatta kalma işlevi: her biri için n 0 , f ( n ) oyuncunun şans n kuyrukları önce 10 kafa ve G ( n ) oyuncunun şans n daha önce veya daha fazla kuyrukları 10 kafaları.10101/2fGn0f(n)n10G(n)n10

Oyuncu, bağımsız bir şekilde rulo için, şans tam olarak alındığı, ilk oyuncu kazanç kuyrukları ikinci oyuncu rulo tesadüfen bu şansı çarpılması ile elde edilir , n veya daha fazla kuyrukları, e eşit f ( n ) G ( n ) .nnf(n)G(n)

Mümkün olan tüm üzerinden toplanmak , ilk oyuncunun kazanma şansının

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

Bu, yarıdan yaklaşık % daha fazladır.3%

Genel olarak, herhangi bir pozitif tamsayı m ile değiştirmek , cevap Hipergeometrik fonksiyon açısından verilebilir: eşittir10m

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

Şans eseri olan önyargılı bir para kullanırken , bup

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

İşte Rböyle bir milyon oyunun simülasyonu. Bu bir tahmin raporları . Teorik sonuç ile karşılaştırmak için bir binom hipotezi testinin Z skoru - 0.843'tür , ki bu önemsiz bir farktır.0.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
Just as a note that may not be obvious at a glance, our answers agree numerically: (.53290977425133892 - .5) * 2 is essentially exactly the probability I gave.
Dougal

1
@Dougal Thank you for pointing that out. I looked at your answer, saw the 6.6%, and knowing that it did not agree with the form of the answer requested in the question, I did not recognize that you had computed correctly. In general it's a good idea to frame an answer to any question in the form that is requested, if possible: that makes it easy to recognize when it's correct and easy to compare answers.
whuber

1
@whuber I was responding to the phrase "Simulations of this game show that the player to flips first wins 2% (EDIT: 3% more after simulating more games) more than the player who flips second". I'd interpret "wins 2% more" as Pr(A wins)Pr(B wins)=2%; the correct value is indeed 6.6%. I'm not sure of a way to interpret "wins 2% more" means "wins 52% of the time", though apparently that is what was intended.
Dougal

@Dougal OP'nin açıklamasının kafa karıştırıcı ve hatta yanlış olduğunu kabul ediyorum. Bununla birlikte, kod ve sonucu, "diğer oyuncudan% 3 daha fazla" yerine "zamanın yarısından% 3 daha fazla" anlamına geldiğini açıkça belirtti.
whuber

1
@whuber Kabul etti. Ne yazık ki, kod gönderilmeden önce soruyu yanıtladı ve kendim bir simülasyon çalıştırmadı. :)
Dougal

15

Oyunu şu şekilde modelleyebiliriz:

  • A1,A2, until they get a total of 10 heads. Let the time index of the 10th heads be the random variable X.
  • Player B does the same. Let the time index of the 10th heads be the random variable Y, which is an iid copy of X.
  • If XY, Player A wins; otherwise Player B wins. That is,
    Pr(A wins)=Pr(XY)=Pr(X>Y)+Pr(X=Y)Pr(B wins)=Pr(Y>X)=Pr(X>Y).

The gap in the win rates is thus

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

As you suspected, X (and Y) are distributed essentially according to a negative binomial distribution. Notations for this vary, but in Wikipedia's parameterization, we have heads as a "failure" and tails as a "success"; we need r=10 "failures" (heads) before the experiment is stopped, and success probability p=12. Then the number of "successes," which is X10, has

Pr(X10=k)=(k+9k)210k,
and the collision probability is
Pr(X=Y)=k=0(k+9k)222k20,
which Mathematica helpfully tells us is 7649952511622614676.6%.

Thus Player B's win rate is Pr(Y>X)46.7%, and Player A's is 619380496116226146753.3%.


the heads need not be in a row, just 10 total. I assume that is what you are fixing.
Demetri Pananos

6
(+1) I like this approach better than the one I posted because it is computationally simpler: it requires only the probability function, which has a simple expression in terms of binomial coefficients.
whuber

1
I've submitted an edit replacing the last paragraph questioning the difference from the other answer with an explanation of how their results are actually the same.
Monty Harder

1

Let Eij 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 pijPr(Eij).

Then 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)

Assuming a standard coin Pr(X=)=1/4 means that pij=1/4[pi1j1+pi1j+pij1+pij]

solving for pij, =1/3[pi1j1+pi1j+pij1]

But p0j=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 complexity O(ij) and memory complexity O(min(i,j)). Here's a simple fold implemented in Haskell:

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> 

UPDATE: Someone in the comments above asked whether one was suppose to roll 10 heads in a row or not. So let Ekl 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=11/2[pl,k+1+pl,0] where pil=pii=1,pki=0

This is a linear system with i2 unknowns and one unique solution.

To convert it into an iterative scheme, simply add an iterate number n and a sensitivity factor ϵ:

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

Choose ϵ and pk,l,0 wisely and run the iteration for a few steps and monitor the correction term.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.