我试图使用下面的函数找到全局最小值(-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
您正在收到该错误,因为您在2D优化问题上使用optimize()
(适用于一维优化问题)。
如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
值。