Làm thế nào tôi có thể mô hình lật cho đến khi N thành công?


17

Bạn và tôi quyết định chơi một trò chơi trong đó chúng tôi thay phiên nhau lật một đồng xu. Người chơi đầu tiên lật 10 đầu trong tổng số trận thắng. Đương nhiên, có một cuộc tranh luận về việc ai nên đi trước.

Mô phỏng của trò chơi này cho thấy người chơi lật đầu tiên thắng nhiều hơn 6% so với người chơi lật thứ hai (người chơi thứ nhất thắng khoảng 53% thời gian). Tôi quan tâm đến việc mô hình hóa phân tích này.

Đây không phải là biến ngẫu nhiên nhị thức, vì không có số lượng thử nghiệm cố định (lật cho đến khi ai đó nhận được 10 đầu). Làm thế nào tôi có thể mô hình này? Có phải là phân phối nhị thức âm?


Vì vậy, để có thể tạo lại kết quả của tôi, đây là mã python của tôi:

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
Khi bạn tung đồng xu cho đến khi thất bại và sau đó xem xét phân phối số lượng thành công xảy ra trước khi kết thúc thử nghiệm đó, thì đây là định nghĩa phân phối nhị thức âm . r
Tim

2
Tôi không thể sao chép giá trị 2%. Tôi thấy rằng người chơi đầu tiên giành được thời gian. 53.290977425133892%
whuber

1
@whuber vâng, tôi tin bạn nói đúng. Tôi đã chạy mô phỏng của tôi ít lần hơn tôi nên. Kết quả của tôi tương xứng với bạn.
Demetri Pananos

1
Nếu một người giành được 53% thời gian, thì người kia sẽ là 47%, vì vậy không nên mô tả là "người chơi thứ nhất thắng nhiều hơn 6% so với người chơi thứ hai" hay "3% nhiều hơn một nửa thời gian"? Không (như hiện tại nói) "nhiều hơn 3% so với người chơi lật thứ hai"
JesseM

3
Bạn có nhận được câu hỏi này từ FiveThentyEight Riddler Express không?
foutandabout

Câu trả lời:


19

Sự phân bố số lượng đuôi trước khi đạt được đầu là nhị thức âm với các tham số 101010 . Gọi f là hàm xác suất và G là hàm sinh tồn: với mỗi n 0 , f ( n ) là cơ hội của người chơi n đuôi trước 10 đầu và G ( n ) là cơ hội của người chơi có n hoặc nhiều đuôi trước 10 đầu.1/2fGn0f(n)n10G(n)n10

Bởi vì người chơi cuộn độc lập, cơ hội người chơi thứ nhất chiến thắng bằng cách lăn chính xác đuôi có được bằng cách nhân cơ hội đó với cơ hội người chơi thứ hai cuộn n hoặc nhiều đuôi, bằng f ( n ) G ( n ) .nnf(n)G(n)

Tổng kết trên tất cả các khả năng mang lại cơ hội chiến thắng cho người chơi đầu tiên nhưn

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

Đó là khoảng hơn một nửa thời gian.3%

Nói chung, thay thế bằng bất kỳ số nguyên dương m nào , câu trả lời có thể được đưa ra dưới dạng hàm Hypergeometric: nó bằng với10m

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

Khi sử dụng đồng xu thiên vị với cơ hội đầu, điều này khái quát đếnp

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

Đây là một Rmô phỏng của một triệu trò chơi như vậy. Nó báo cáo một ước tính . Một thử nghiệm giả thuyết nhị thức để so sánh nó với kết quả lý thuyết có điểm Z là - 0,843 , đây là một sự khác biệt không đáng kể.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
Cũng giống như một ghi chú có thể không rõ ràng trong nháy mắt, các câu trả lời của chúng tôi đồng ý bằng số: (.53290977425133892 - .5) * 2 về cơ bản chính xác là xác suất tôi đưa ra.
Dougal

1
@Dougal Cảm ơn bạn đã chỉ ra điều đó. Tôi đã xem câu trả lời của bạn, thấy và biết rằng nó không đồng ý với dạng câu trả lời được yêu cầu trong câu hỏi, tôi không nhận ra rằng bạn đã tính toán chính xác. Nói chung, nên đặt câu trả lời cho bất kỳ câu hỏi nào ở dạng được yêu cầu, nếu có thể: điều đó giúp bạn dễ dàng nhận ra khi nào câu trả lời đúng và dễ so sánh. 6.6%
whuber

1
@whuber Tôi đã trả lời cụm từ "Mô phỏng của trò chơi này cho thấy người chơi lật đầu tiên thắng 2% (EDIT: 3% sau khi mô phỏng nhiều trò chơi hơn) so với người chơi lật thứ hai". Tôi sẽ hiểu "thắng thêm 2%" là ; giá trị đúng là 6,6%. Tôi không chắc chắn về cách diễn giải "thắng thêm 2%" có nghĩa là "thắng 52% thời gian", mặc dù rõ ràng đó là những gì đã được dự định. Pr(A wins)Pr(B wins)=2%
Dougal

@Dougal Tôi đồng ý rằng mô tả của OP là khó hiểu và thậm chí sai. Tuy nhiên, mã và kết quả của anh ta cho thấy rõ rằng anh ta có nghĩa là "nhiều hơn 3% thời gian" chứ không phải "nhiều hơn 3% so với người chơi khác".
whuber

1
@whuber Đồng ý. Thật không may, tôi đã trả lời câu hỏi trước khi mã được đăng và bản thân tôi không chạy mô phỏng. :)
Dougal

15

Chúng ta có thể mô hình hóa trò chơi như thế này:

  • Người chơi A flips một xu nhiều lần, nhận được kết quả A1,A2, cho đến khi họ nhận được tổng cộng 10 người đứng đầu. Hãy chỉ số thời gian của người đứng đầu 10 là biến ngẫu nhiên X .
  • Người chơi B cũng làm như vậy. Hãy chỉ số thời gian của người đứng đầu 10 là biến ngẫu nhiên Y , đó là một bản sao iid của X .
  • Nếu XY , Người chơi A thắng; nếu không thì người chơi B thắng. Đó là,
    Pr(A wins)=Pr(XY)=Pr(X>Y)+Pr(X=Y)Pr(B wins)=Pr(Y>X)=Pr(X>Y).

Chênh lệch về tỷ lệ chiến thắng là do đó

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

Như bạn nghi ngờ, X (và Y ) được phân phối chủ yếu theo phân phối nhị thức âm. Các ký hiệu cho điều này khác nhau, nhưng trong tham số hóa của Wikipedia , chúng ta có đầu là "thất bại" và đuôi là "thành công"; chúng ta cần r=10 "thất bại" (người đứng đầu) trước khi thử nghiệm bị dừng và xác suất thành công p=12 . Khi đó số "thành công" làX10, có

Pr(X10=k)=(k+9k)210k,
và xác suất va chạm là
Pr(X=Y)=k=0(k+9k)222k20,
mà Mathicala hữu ích cho chúng ta biết là7649952511622614676.6%.

Do đó, tỷ lệ thắng của Người chơi B là Pr(Y>X)46.7% , và Người chơi A là619380496116226146753.3% .


những cái đầu không cần phải liên tiếp, chỉ cần 10 cái. Tôi cho rằng đó là những gì bạn đang sửa chữa.
Demetri Pananos

6
(+1) Tôi thích cách tiếp cận này tốt hơn phương pháp tôi đã đăng vì nó đơn giản hơn về mặt tính toán: nó chỉ yêu cầu hàm xác suất, có biểu thức đơn giản về các hệ số nhị thức.
whuber

1
Tôi đã gửi một bản chỉnh sửa thay thế đoạn cuối cùng đặt câu hỏi về sự khác biệt so với câu trả lời khác bằng lời giải thích về kết quả của chúng thực sự giống nhau.
Monty Harder

1

Đặt Eij là sự kiện mà người chơi đang lật tôi đứng trước khi người chơi khác lật đầu j và để X là hai lần lật đầu tiên có không gian mẫu {hh,ht,th,tt} trong đó h có nghĩa là đầu và đuôi t, và cho pijPr(Eij) .

Khi đó 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)

Giả sử một đồng xu tiêu chuẩn Pr(X=)=1/4 phương tiện mà pij=1/4[pi1j1+pi1j+pij1+pij]

pij=1/3[pi1j1+pi1j+pij1]

p0j=p00=1pi0=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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.