5

我用 C++ 编写了一个模拟程序,并且喜欢使用 DEoptim 在 R 中查找参数。有时一切正常,有时 DEoptim 停下来告诉你:

Error in DEoptim(simulate, lower = lb, upper = ub, control = opt) : 
  NaN value of objective function! 
Perhaps adjust the bounds.

我的 R 脚本定义了一个调用外部二进制文件的函数。参数附加到命令中。我测试了我的 C++ 程序,但从未见过 NaN 的返回。此外,为了进行调查,我检查了simulate()R 函数中的 NaN,这样它就会停止并告诉它实际上存在一个 NaN 值。然而,它永远不会止步于此——而是在 DEoptim 的后期。问题是什么?这是一个 DEoptim-Bug 吗?

library("DEoptim")
setwd("some-path")

simulate <- function(theta)
{
  strcom <- paste(c("./ExternalBinary", theta),collapse=" ")
  ret <- as.numeric(system(strcom, intern=T)) #will return a couple of integer numbers
  ret <- mean(ret) #average those numbers
  if(any(is.nan(ret))){ #check against NaNs
    stop('Found a NaN?!') #this line is NEVER called, even if DEoptim stops
  }
  return(ret)
}

lb <- rep(-10.,18) #18 parameters in the range of -10...10
ub <- -lb

opt <- list(NP=500,itermax=10, storepopfrom=1, storepopfreq=1, parallelType=1)
est <- DEoptim(simulate,lower=lb,upper=ub, control=opt)

编辑:我发现返回实际上不是 NaN 而是 NA。如果我替换为 ,该simulate()功能将停止。我也再次浏览了我的 c++ 程序,找不到不向. 因此我问了这个问题: main() 可以在所有 cout 都写入控制台之前返回吗?is.nan(ret)is.na(ret)cout

4

0 回答 0