(Haftungsausschluss: Dies ist keine Hausaufgabenfrage). Ich versuche, mir selbst eine elementare Wahrscheinlichkeit beizubringen, und ich dachte an das folgende Beispiel: Stellen Sie sich vor, Sie spielen ein Spiel mit zwei Münzen. Um das Spiel zu gewinnen, müssen Sie die Köpfe vor Ihrem Gegner drehen. Das heißt, wenn sie zuerst den Kopf drehen, gewinnen sie und Sie verlieren. Nehmen wir auch an, dass das Spiel rundenbasiert gespielt wird und Sie zuerst die Münze werfen. Außerdem sind die Münzen mit und 'unfair' .
Ich bin mir nicht sicher, wie ich im Durchschnitt berechnen soll, wie viele Runden es dauern wird, um das Spiel zu gewinnen.
Bisher glaube ich, dass wir dieses Spiel mit der folgenden Funktion (die sehr ähnlich erscheint) modellieren können eine geometrische Verteilung), denn um das Spiel zu gewinnen (vorausgesetzt, Sie haben zuerst die Schwänze umgedreht), muss der Gegner die Schwänze mit Wahrscheinlichkeit umdrehen, verlieren Sie. Dieses Muster wiederholt sich für jede Runde des Spiels.
Ich glaube, die Gewinnwahrscheinlichkeit ist gleich und der erwarteten Anzahl von Runden zu gewinnen ist gegeben durch \ sum_ {k = 1} ^ {\ inf} p_1 (1-p_1) ^ {k-1} (1-p_2) ^ {k-1} k .
Ich habe eine Monte-Carlo-Simulation geschrieben, um diese Werte unter der Annahme von Werten für und p_2 zu berechnen , aber das ist für mich nicht zufriedenstellend. Ich würde gerne wissen, wie man dieses Problem mathematisch und nicht programmatisch löst.
Zwei Fragen: 1) Bin ich mit der Gewinnwahrscheinlichkeit und der erwarteten Anzahl der zu gewinnenden Runden auf dem richtigen Weg? 2) Wenn ja, können Sie mir bei der Lösung dieser unendlichen Reihen helfen. Zugegeben, ich bin nicht besonders gut darin, Serien zu lösen.
Bearbeiten: Die Frage wurde beantwortet, aber ich wollte meinen Code posten, falls jemand interessiert ist. (Ich habe ursprünglich über dieses Problem im Sinne einer Seeschlacht nachgedacht, deshalb werden die Kommentare und Variablennamen so benannt.)
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
und die Ausgabe:
from monte carlo simulation:
P(win): 0.66706
expected # of shots: 1.33967131236
from theory:
P(win): 0.666666666667
expected # of shots: 1.33333333333