道歉,因为这个问题有些模糊和笼统,并且由于代码过于复杂,因此肯定无法重现。但是,我怀疑它可以通过同样模糊的策略来解决,这些策略可以解决这些有益且有帮助的问题。
我编写了一个模拟器,它有一个主要的并行循环,迭代参数值,将它们加载到模型中并运行它们n
次。
问题:虽然代码通常适用于较小的问题维度,但在更高维度(特别是更高n
)时,它会以显着频率失败;大多数参数值执行正常并产生输出,但偶尔会产生文件。由于缺少文件,“后处理”失败。
我所知道的:重新运行该功能,会影响不同的参数值,因此这不是由于参数值无效,而是看似随机故障。还有一些没有任何问题的运行。曾经有一条关于failure to allocate vector of size xyz
的错误消息。
我尝试了什么: traceback()
似乎关注的是sim(症状)结束时的失败,但找不到真正的原因。我还尝试在输出文件存在的条件下添加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....]
}
感谢您的耐心等待!