で、を固定したとき
- +6歩進む確率 出る回数A
- +3歩進む確率 出る回数B
- -3歩進む確率 出る回数C
- -6歩進む確率 出る回数D
- 0歩進む確率 出る回数E
一回のグリコでN回ジャンケンすると
A〜EをN個重複を許して並べるやり方は通りあって、このうち
・・・(1)
を満たすものを抽出。ここで
を計算する。
というわけで、(1)を抽出できる関数を作成したらいいんじゃろうか…
先生「あ〜それdirichletだよ」
的な助言があったりなかったりとか思いつつ
とりあえず構想としては
があります、と。
たぶん
for(a in 0:n){ for(b in 0:(n-a)){ for(c in 0:(n-a-b)){ for(d in 0:(n-a-b-c)){ for(e in 0:(n-a-b-c-d)){ if((2a+b-c-2d)>0){ …
的なことをゴリゴリすると(1)になるんじゃね、的な。
texの使い方を教わりました。
サンクスNK。
終わり
10/3 追記
library(gtools) combinations(5,5,repeats.allowed=TRUE)
でなんかできそうなにおいだぞ…
N<-6 #ジャンケンする回数 library(gtools) #とりあえず全通り出す cmb<- combinations(5,N,repeats.allowed=T) num<- nrow(cmb) #A→1、B→2、C→3、D→4、E→5 と変換 ABCDE.count<- matrix(rep(0,5*nrow(cmb)),nc=5) for(i in 1:num){ for(k in 1:N){ if(cmb[i,k]==1){ABCDE.count[i,1]<- ABCDE.count[i,1] + 1} else if(cmb[i,k]==2){ABCDE.count[i,2]<- ABCDE.count[i,2] + 1} else if(cmb[i,k]==3){ABCDE.count[i,3]<- ABCDE.count[i,3] + 1} else if(cmb[i,k]==4){ABCDE.count[i,4]<- ABCDE.count[i,4] + 1} else {ABCDE.count[i,5]<- ABCDE.count[i,5] + 1} } #for.k end } #for.i end gain<- matrix(c(rep(2,nrow(cmb)),rep(1,nrow(cmb)),rep(-1,nrow(cmb)),rep(-2,nrow(cmb)),rep(0,nrow(cmb))),nc=5) step<- gain*ABCDE.count #勝ちパターンだけとってくる行列 win.pattern<- matrix(rep(0,5),nc=5) for(j in 1:num){ if(sum(step[j,])>0){ win.pattern<- rbind(win.pattern,ABCDE.count[j,]) } } #for.j end win.pattern<- win.pattern[c(-1),] win.pattern library(MCMCpack) p<- rdirichlet(1,c(1,1,1)) q<- rep(1/3,3) step.matrix<- rbind(c(0,3,-6), #1回のじゃんけんでの相手からみた自分の変位 c(-3,0,6), c(6,-6,0)) pq<- t(p) %*% q #pとqが出すグー、チョキ、パーの掛け合わせ確率 p q pq a<- pq[3,1] + pq[2,3] b<- pq[1,3] c<- pq[2,2] d<- pq[1,3] + pq[3,2] e<- pq[1,1] + pq[2,2] + pq[3,3] probability<- 0 for(m in 1:nrow(win.pattern)){ probability<- probability + a^win.pattern[m,1]*b^win.pattern[m,2]*c^win.pattern[m,3]*d^win.pattern[m,4]*e^win.pattern[m,5] } probability p
probabilityが求めるものになっているのか?