寻找全球最低标准

问题描述 投票:0回答:1

我试图使用下面的函数找到全局最小值(-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
r optimization
1个回答
0
投票

您正在收到该错误,因为您在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值。

© www.soinside.com 2019 - 2024. All rights reserved.