# This code defines a procedure which acts just like a function # and it plays one game of Roulette and reports your winnings # or losses based on a bet of \$a on a main number, and a bet \$b # on two different splits between that main number and two adjacent # numbers game := proc(a,b) u := rand()/10^12; win=0; if (u < 1/38) then win :=35*a + 34*b elif (u <= 3/38) then win := 16*b - a else win := -(a + 2*b) end if; win end proc; # To play a game just type: game(1, 2); # for instance # The following plays a series of games until # you have reached a limit (Stop) or cannot place # another bet # The number of games played and the amount of money in # your pocket when you stop playing are given as output # B represents how much money you have in your pocket play := proc(Stop, Money) # Stop and Money are formal parameters # They cannot be modified in the code below # Since we want the amount of money we have # in our pockets to vary and want to keep # track of the maximum we have ever had we let # B = Money and the current value of Bmax to be # Money too. B := Money; Bmax := Money; a := 1; b := 2; bet := a + 2*b; number_games := 0; while(B a + 2*b) do win := game(a,b); B := B + win; # if you have more money in your pocket than # ever before reset your bets to their lowest # level if(B >= Bmax) then Bmax := B; a := 1; b := 2; # else until you can recoup your losses, # reset the bets to be higher elif (35*a + 34*b + B < Bmax) then if (a < b) then a := a+1; else b:=b+1; end if; end if; number_games := number_games + 1 end do: [number_games, B] end proc; # Now let us play the game many times and see # if, on average, we make of lose money Stop := 2000: Money := 1500: number_simulations := 1000: wins := 0: outcomes := Array(1..2, 1..number_simulations): for i from 1 to number_simulations by 1 do out := play(Stop, Money); outcomes[1,i] := out[1]; outcomes[2,i] := out[2]; if (out[2] >=2000) then wins := wins + 1 end if; end do: evalf(wins/number_simulations); # Print out the average and standard deviation # for the number of games played. with(Statistics): Mean(outcomes[1, 1..number_simulations]); StandardDeviation(outcomes[1, 1..number_simulations]); # Print out the average and standard deviation # for the amount of money in your pocket at the end. Mean(outcomes[2, 1..number_simulations]); StandardDeviation(outcomes[2, 1..number_simulations]);