こんな問題があったのでRを使って解く。
1円支払うと1回引けるクジがあり、1/6の確率で当たると7円貰えるが外れると何も貰えない。このクジを複数回連続で引く時、最終的な収支が±0円以上である確率が95%を超えるのは、クジを何回引く時か。
クジを回引くとき、それぞれについてシミュレーションを十分回行なって、確率が十分に収束しているという感じで、並列化も交えてやってみる。
#一回シミュレーションを行うと、引く回数が1~N回の時の収支>=0かどうかを返す関数。 #収支>=0なら1,<0なら0が返ってくる。 #snowによる並列計算は、引き渡す関数内にすべての変数を収めておくのがいいっぽい。 fn <- function(){ N <- 300 res <- numeric(N) for(trial in 1:N){ a1 <- sample(c(7, -1), size=trial, prob=c(1/6, 5/6), replace=TRUE) res[trial] <- sum(a1) >= 0 } return(res) } library(snow) cl <- makeCluster(4, type = "SOCK") clusterExport(cl, "fn") tmp <- parSapply(cl, 1:10000, function(x){fn()}) #2000回もすれば収束していた(図は略)。 #行が引く回数、列がシミュレーション回数になっている。 res <- rowMeans(tmp) plot(res, type="l") abline(h=0.95, lty=2, col="red") head(which(res > 0.95), n=1) #答え sort(res)