2016-05-01 6 views
0

Ich fange an, Python zu lernen, und ich habe eine Frage zu diesem Code, den mein Freund und ich nur zufällig erfunden haben. Was wäre der richtige Weg, um den höchsten Y-Punkt in 5000 Läufen aufzuzeichnen und zu mitteln?Python Durchschnittliche Maximum Y in n Läuft

#!/usr/local/bin/python 

import random 
import matplotlib.pyplot as plt 

n = 5000 
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 

print(len(lwealth)) 
plt.plot(lwealth) 
plt.show() 

Antwort

1

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.

+0

Mit sehr langer Zeit meinst du, Stunden? Tage? Jahre? Jahrtausende? Ich kann warten, das ist interessant. – stanleysteam

+0

Versuchen Sie es mit einem niedrigeren n, was einen Hinweis geben sollte. – cge

0

Als vorherige Antwort vorgeschlagen, eine Zeile Code Spuren maxwealth

if wealth > maxwealth: maxwealth = wealth 

Einen einfachen und schnellen Weg, um den Durchschnitt zu nehmen wäre, diese Linie in der while-Schleife hinzuzufügen:

totalwealth += wealth 

... und dann gleich nach der while-Schleife:

avgwealth /= n 

Das ist, anstatt eine Liste zu halten Reichtumspunkte, um später zu mitteln, einfach die Summe der Vermögenspunkte berechnen, dann durch die Anzahl der Wohlstandspunkte dividieren, um den Durchschnitt zu erhalten.

+0

Das scheint jedoch nicht der Durchschnitt zu sein, den sie wollen. Stattdessen scheinen sie denselben Code 5000-mal ausführen zu wollen und das Maximum jedes Laufs zu mitteln. Ich bin mir nicht ganz sicher. – cge

+0

Ich möchte, dass es das Maximum von Y in 5000 Läufen aufzeichnet und dann mittelt. Mit dieser Formel + 3-3 siehst du den durchschnittlichen maximalen Wohlstand. – stanleysteam

+0

Wenn Sie nach etwas anderem als den unten beschriebenen Lösungen suchen, wäre es hilfreich zu erklären, was Sie wollen, ist anders. –

Verwandte Themen