Es gibt zwei einfache Möglichkeiten, um das Maximum in einem Lauf zu bekommen:
- Haben Sie eine Variable, um den Maximalwert zu halten. Beginnen Sie zum Beispiel mit
maxwealth=0
und haben Sie dann in Ihrer while-Schleife if wealth > maxwealth: maxwealth = wealth
, um maxwealth zu aktualisieren, sobald der Wohlstand höher wird. Dies ist eine nützliche Methode, wenn Sie keine Werteliste speichern, in Ihrem Fall jedoch.
- Verwenden Sie einfach die eingebaute
max
Funktion auf Ihrer Liste am Ende: max(lwealth)
wird Ihnen den maximalen Wert in der Liste geben.
Nun, wie Sie das durchschnittliche Maximum über 5000 Läufe erhalten? Der einfachste Weg besteht darin, den Code 5000 Mal durchlaufen zu lassen, eine Liste der Maximalwerte zu speichern und dann einfach sum(maxes)/len(maxes)
zu tun. Oder akkumulieren Sie mit Mark Colans Antwort den Wert mit etwa maxtotal += maxwealth
und teilen Sie dann durch n.
Zum Beispiel:
import itertools
import random
n = 5000
maxtotal = 0
for _ in itertools.repeat(None, n):
p_win = 0.50
stakecounter = 0
wealth = 3.3
lwealth = [3.3]
bet = .1
while wealth > 0 :
flip = random.random() <= p_win
win = 3 if flip else -3
wealth = wealth + win * bet
lwealth.append(wealth)
stakecounter += 1
maxtotal += max(lwealth)
print maxtotal/n
Beachten Sie, dass numpy mit vielleicht eine gute Idee, mit Ihrem Code, aber sein. Ihr Code, der 5000 Mal geloopt wird, wird sehr lange dauern.
Mit sehr langer Zeit meinst du, Stunden? Tage? Jahre? Jahrtausende? Ich kann warten, das ist interessant. – stanleysteam
Versuchen Sie es mit einem niedrigeren n, was einen Hinweis geben sollte. – cge