1

我在 R 3.0 上运行。我有一个二次函数,如:

2*x[1]*x[1] -5 * x[1] + 8 * x[2] * x[2] - 7*x[3]*x[2] -5 * x[3] * x[3]..

该函数具有各种二次项并具有一些线性约束,例如:

1 <= x[1] <= 7
-2 <= x[2] <= 9
0 <= x[3] <= 32

此外,

 x[1]+ x[2]+ x[3] = 100

我应该看 R 中的哪个包来解决这种优化问题?这是一个有很多不等式的大方程,我正在运行 R 3.0。可以这样:

   x[1]+ x[2]+ x[3] = 100

优化完成了吗?

我不知道如何在 quadprog 中将参数传递给 constrOptim 或 solve.QP。

4

2 回答 2

2

两者quadprod::solve.QPlimSolve::lsei都将求解QP具有线性约束的 s。它们在制定目标的方式上有所不同:

  1. min(-d^T b + 1/2 b^TD b) 对于solve.QP
  2. min(||Ax-b||^2) 为lsei

查看您编写目标函数的方式,solve.QP听起来像是最佳选择,但请注意,您必须以矩阵形式重写您的问题。

编辑:我没有意识到你的目标函数不是凸的(换句话说,D上面的矩阵不是正定的)这是这些求解器的要求。所以是的,你应该依赖一个非线性求解器optim,但是一个更通用的允许添加线性约束的求解器:constrOptim似乎是其中之一。

于 2013-06-21T04:54:49.050 回答
-1

最小化[{2*x1^2 - 5*x1 + 8*x2^2 - 7*x3*x2 - 5*x3^2, 1 <= x1 <= 7 && -2 <= x2 <= 9 && 0 < = x3 <= 32}, {x1, x2, x3}] 最优值:-51929/8 最优向量:(x1 -> 5/4, x2 -> 9, x3 -> 32) 那么,凸二次规划问题是由改进的 Simplex 方法解决。

于 2013-06-21T09:43:45.570 回答