我用 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