寻找全球最低

时间:2019-04-28 16:25:05

标签: r optimization

我正在尝试使用以下函数查找全局最小值(-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

1 个答案:

答案 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