抱歉,因为这个问题有点模糊和笼统,而且由于代码太复杂,肯定无法重现。但是,我怀疑可以通过同样模糊的策略来解决这些问题,这些策略具有指导性和帮助性。
我编写了一个模拟器,它有一个主要的并行循环遍历参数值,将它们加载到模型并运行它们n
时间。
问题:虽然代码通常适用于较小的问题维度,但它在较高维度(尤其是较高的维度n
)上失败的频率很高;大多数参数值执行良好并产生输出,但偶尔没有产生文件。由于缺少文件,“后处理”会失败。
我所知道的:重新运行函数,会影响不同的参数值,所以这不是由于参数值无效,而是看似随机失败。也有一些运行没有任何问题。曾经有一条关于failure to allocate vector of size xyz
.
我尝试了什么: traceback()
似乎专注于模拟结束时的失败(一种症状),但没有找到真正的原因。我还尝试添加一个while
以输出文件存在为条件的循环,如果它失败了会重新运行参数值(见下文,注释掉)。这似乎有点帮助,但并不完全。
以上导致我怀疑某些线程以某种方式崩溃,然后无法输出分配给它的任何参数。
问题:您将使用什么策略来诊断此问题?可以实施哪些方法来使这种模拟对错误(诊断或其他)更加稳健?我可能会执行哪些操作会导致此类故障?
模拟市民的草图。环形:
library(foreach)
library(doMC)
Simulator <- function(params,...)
{
[... Pre Processing...]
times<-foreach(i=1:length(params)) %dopar%
{
# while(!file.exists(paste0("output",i,".rds"))) {
run <-list()
run$par <-params[[i]]
run$data <-list()
foreach(j=1:n) %do% # Run Sim n times with params
{
run$data[[j]] <- SimRun(params[[i]],...)
}
# Combine into single array and label dimensions
run$data <- abind(run$data,along=4)
dimnames(run$data)<- headers
# Compute statistics and save them
run$stats <- Stats(run$data,params[[i]])
saveRDS(run,paste0("output",i,".rds"))
# }
[...etc...]
}
[... Post Processing....]
}
谢谢你的耐心!