(Tuyên bố từ chối trách nhiệm: Đây không phải là một câu hỏi bài tập về nhà). Tôi đang cố gắng tự dạy mình một số xác suất cơ bản và tôi nghĩ về ví dụ sau: Hãy tưởng tượng bạn đang chơi một trò chơi liên quan đến hai đồng xu. Để giành chiến thắng trong trò chơi, bạn phải lật đầu trước đối thủ của mình. Đó là, nếu họ lật đầu trước họ sẽ thắng và bạn thua. Chúng ta cũng giả sử trò chơi được chơi theo lượt và bạn sẽ lật đồng xu trước. Ngoài ra, các đồng tiền là 'không công bằng' với và .
Tôi không chắc làm thế nào để tính trung bình bao nhiêu lượt chơi để giành chiến thắng trong trò chơi.
Cho đến nay, tôi tin rằng chúng ta có thể mô hình hóa trò chơi này với chức năng sau (có vẻ rất giống với phân phối hình học), vì để giành chiến thắng trong trò chơi (giả sử bạn lật đuôi trước), đối thủ phải lật đuôi với xác suất hoặc bạn thua. Mô hình này lặp lại cho mỗi vòng của trò chơi.
Tôi tin rằng xác suất chiến thắng bằng và số lượt dự kiến để giành chiến thắng được đưa ra bởi \ sum_ {k = 1} ^ {\ inf} p_1 (1-p_1) ^ {k-1} (1-p_2) ^ {k-1} k .
Tôi đã viết một mô phỏng Monte Carlo để tính toán các giá trị này với giả định các giá trị cho và , nhưng điều đó không thỏa đáng với tôi. Tôi muốn biết làm thế nào để giải quyết vấn đề này một cách toán học trái ngược với lập trình.
Hai câu hỏi: 1) Tôi có đang đi đúng hướng với xác suất chiến thắng và số lượt dự kiến sẽ thắng không? 2) Nếu vậy, bạn có thể giúp tôi giải quyết những chuỗi vô tận này. Phải thừa nhận rằng, tôi không tuyệt vời với việc giải quyết loạt bài.
Chỉnh sửa: Câu hỏi đã được trả lời, nhưng tôi muốn đăng mã của mình trong trường hợp có ai quan tâm. (Ban đầu tôi đã nghĩ về vấn đề này trong điều kiện của một trận hải chiến, vì vậy đó là lý do tại sao các bình luận và tên biến được đặt tên theo cách đó).
from pylab import *
nSim = 100000
p_h1 = 0.5
p_h2 = 0.5
number_won = 0
total_shots = []
for i in range(nSim):
won = False
shots_fired = 0
while not won:
shots_fired += 1
# simulate shot
shot = rand(1)
# if it hits, the game is over
if shot <= p_h1:
won = True
number_won += 1
# else, other player shoots
else:
shot = rand(1)
if shot <= p_h2:
won = True
total_shots.append(shots_fired)
print 'from monte carlo simulation:'
print 'P(win): ', float(number_won) / float(nSim)
print 'expected # of shots: ', np.array(total_shots).mean()
# testing
print 'from theory:'
denom = (1-p_h1)*(1-p_h2)
print 'P(win): ', p_h1 / (1 - denom)
pstar = (1 - (1-p_h1)*(1-p_h2))
print 'expected # of shots: ', 1. / pstar
và đầu ra:
from monte carlo simulation:
P(win): 0.66706
expected # of shots: 1.33967131236
from theory:
P(win): 0.666666666667
expected # of shots: 1.33333333333