我在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。
答案 0 :(得分:2)
quadprod::solve.QP
或limSolve::lsei
都会使用线性约束解决QP
个问题。他们在制定目标的方式上有所不同:
solve.QP
{li> min(|| Ax-b || ^ 2)lsei
醇>
看看你编写目标函数的方式,solve.QP
听起来是最好的选择,但请注意,你必须以矩阵形式重写你的问题。
编辑:我没有意识到你的目标函数不是凸的(换句话说,上面的矩阵D
不是正定的),这是这些求解器的要求。所以,是的,您应该依赖于optim
这样的非线性求解器,但是更通用的求解器允许添加线性约束:constrOptim
似乎是其中之一。
答案 1 :(得分:-1)
最小化[{2 * x1 ^ 2 - 5 * x1 + 8 * x2 ^ 2 - 7 * x3 * x2 - 5 * x3 ^ 2, 1&lt; = x1&lt; = 7&amp;&amp; -2&lt; = x2&lt; = 9&amp;&amp; 0&lt; = x3&lt; = 32},{x1,x2,x3}] 最佳值:-51929/8 最佳矢量:(x1 - > 5/4,x2 - > 9,x3 - > 32) 然后,通过改进的Simplex方法解决了凸二次规划问题。