Problem 7 of Monte Carlo solutions to Fifty Challenging Problems...
(This is another part of the Fifty Problems series, a set of example applications of Monte Carlo methods. In each post, I present source code which answers a probabilistic question using simulated models of the underlying system.)
Mr Brown has a problem: he compulsively puts a dollar on number 13 in American roulette. To help him see the error of his ways, Mr Pink gives him a bet: Pink bets Brown $20 if, after 36 rounds of roulette, Brown is ahead. (That is: if Brown is up after 36 compulsive rounds, he gets an extra $20; if he's behind, he loses an extra $20.)
#!/usr/bin/env ruby
# We'll play from Mr Brown's perspective.
#
# Modelling this game is tricky. We need to play 36
# rounds of roulette, then see if we're up. If so,
# we get an extra $20; if not, we lose $20. At the
# end, we want the expected payout per unit stake.
TRIALS=10000
def payout()
p = 0
36.times do
p += 36 if ( rand() < 1/38.to_f)
end
if p > 26
p += 20
else
p -= 20
end
# puts "This round: $36 in, $#{p} out\n"
p
end
total_payout = 0
total_bet = 0
TRIALS.times {
total_payout += payout()
total_bet += 36
}
puts "After #{TRIALS} rounds of betting, we bet #{total_bet}"
puts "We won #{total_payout}, so the expected loss is "
puts " $#{(total_bet-total_payout)/total_bet.to_f}"
I've been coding my way through Fifty Challenging Problems in Statistics with Solutions. This post is a part of the Fifty Challenging Problems series.
This was brought to you by Josh Myer. He has other fun things at his homepage.