Monte Carlo Simulation of the Craps Dice Game Sencer Ko Basics The player rolling the dice is the "shooter". Shooters first throw in a round of Craps is called the Come Out roll. If you roll a 7 or 11, you win and the round is over before it started. If you roll a 2, 3, or 12 that's a Craps and you lose: again, it's over before it started. Any other number becomes the Point. The purpose of the Come Out roll is to set the Point, which can be any of 4, 5, 6, 8, 9 or 10. Objective The basic objective in Craps is for the shooter to win by tossing the Point again before he tosses a 7. That 7 is called Out 7 to differentiate it from the 7 on the Come Out roll. If the Point is tossed, the shooter and his fellow bettors win and the round is over. If the shooter tosses Out 7, they lose and the round is over.
If the toss is neither the Point nor Out 7, the round continues and the dice keep rolling. Craps Game Come Out Roll Win if 7, 11 Set Point Lose if 2, 3, 12 Win if Point Continue otherwise Lose if 7 (Out 7) Win if Point Continue otherwise Lose if 7 (Out 7)
Questions What is the probability that the roller wins? Note that this is not a simple problem. The probability of win at later rolls depends on the point value, e.g., if the point is 8, P(8)=5/36 ({2,6}, {3,5},{4,4},{5,3},{6,2}) and if the point is 10, P(10)=1/36 ({5,5}). How many rolls (on the average) will the game last? Simulation and MATLAB We will simulate the craps game on a computer using MATLAB. The command rand(1) Uniformly distributed between 0 and 1 round(rand(1,2)*6+0.5)simulates a single roll of a pair of dice. The following MATLAB code simulates M games. MATLAB Code
M = 10; % Number of simulations lost = 0; win = 0; gamelength = zeros(1,M); disp(' win loss gamelength') data = zeros(10000,3); for k=1:M stop = 0; curr_gamelength = 1; x = sum(round(rand(1,2)*6+0.5)); if (x==7) | (x==11) win = win+1; stop = 1; elseif (x==2) | (x==3) | (x==12) lost = lost+1; stop = 1; else point = x; end MATLAB Code (Continued) while ~stop curr_gamelength = curr_gamelength+1; x = sum(round(rand(1,2)*6+0.5));
if (x==7) lost=lost+1; stop = 1; elseif (x==point) win = win+1; stop = 1; end end gamelength(k) = curr_gamelength; disp(sprintf('%8.0f %8.0f %8.0f '... ,win, lost, curr_gamelength)) data(k,:) = [win lost curr_gamelength]; end Sample Simulation Program Output Trial win 1 0 2 1 3 1 4 0
5 1 6 0 7 1 8 0 9 0 10 1 loss gamelength 1 2 0 7 0 3 1 2 0
5 1 10 0 8 1 2 1 4 0 1 Summary Data Total over 10 simulations win loss gamelength 5 5 4.4 Generation of Useful Data Remember we are using a random number generator! We also need a larger sample size. We will run the problem for many more games!
Let us now try 1000 games and divide #wins and #loss by M to determine the probabilities (comment out the disp commands to suppress output of data). Also evaluate the mean of gamelengths. Our point estimators are P(win) = data(1000,1)/1000 P(loss) = data(1000,2)/1000 L = mean(data(:,3)) Sample Simulations (M=1000) Trial 1 2 3 4 5 6 7 8 9 10 P(win)
0.479 0.496 0.497 0.467 0.512 0.485 0.480 0.494 0.492 0.495 P(loss) 0.521 0.504 0.503 0.533 0.488 0.515 0.520 0.506 0.508 0.505
L 3.646 3.774 3.351 3.450 3.386 3.435 3.476 3.591 3.466 3.312 Now make N=1000 such trials! This will take some time (about 5 minutes) since the MATLAB code is written for readability and not for speed! You may use the following command line: res=zeros(1000,3);for ii=1:1000; mcscraps; res(ii,:)=[win/1000 lost/1000 mean(gamelength)];end; Histograms 70
60 60 50 50 40 40 30 30 20 20 10
10 0 0.4 0.45 0.5 0.55 0.6 Histogram of P(win) for 1000 trials. 0 3 3.2 3.4 3.6
Histogram of L for 1000 trials. E P win p 0.4929 E L L 3.3748 var P win 2p 2.483 10-4 var L 2L 0.0083 3.8 Confidence Intervals P P 0.4929 t N 1,1 / 2 P win 0.4929 t N 1,1 / 2 1000 1000 t999,0.95 1.6464
0.4921 P win 0.4937 95% confidence interval L L t N 1,1 / 2 L 3.3748 t N 1,1 / 2 1000 1000 1.6464 3.3748 t999, 0.95 3.3701 L 3.3795 95% confidence interval Exact The exact value of probability of win can be calculated by using the theory of Markov Chains 0.4921 P win 0.4937 95% confidence interval 976 P win 0.4929 1980
Final Note The game length is an exponentially distributed random variable, however its mean over N=1000 trials (as shown before) is approximately normally distributed (Central Limit Theorem) 3500 3000 2500 2000 1500 1000 500 0 0
10 20 30 40