关于二次程序,我将如何设置目标函数,如

min⁡ ∑a_i (x_i )^2

在“quadprog”或“limSolve”包的矩阵形式中(对于这个包,我不确定它是否需要采用矩阵形式)?

从我目前看到的讨论来看,没有二次项的乘法。

最佳答案

让我们考虑您提到的形式的简单线性约束二次规划:

min  0.5x^2 + 0.7y^2
s.t. x + y = 1
     x >= 0
     y >= 0
quadprog 包的解决方案
quadprog 包接受以下形式的模型:
min −d'b + 1/2b'Db
s.t. A'b >= b0

为了将我们的问题转化为这种形式,我们需要构造一个以 D 作为主对角线的矩阵 (2*0.5 2*0.7) ,以及一个具有三个约束和右侧 A 的矩阵 b0 :
dvec <- c(0, 0)
Dmat <- diag(c(1.0, 1.4))
Amat <- rbind(c(1, 1), c(1, 0), c(0, 1))
bvec <- c(1, 0, 0)
meq <- 1  # The first constraint is an equality constraint

现在我们可以将其提供给 solve.QP :
library(quadprog)
solve.QP(Dmat, dvec, t(Amat), bvec, meq=meq)$solution
# [1] 0.5833333 0.4166667
limSolve 包的解决方案
limSolve 包的 lsei 函数接受以下形式的模型:
min  ||Ax-b||^2
s.t. Ex = f
     Gx >= h

为了获得我们的目标函数,我们需要构造以 A 作为主对角线的矩阵 (sqrt(0.5) sqrt(0.7)),将 b 设置为 0 向量,以及编码其他信息的矩阵和向量:
A <- diag(c(sqrt(0.5), sqrt(0.7)))
b <- c(0, 0)
E <- rbind(c(1, 1))
f <- 1
G <- diag(2)
h <- c(0, 0)

现在我们可以将此信息提供给 lsei :
library(limSolve)
lsei(A, b, E, f, G, h)$X
# [1] 0.5833333 0.4166667

关于r - 目标函数中有 a_ix_i^2 项的二次规划,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41288219/

10-12 05:53