诊断不透明错误并稳定/强化R中的模拟

时间:2014-08-21 08:59:09

标签: r parallel-processing simulation robustness domc

道歉,因为这个问题有些模糊和笼统,并且由于代码过于复杂,因此肯定无法重现。但是,我怀疑它可以通过同样模糊的策略来解决,这些策略可以解决这些有益且有帮助的问题。

我编写了一个模拟器,它有一个主要的并行循环,迭代参数值,将它们加载到模型中并运行它们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....]
}

感谢您的耐心等待!

0 个答案:

没有答案