- 「(簡単な)ゲームをしよう!」
- 「んーと、じゃあ、○○ちゃんが3(k)回勝つまでね」
- よくある光景である
- さて、ゲームを何回やることになるのだろうか
- ○○ちゃんの勝率とする
- 回目に「おわりー」となるとする
- 回までに「おわりー」とている確率は、回終わった段階で、○○ちゃんが、まだ回しか勝っていない場合を除いたすべての場合の確率の和だから
- である
- 回目に「おわりー」となるのは、回目で「おわりー」とならずに、回目で「おわりー」となった場合なのでである
maxN<-20
n<-4
p<-0.3
ret<-rep(0,maxN)
for(i in 1:maxN){
tmp<-0
for(j in 0:(n-1)){
tmp<-tmp+choose(i,j)*(1-p)^(i-j)*p^(j)
}
ret[i]<-1-tmp
}
P<-diff(ret)
par(mfcol=c(1,2))
plot(P,type="b",main="打ち切り回数ごとの確率")
plot(cumsum(P),type="b",main="打ち切り回数の累積確率")
par(mfcol=c(1,1))
- 少し複雑にしよう
- C枚のカードがある()
- C個の袋がある()
- 今、必ずのカードから始めるのだが、次のカードをどれにするかは、番目の袋に入れてある札(0,1,2,...,Cの数字が書いてある)を引いて、札に書いてある数字のカードに持ち替えることにする。ただし、0の札を引いたら、カードは持ち替えない。
- 0のカードをn回引いたら、終了することにする。
- C枚のカードには、それぞれ、減点数が決まっているので、終了時点では、終了までにN回、札を引いたとしたら、を、このときの得点とすることにしている
- さて、何点とる確率がどれくらいになるだろうか
- i回の札を引いた時点で、C枚のうちのどのカードを持っているかは、推移行列Mを用いてで表される。ただしは、C枚のカードのどれを持っているかの確率ベクトル
- また、この時点で0を引いた回数は0,1,2,...,n回のうちのいずれか。
- 子供との「おわりー」と同じように考えよう
- i回引いた時点で、0を引いた回数が0,1,2,...,n回のそれぞれの場合にベクトルSが求まる
- これをすべて格納しつつ、どんどんと回数を増やしていき、0引き回数がn回までの確率を求め続けることは、ただの行列計算
library(MCMCpack)
Nmember<-9
Mlist<-list()
for(s in 1:Nmember){
b<-c(rdirichlet(1,rep(1,5)))
m<-matrix(c(rep(b[4],8),c(b[1],0,0,b[1],0,0,0,0),c(b[2],0,b[2],b[2],0,0,b[2],0),rep(b[3],8),
c(0,b[1],0,0,0,b[1],0,0),c(0,0,b[1],0,0,0,b[1],0),c(0,b[2],0,0,b[2],b[2],0,b[2]),c(0,0,0,0,b[1],0,0,b[1])),8,8,byrow=TRUE)
M<-matrix(0,4*8,4*8)
for(i in 1:8){
for(j in 1:8){
M[i,j]<-M[i+8,j+8]<-M[i+16,j+16]<-M[i+24,j+24]<-m[i,j]
}
}
for(i in 1:(3*8)){
M[i+8,i]<-b[5]
}
Mlist[[s]]<-M
}
v<-c(1,rep(0,7+8*3))
library(expm)
TrialMax<-100
vs<-matrix(0,TrialMax,length(v))
vs[1,]<-v
counter<-1
for(i in 2:TrialMax){
effectivevs<-vs[i-1,]
effectivevs[25:32]<-0
vs[i,]<-Mlist[[counter]]%*%effectivevs[]
counter<-counter+1
if(counter==Nmember){
counter<-1
}
}
matplot(vs,type="l")
ZanruiProb<-vs[,25:32]
ZanruiPenalty<-c(0,1,1,1,2,2,2,3)
PointMatrix<-matrix(rep(1:TrialMax,8),ncol=8)
PointMatrix<-t(t(PointMatrix)-ZanruiPenalty)
Points<-c(PointMatrix)
Probs<-c(ZanruiProb)
maxPoint<-max(Points)
ProbPerPoints<-0:maxPoint
for(i in 1:length(ProbPerPoints)){
tmp<-which(Points==i)
ProbPerPoints[i]<-sum(Probs[tmp])
}
plot(0:maxPoint,ProbPerPoints,type="b")