(Descargo de responsabilidad: Esto no es una tarea cuestión). Estoy tratando de enseñar a mi mismo algunas elementales de probabilidad, y pensé en este siguiente ejemplo: Imagina que estás jugando a un juego de la participación de dos monedas. Con el fin de ganar el juego, debes voltear cabezas antes que tu oponente. Es decir, si no voltear cabezas primero se gana y se pierde. Supongamos también que el juego se juega en un giro basado en la moda y se están moviendo de un tirón la moneda de la primera. También, las monedas son "injusto" con $P(X=heads)|_{coin 1}=p_1$$P(X=heads)|_{coin 2} = p_2$.
Estoy seguro de cómo se calculan en promedio cuántas vueltas que nos ayudará a ganar el juego.
Hasta ahora, creo que podemos modelo de este juego con la siguiente función $P(X=k) = p_1(1-p_1)^{k-1}(1-p_2)^{k-1}$ (lo que parece muy similar a una distribución geométrica), porque en fin de ganar el juego (suponiendo que volcó colas primera) el oponente debe voltear colas con la probabilidad de $(1-p_2)$ o se pierde. Este patrón se repite para cada ronda del juego.
Creo que la probabilidad de ganar es igual a $\sum_{k=1}^{\inf}p_1(1-p_1)^{k-1}(1-p_2)^{k-1}$ y el número esperado de vueltas para ganar es dado por $\sum_{k=1}^{\inf}p_1(1-p_1)^{k-1}(1-p_2)^{k-1} k$.
Escribí una simulación de Monte Carlo para calcular estos valores con la asunción de los valores de $p_1$$p_2$, pero que no es satisfactorio para mí. Me gustaría saber cómo resolver este problema matemáticamente como contraposición a la programación.
Dos preguntas: 1) ¿Estoy en el camino correcto con la probabilidad de ganar y la previsión del número de vueltas para ganar? 2) Si es así, puede que me ayude en la solución de estas series infinitas. Sin duda, yo no soy grande con la resolución de la serie.
Edit: La pregunta ha sido respondida, pero quería publicar mi código por si a alguien le interesa. (Yo era originalmente el pensamiento acerca de este problema en términos de una batalla naval, así que por eso los comentarios y los nombres de las variables se denominan de esa manera).
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
y el resultado:
from monte carlo simulation:
P(win): 0.66706
expected # of shots: 1.33967131236
from theory:
P(win): 0.666666666667
expected # of shots: 1.33333333333