0

抱歉,因为这个问题有点模糊和笼统,而且由于代码太复杂,肯定无法重现。但是,我怀疑可以通过同样模糊的策略来解决这些问题,这些策略具有指导性和帮助性。

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

谢谢你的耐心!

4

0 回答 0