【问题标题】:Optimization of multivariable quadratic equation in R subject to constraints受约束的R中多变量二次方程的优化
【发布时间】:2013-06-21 20:42:17
【问题描述】:

我在 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。

【问题讨论】:

  • 给我们一个可复制的例子,用代码来回答如何使用solve.QP例子会更容易

标签: r optimization linear-programming


【解决方案1】:

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

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

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

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

【讨论】:

  • 不会优化只为我做这件事吗?或者仅仅为此使用 optim 有问题吗?
  • 如果你愿意,可以试试optim,它也可能有用(可能没那么快)。我提到的求解器是专门为解决您的问题类型(二次规划)而设计的。
  • 您已编辑您的问题。到目前为止,您的“线性约束”实际上只是变量界限,optim 可以处理。现在看起来你有optim 无法处理的“真实”线性约束。可能有与 optim 类似的工具也可以处理线性约束,但如果我是你,我不会在它们上浪费时间:只需使用我建议的两个 QP 求解器即可。
【解决方案2】:

最小化[{2*x1^2 - 5*x1 + 8*x2^2 - 7*x3*x2 - 5*x3^2, 1 5/4, x2 -> 9, x3 -> 32) 然后,用改进的Simplex方法求解凸二次规划问题。

【讨论】:

  • 那是什么,Mathematica? OP 正在询问如何在 R 中解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 2011-07-23
  • 2012-12-08
  • 2015-10-08
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多