カジノのルーレットで同じ配当で同じ額をn回賭け続けた時に損しない確率を求める関数を作る。

bは配当、nは賭ける回数、zはシングルゼロかダブルゼロを選択するのに用いる(z=1:シングルゼロ、z=2:ダブルゼロ)。

roolet <- function(b,n,z){ 
  #カジノのルーレットでありえない配当、ルーレットの種類に対してエラーを出させるために次のような条件を設定する。
  if((b==2 || b==3 || b==6 || b==9 || b==12 
      || b==18 ||  b==36) && (z==1 || z==2)){
    #ルーレット上にある当たりの数字の個数は36÷bであり、ルーレット上にある数字の個数は36+zである
    #ルーレットで損しない確率は次のような数列の和のようして求められる
    p <- 0
    for(k in ceiling(n/b):n){
      a <- (36/((36+z)*b))^k*(1-(36/((36+z)*b)))^(n-k)*choose(n,k)
      p <- p+a
    }
    return(p)
  }
  #先ほどのifでの条件に当てはまらないものに対してerrorと表示させる
  else{return("error")}
}

最後に配当が2の時のシングルゼロとダブルゼロでの確率の違いをグラフで比べてみる。

黒がシングルゼロ、 赤がダブルゼロの ルーレットでの確率である。

n <- 500
y <- numeric(n)
for(i in 1:n){
  y[i] <- roolet(2,i,1)
}
plot(1:n,y,type="l",col=1,xlim=c(0,500),ylim=c(0,1)
     ,main="ルーレットで損しない確率",sub="配当2のときのシングルゼロとダブルゼロの比較",xlab="回数",ylab="確率")
par(new=T)
for(i in 1:n){
  y[i] <- roolet(2,i,2)
}
plot(1:n,y,type="l",col=2,xlim=c(0,500),ylim=c(0,1)
     ,main="ルーレットで損しない確率",xlab="回数",ylab="確率")

グラフよりはじめは少なかった差がある程度の試行回数を重ねることでかなり大きな差が生まれることが分かった。 また計算式の性質上ギザギザしたグラフがみられた。

まとめ

カジノのルーレットで客側と店側がどの程度損得をしているかが気になったのでこのテーマを選びました。 実際のルーレットには複雑な賭け方もあり、また賭ける額もその都度変えることができるため、R上では完全に再現することができませんでしたが余力があるときにまた検証してみたいです。