R-优化 - 极限和简单约束



我有一个相当简单的优化问题,尽管我对R相当不错,但优化是我做很多事情的事情。

my.function <- function(parameters){
  x <- parameters[1]
  y <- parameters[2]
  z <- parameters[3]
  ((10*x^2) - ((y/2) * (z/4)))^2
}
result <- optim(c(7,10,18),fn = my.function, method = 'L-BFGS-B',
      lower = c(2,7,7),
      upper = c(15,20,20))
result$par
#[1]  2.205169 19.546621 19.902243

这是我正在处理的问题的完整版本,因此,如果其目的没有意义,请原谅它。我使用" L-BFGS-B"方法有限制,但是我需要添加一个约束,但我不确定如何做。我正在尝试实施的规则如下:

  • x必须在2至15
  • 之间
  • y必须在7至20
  • 之间
  • z必须在7至20
  • 之间
  • z&lt; = y

这是我不知道如何实施的最后一个。任何帮助,将不胜感激。谢谢。

如果违反约束,则将大量数字添加到目标函数,即将my.function的最后一行更改为:

((10*x^2) - ((y/2) * (z/4)))^2 + ifelse(y > z, 10^5, 0)

在这种情况下,结果确实满足了约束。同样,由于该目标是非负的,其值不能小于0,因此我们达到了最小值数字公差。

result$par
## [1]  2.223537 19.776462 20.000000
result$value
## [1] 1.256682e-11

最新更新