python/when_to_quit.py
DomNomNomVR 028fb0bc3a dump
2025-04-14 15:58:38 +12:00

72 lines
1.9 KiB
Python

import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore
initial_dollar = 100
factor_if_heads = 1.8
factor_if_tails = 0.5
population_size = 10000
num_tosses_visualized = 500
def want_to_play(money, toss) -> bool:
return True
if toss > 4:
return False
rng = np.random.default_rng(seed=4)
def evolve(want_to_play, money, toss):
# if money < 2:
# return 1
# if not want_to_play(money, toss):
# return money
if rng.choice([0,1]):
return money * factor_if_heads
else:
return money * factor_if_tails
population_histories = [[initial_dollar] for _ in range(population_size)]
for toss in range(num_tosses_visualized):
for hist in population_histories:
hist.append(evolve(want_to_play, hist[-1], toss))
app = pg.mkQApp("Plotting Example")
#mw = QtWidgets.QMainWindow()
#mw.resize(800,800)
win = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
p2 = win.addPlot(title="Multiple curves")
population_histories = np.array(population_histories)
# population_histories = np.log(population_histories + 1)
p2.setLogMode(False, True)
p2.plot(population_histories.mean(0), pen=(255, 0, 0))
p2.plot(np.median(population_histories, 0), pen=(0, 255, 0))
for percentile in range(0, 101):
print('percentile', percentile)
p2.plot(np.percentile(population_histories, percentile, 0), pen=(100, 10, 0))
# for hist in population_histories:
# p2.plot(hist, pen=(33,33,33))
# p2.plot(np.random.normal(size=100), pen=(255,0,0), name="Red curve")
# p2.plot(np.random.normal(size=110)+5, pen=(0,255,0), name="Green curve")
# p2.plot(np.random.normal(size=120)+10, pen=(0,0,255), name="Blue curve")
if __name__ == '__main__':
pg.exec()