具有线性约束的指数函数的非线性优化

时间:2018-03-02 06:59:04

标签: r nonlinear-optimization

我尝试使用R中的函数donlp2来解决非线性优化问题。我的目标是找出以下函数的最大值:

442.8658*(x1+1)^(0.008752747)*(y1+1)^(0.555782)+(x2+1)^(0.008752747)*(y2+1)^(0.555782)

没有非线性约束。线性约束如下:

x1+x2<=20000;
y1+y2<=20000;
x1<=4662.41;
x2<=149339;
y1<=14013.94;
y2<=1342738;
x1>=0;
x2>=0;
y1>=0;
y2>=0;

以下是我的代码:

p     <- c(rep(0,4))
par.l <- c(rep(0,4))
par.u <- c(4662.41, 149339, 14013.94, 1342738)
fn <- function(par){
  x1 <- par[1]; y1<-par[3]
  x2 <- par[2]; y2<-par[4] 
  y  <- 1 / (442.8658*(x1+1)^(0.008752747)*(y1+1)^(0.555782)
               + (x2+1)^(0.008752747)*(y2+1)^(0.555782))
}
A <- matrix(c(rep(c(1,0),2), rep(c(0,1),2)), nrow=2)
lin.l <- c(-Inf, 20000)
lin.u <- c(-Inf, 20000)
ret <- donlp2(p, fn, par.u=par.u, par.l=par.l, A=A, lin.l=lin.l, lin.u=lin.u)

我搜索并发现一些相关帖子说donlp2只能找到函数的最小值,这就是我在目标函数中得到倒数的原因。

代码运行正常,但我对结果有顾虑,因为我可以很容易地找到可以给我更大结果的其他值,即目标函数的最小化是不正确的。

我还发现当我改变初始值或x1,x2,y1,y2的下限时,结果会发生显着变化。例如,如果我设置p = c(rep(0,4)),par.l&lt; -c(rep(1,4))而不是p = c(rep(0,4)),par.l&lt; -c(rep(0,4)),结果将从

改变
$par
[1] 2.410409e+00 5.442753e-03 1.000000e+04 1.000000e+04

$par
[1]  2331.748 74670.025  3180.113 16819.887

有什么想法吗?感谢您的建议和帮助!

0 个答案:

没有答案