- 奇病が発生した。この奇病にかかると、音楽と美術とスポーツに関する能力が破壊されるという。音楽は演奏できなくなるし鑑賞もできなくなる。美術は創作活動ができなくなるし鑑賞もできなくなる。スポーツは自らプレイすることができなくなるし、鑑賞もできなくなる。
- 今、3つの治療法、M,A,Sが開発されたと言うが、効果は不明だという。この3つの治療法は一つしか選べない(併用すると効果は無になることが分かっている)とする。
- また、治療は即刻開始しなければ、無効であり、副作用はないことにする。
- M,A,Sの効果はそれぞれ、音楽系、美術系・スポーツ系にのみ効果があり、他の系には全く無効である
- また、効果の出方は4通りある。
- それぞれの効果をM1,M2,M3,A1,A2,A3,S1,S2,S3とする
- 効果は立場によって優劣が異なる。例を挙げる。
- ホタル界ではA1>A2=S1>S2>M1=M2=M3=A3=S3と評価された
- ウグイス界ではM1=S1>S2>M2=A1>A2>M3=A3=S3と評価された
- ちなみに、選択肢2つで、その帰結が「成功と失敗」の2つの場合には、X1=Y1>X2=Y2という優劣情報になっている。
k <- 3
s <- sample(2:5,k,replace=TRUE)
s <- rep(3,k)
s.list <- list()
for(i in 1:k){
s.list[[i]] <- 1:s[i]
}
true.prob <- list()
for(i in 1:k){
true.prob[[i]] <- rdirichlet(1,rep(10,s[i]))
}
true.prob[[3]] <- c(0.5,0.1,0.4)
true.prob[[2]] <- c(0.0,0.5,0.5)
cat.combin <- expand.grid(s.list)
preference <- matrix(1,prod(s),k)
for(i in 1:prod(s)){
tmp.s <- sample(0:(k-1),1)
preference[i,sample(1:k,tmp.s)] <- 0
preference[i,] <- preference[i,]/sum(preference[i,])
}
scores <- matrix(c(1,4,3,1,3,2,1,1,1),byrow=TRUE,3,3)
for(i in 1:length(preference[,1])){
tmp <- c(scores[cat.combin[i,1],1],scores[cat.combin[i,2],2],scores[cat.combin[i,3],3])
preference[i,] <- as.numeric(tmp==max(tmp))
}
for(i in 1:length(preference[,1])){
preference[i,] <- preference[i,]/sum(preference[i,])
}
pre <- list()
for(i in 1:k){
pre[[i]] <- sample(0:0,s[i],replace=TRUE)
}
n.history <- 100
history <- matrix(0,n.history,sum(s))
n.iter <- 1000
for(h in 1:n.history){
tmp <- c()
for(j in 1:k){
tmp <- c(tmp,pre[[j]])
}
history[h,] <- tmp
chosen <- rep(0,k)
this.time.chosen <- rep(0,k)
rs <- list()
for(j in 1:k){
rs[[j]] <- rdirichlet(n.iter,pre[[j]]+1)
}
for(i in 1:n.iter){
tmp.rs <- list()
for(j in 1:k){
tmp.rs[[j]] <- rs[[j]][i,]
}
probs <- expand.grid(tmp.rs)
tmp.prob <- apply(probs,1,prod)
tmp2 <- preference * tmp.prob
tmp3 <- apply(tmp2,2,sum)
tmp.max <- which(tmp3 == max(tmp3))
if(length(tmp.max)==1){
choice <- tmp.max
}else{
choice <- sample(tmp.max,1)
}
this.time.chosen[choice] <- this.time.chosen[choice]+1
}
chosen[selected.chosen] <- chosen[selected.chosen]+1
really.chosen <- sample(1:k,1,prob=this.time.chosen/sum(this.time.chosen))
really.happen <- sample(1:s[really.chosen],1,prob=true.prob[[really.chosen]])
pre[[really.chosen]][really.happen] <- pre[[really.chosen]][really.happen]+1
}
matplot(history,type="l")