我正在尝试使用带有fnMap参数的DEoptim,如文档"在创建每个填充后将运行的可选函数"中所述,因此我创建了这个简单的测试用例.
fnm <- function(x) round(x, 2)
fn <- function (x) x ^ 2
upper <- 100
lower <- -100
DEoptim(fn=fn, lower=lower, upper=upper, fnMap=fnm)
Run Code Online (Sandbox Code Playgroud)
问题是当我使用fnMap参数时,它返回一个错误{ 映射函数没有为任何类型的map函数返回一个带有dim NP x length(upper) } 的对象.
预期的回报是暗淡的NP x长度(上限).你得upper为length1.您可以尝试使用昏暗NP设置为1 control.例如...
DEoptim(fn=fn, lower=lower, upper=upper, fnMap=fnm,control=DEoptim.control(NP=1))
Run Code Online (Sandbox Code Playgroud)
但是你会得到这个警告......
Warning in DEoptim(fn = fn, lower = lower, upper = upper, fnMap = fnm, control = DEoptim.control(NP = 1)) :
'NP' < 4; set to default value 10*length(lower)
Run Code Online (Sandbox Code Playgroud)
但这告诉我们NP默认10 * length(lower)为有用.你只需要将你的功能重做
fnm <- function(x) matrix(round(x, 2), nrow=10, ncol=1,byrow=TRUE)
Run Code Online (Sandbox Code Playgroud)
但这假设你总是有一个length参数集.我可能会做这样的事情
fnm <- function(x, Len) matrix(round(x, 2), nrow=10*Len, ncol=Len,byrow=TRUE)
Run Code Online (Sandbox Code Playgroud)
然后像这样调用DEoptim
DEoptim(fn=fn, lower=lower, upper=upper, fnMap=function(x) fnm(x,length(upper)))
Run Code Online (Sandbox Code Playgroud)