我正在构建一个阵容模拟器,它使用吸收马尔可夫链来模拟某个阵容将得分的运行次数。阵容中的 9 名球员中的每名球员都有一个不同的转换矩阵,并且使用以下函数模拟一场比赛:
simulate.half.inning9 <- function(P1,P2,P3,P4,P5,P6,P7,P8,P9,R,start=1){
s <- start; path <- NULL; runs <- 0; zz=1;inn=1
while(inn<10){
s <- start; path <- NULL;
while(s<25){
if(zz==1){
P=P1
}
if(zz==2){
P=P2
}
if(zz==3){
P=P3
}
if(zz==4){
P=P4
}
if(zz==5){
P=P5
}
if(zz==6){
P=P6
}
if(zz==7){
P=P7
}
if(zz==8){
P=P8
}
if(zz==9){
P=P9
}
s.new <- sample(1:25,1,prob=P[s,])
path <- c(path,s.new)
runs <- runs+R[s,s.new]
s <- s.new
zz=ifelse(zz==9,1,zz+1)
}
inn=inn+1
runs
}
runs
}
Mat 1-9 是单独的 25x25 转换矩阵。是的,我知道我应该使用列表!然后,我使用下一个函数来模拟 1000 个赛季的游戏,并使用此函数尝试让它趋向于“真实”数字。
RUNS <- replicate(162000,simulate.half.inning9(mat1,mat2,mat3,
mat4,mat5,mat6,mat7,mat8,mat9,R))
R 是一个矩阵,它基本上告诉函数从一个状态到另一个状态的运行次数。
所以我的问题是,有没有办法欺骗这个系统以获得每个阵容模拟的“真实”数字而不运行它 1000 次?这样做的目的是查看哪个阵容产生了最“真实”的跑动。
因为有9个!设置阵容的方法,每个运行 362880 个不同的阵容 1000 次是不可行的。
谢谢!