0

我正在构建一个阵容模拟器,它使用吸收马尔可夫链来模拟某个阵容将得分的运行次数。阵容中的 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 次是不可行的。

谢谢!

4

0 回答 0