Problem 37 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.)

Problem 37: We need $40 to get on the bus home from Vegas tomorrow, but are down to $20. The plan is to play evens in roulette (2:1 payout, 18/38 probability of winning), but we're missing one detail. Do we bet it all one time and walk away with $0 or $40, or do we bet it a dollar at a time?
#!/usr/bin/env ruby

# Bold play or cautious play?  We need $40 to get on the
# bus home from Vegas tomorrow, but are down to $20.  Do
# we bet it all at once on evens in roulette, or do we
# bet it a dollar at a time?

TRIALS=10000

P_WIN = 18.0/38.0 # 18 evens on a 38-slot roulette wheel 

def play_bold()
  return rand() < P_WIN
end

def play_cautious()
  bank = 20

  plays_remaining = 10000 # limit how long we can play

  while (bank < 40 && bank > 0 && plays_remaining > 0)
    if (rand() < P_WIN)
      bank += 1
    else
      bank -= 1
    end
    plays_remaining -= 1
  end

  return bank == 40
end

win_bold = 0
win_cautious = 0

TRIALS.times {
  win_bold += 1 if play_bold()
  win_cautious += 1 if play_cautious()
}

puts "After #{TRIALS} times, wins:"
puts "  bold: #{win_bold}"
puts "  cautious: #{win_cautious}"

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.