一回のグリコで進む期待値を考えるbyYF

guriko.simulation

先生が行列を使って歩数を表わしていたので…
一回のじゃんけんで、進む歩数の期待値が0以上ならその後1000回とかじゃんけんしたら勝てるだろう、ということにして、相手の手を1/3固定にしていたのをいろいろ動かしてみました。

#####################
library(MCMCpack)
guriko<- function(search,num){ #qをnum回動かして、pについてsearch回シミュレーションする
p<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
q<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
pq<- t(p) %*% q #pとqが出すグー、チョキ、パーの掛け合わせ確率
step.matrix<- rbind(c(0,3,-6),  
c(-3,0,6),
c(6,-6,0)) #1回のじゃんけんでの相手からみた自分の変位
expt<- sum(pq*step.matrix) #一回のじゃんけんで進める期待値
p.prob<- matrix(rep(0,4*search),nc=4)
for(t in 1:search){
win.count<- c(rep(0,num))
p<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
for(i in 1:num){
q<- rdirichlet(1,c(1,1,1)) #グー、チョキ、パーの順
pq<- t(p)%*%q
expt<- sum(pq*step.matrix)
if(expt>=0){
win.count[i]<- 1 #期待値0以上なら勝てるものとする
}
} #the end of for.num
win.prob<- sum(win.count)/num
p.prob[t,]<- c(p,win.prob)
} #the end of for.search
return(p.prob)
} #the end of function

res<- guriko(1000,10000)

col=c("violet","purple","skyblue","blue","lightgreen","green","yellow","orange","pink","red")
cut<- c(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)
x1 <- as.data.frame(res[which(res[,4]>=cut[1]&res[,4]=cut[2]&res[,4]=cut[3]&res[,4]=cut[4]&res[,4]=cut[5]&res[,4]=cut[6]&res[,4]=cut[7]&res[,4]=cut[8]&res[,4]=cut[9]&res[,4]=cut[10]&res[,4]=cut[1]&res[,4]=cut[2]&res[,4]<=cut[3]),c(1:3)])

library(gtools)
cmb<- combinations(3,2)
x<- y<- c(0,1)
col<- c("blue","red")
lab<- rbind(c("x","y"),
c("x","z"),
c("y","z"))
cex=0.8
par(mfcol=c(1,3))
for(t in 1:3){
plot(y1[,cmb[t,1]],y1[,cmb[t,2]],col=col[1],xlim=x,ylim=y,xlab=lab[t,1],ylab=lab[t,2],cex=cex)
par(new=T)
plot(y2[,cmb[t,1]],y2[,cmb[t,2]],col=col[2],xlim=x,ylim=y,xlab=lab[t,1],ylab=lab[t,2],cex=cex)
title(Win.Expectation")
}

######################
自分の手pを乱数で与えて、ひとまず固定して相手の手qを乱数でたくさん与えて、相手がどんな確率で手を変えても(num=10000)〜%は勝てる、みたいなシミュレーションになっています。
区切るのが細かすぎて色があまりきれいではないですが、(グ、チ、パ)=(0.4、0.4、0.2)を中心になんか境界ができています。
これは手計算で期待値が0になる点で、シミュレーション結果が理論上の結果と一致してそうです。
まあだからなんだ、という話ですが、相手が戦略を立てた場合にどうするか、という今後の発展のためにちょっと作ってみました。

P.S
更新ページを間違えてNKが書いた記事が消えてしまったようです。
すみません。