R DEoptim错误:目标函数结果的长度与参数矩阵的长度不同

R DEoptim错误:目标函数结果的长度与参数矩阵的长度不同,r,optimization,data.table,differential-evolution,R,Optimization,Data.table,Differential Evolution,我试图使用DEoptim命令(来自同名的R包)最小化函数,但得到了一个奇怪的错误“目标函数结果的长度与参数矩阵的长度不同”。除了一些我看不懂的C代码外,我找不到关于这个问题的任何信息 当我试图通过…参数向函数传递其他参数时,会出现错误。在下面的示例中,我修改了Rosenbrock函数(取自DEoptim文档),使其具有第二个参数pow(我将其设置为2,以便示例与文档中的示例相同)。这很有效。然后我尝试对Rastrigin函数(来自GenSA文档)执行同样的操作。同样的技巧在这里也失败了(但是如果

我试图使用DEoptim命令(来自同名的R包)最小化函数,但得到了一个奇怪的错误“目标函数结果的长度与参数矩阵的长度不同”。除了一些我看不懂的C代码外,我找不到关于这个问题的任何信息

当我试图通过
参数向函数传递其他参数时,会出现错误。在下面的示例中,我修改了Rosenbrock函数(取自DEoptim文档),使其具有第二个参数
pow
(我将其设置为2,以便示例与文档中的示例相同)。这很有效。然后我尝试对Rastrigin函数(来自GenSA文档)执行同样的操作。同样的技巧在这里也失败了(但是如果我在第二个参数中硬编码,优化器可以正常工作,就像文档中的情况一样)

下面是示例代码:

library(DEoptim)
## Note that the vector of parameters to be optimized must be the first
## argument of the objective function passed to DEoptim.
Rosenbrock <- function(x,pow){
  x1 <- x[1]
  x2 <- x[2]
  100 * (x2 - x1 * x1)^pow + (1 - x1)^pow
}

lower <- c(-10,-10)
upper <- -lower
set.seed(1234)

# works
DEoptim(Rosenbrock,pow=2, lower, upper)

Rastrigin <- function(x) {
  sum(x^2 - 10 * cos(2 * pi * x)) + 10 * length(x)
}

Rastrigin2 <- function(x,p) {
  sum(x^2 - p * cos(2 * pi * x)) + 10 * length(x)
}

dimension <- 2
lower <- rep(-5.12, dimension)
upper <- rep(5.12, dimension)

# works
DEoptim(fn=Rastrigin,lower=lower,upper=upper,
        control = list(storepopfrom = 1))

# should be same, but doesn't work
DEoptim(fn=Rastrigin2,p=10,lower=lower,upper=upper,
        control = list(storepopfrom = 1))
库(DEoptim)
##请注意,要优化的参数向量必须是第一个
##传递给DEoptim的目标函数的参数。

Rosenbrock我必须更深入地寻找根本原因,但看起来您的
p
参数与优化/评估过程中的另一个参数部分匹配。解决方法是为该参数使用不同的名称

require(DEoptim)
Rastrigin2 <- function(x,p.) {
  sum(x^2 - p. * cos(2 * pi * x)) + 10 * length(x)
}
lower <- rep(-5.12, 2)
upper <- -lower
de <- DEoptim(Rastrigin2, lower, upper, list(storepopfrom=1), p.=10)
require(DEoptim)

Rastrigin2这有点不可思议,我在MWE中使用了“p”作为参数(因为它也是我真正目标中的参数名称),这真是纯粹的运气。谢谢