我有一个相当简单的优化问题,虽然我对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
这是我正在处理的问题的补充版本,所以如果它的目的毫无意义,请原谅。我使用&lt; L-BFGS-B&#39;方法,但我需要添加一个约束,我不确定如何做到这一点。我试图实施的规则如下:
这是我不知道如何实施的最后一个。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:2)
如果违反约束,则向目标函数添加一个大数,即将Paste JSON As Classes
的最后一行更改为:
my.function
在这种情况下的结果是满足约束的以下结果。此外,由于目标是非负的,因此其值不能小于0,因此我们已达到最小数值公差。
((10*x^2) - ((y/2) * (z/4)))^2 + ifelse(y > z, 10^5, 0)