Skip to content

Instantly share code, notes, and snippets.

@ecounysis
Last active September 9, 2021 17:33
Show Gist options
  • Save ecounysis/bc0d8591196cf8e8682f0e9d2603c7da to your computer and use it in GitHub Desktop.
Save ecounysis/bc0d8591196cf8e8682f0e9d2603c7da to your computer and use it in GitHub Desktop.
a simple simulation of a baseball game using on-base average as an input
import random
def at_bat(hitter):
if (random.random() < hitter['avg']):
return 'ON'
else:
return 'OUT'
def inning():
global hitters, runs, next_batter
outs = 0
ob = 0
while (outs < 3):
if (at_bat(hitters[next_batter])=='ON'):
ob+=1
if (ob>=4):
ob=3
runs+=1
else:
outs+=1
next_batter+=1
next_batter=next_batter%9
hitters = {}
runs = 0
next_batter = 0
def game():
for i in range(9):
inning()
r = runs
reset()
return r
def reset():
global runs, next_batter
runs = 0
next_batter = 0
def simulate(games):
return sum([game() for i in range(games)])/games
hitters = [dict(avg=0.3) for i in range(9)]
# good batter at cleanup
hitters[3]['avg'] = 0.6
simulate(10000)
# good batter at top of order
hitters[0]['avg'] = 0.6
hitters[3]['avg'] = 0.3
simulate(10000)
# good batter last
hitters[8]['avg'] = 0.6
hitters[0]['avg'] = 0.3
simulate(10000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment