我正在尝试使用以下函数查找全局最小值(-5 <=(x,y)<= 5)。当我使用optimize时,得到“ T%*%x中的错误:参数不一致”。我在做错什么吗?
T = qr.Q(qr(matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=T)))
fitness = function(x){
z = T%*%x+c(.5,.5);
s = 100*(z[1]^2-z[2])^2 + (z[1]-1)^2;
return(10*(s/4000-cos(s))+10)
}
optimize(fitness, c(-0.5, 0.5), upper = c(5,5), lower = c(-5,-5))
Error in T %*% x : non-conformable arguments
答案 0 :(得分:0)
由于在2D优化问题上使用optimize()
(适用于1D优化问题),因此出现了此错误。
如Rui Barradas所述,您应该使用optim()
(用于多维优化问题)。
以下作品:
T = qr.Q(qr(matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=TRUE)))
fitness = function(x){
z = T%*%x+c(.5,.5);
s = 100*(z[1]^2-z[2])^2 + (z[1]-1)^2;
return(10*(s/4000-cos(s))+10)
}
fitness.optim = optim(c(-0.5, 0.5), fitness)
其中fitness.optim
的结果是:
> fitness.optim
$par
[1] -0.4550863 0.5470252
$value
[1] 0.298451
$counts
function gradient
59 NA
$convergence
[1] 0
$message
NULL
因此,在fitness
找到了最佳(最小)x_opt = fitness.optim$par
值,即x_opt = c(-0.4550863, 0.5470252)
获得了值fitness.optim$value = 0.298451
。