Monte Carlo Simulation of the Craps Dice Game

  • Slides: 14
Download presentation
Monte Carlo Simulation of the Craps Dice Game Sencer Koç (CE 2002 -ntust-Jan 2007)

Monte Carlo Simulation of the Craps Dice Game Sencer Koç (CE 2002 -ntust-Jan 2007)

Basics • The player rolling the dice is the "shooter". Shooters first throw in

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

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.

Questions • What is the probability that the roller wins? – Note that this

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

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 =

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

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 gamelength(k) = curr_gamelength; disp(sprintf('%8. 0 f '. . . , 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

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 1 0 0 1 0 1 1 0 gamelength 2 7 3 2 5 10 8 2 4 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! •

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

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)

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;

Exact The exact value of probability of win can be calculated by using theory

Exact The exact value of probability of win can be calculated by using theory of Markov Chains

 • • • curr_gamelength = 1; x = sum(round(rand(1, 2)*6+0. 5)); if (x==7)

• • • 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 DEMO • 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 • gamelength(k) = curr_gamelength; • end %while STOP

DEBUG- tips • if (mod (k, 100) == 0 ) • Kno = k;

DEBUG- tips • if (mod (k, 100) == 0 ) • Kno = k; • disp(sprintf('%7. 0 f 結果Win-Loss. Leng: %8. 0 f ', . . . • k, win, lost, curr_gamelength)) • end