【问题标题】:DEoptim in R returns an error when I use fnMap parameter当我使用 fnMap 参数时,R 中的 DEoptim 返回错误
【发布时间】:2015-07-21 22:21:00
【问题描述】:

我正在尝试将 DEoptim 与 fnMap 参数一起使用,如文档“创建每个种群后将运行的可选函数”中所述,因此我创建了这个简单的测试用例。

fnm <- function(x) round(x, 2)
fn <- function (x) x ^ 2

upper <- 100
lower <- -100

DEoptim(fn=fn, lower=lower, upper=upper, fnMap=fnm)

问题是当我使用 fnMap 参数时,对于任何类型的映射函数,它都会返回错误 {ma​​pping function did not return an object with dim NP x length(upper)}。

【问题讨论】:

    标签: r optimization


    【解决方案1】:

    预期回报是暗淡的 NP x 长度(上)。您将upper 设置为length 1。您可以尝试使用control 将dim NP 设置为1。比如……

    DEoptim(fn=fn, lower=lower, upper=upper, fnMap=fnm,control=DEoptim.control(NP=1))
    

    但您会收到此警告...

    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)
    

    但这告诉我们 NP 默认为 10 * length(lower),这很有用。你只需要重新定义你的函数来

    fnm <- function(x) matrix(round(x, 2), nrow=10, ncol=1,byrow=TRUE)
    

    但这假设你总是有一个length 1 参数集。我可能会做这样的事情

    fnm <- function(x, Len) matrix(round(x, 2), nrow=10*Len, ncol=Len,byrow=TRUE)
    

    然后像这样调用DEoptim

    DEoptim(fn=fn, lower=lower, upper=upper, fnMap=function(x) fnm(x,length(upper)))
    

    【讨论】:

    • 感谢您的回答。使用控制的第一个解决方案给了我警告和错误,但第二个工作完美。所以我选择这个作为正确答案。再次感谢。
    • 是的,第一个“解决方案”并不是一个解决方案,只是为了展示我如何得到最终答案,因为文档似乎没有告诉你 NP 的默认值是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多