二次规划
二次规划是非线性规划中一类特殊的数学规划问题,在如投资组合、约束最小二乘问题中都有应用。二次规划已经成为运筹学,经济数学,管理科学和组合优化科学的基本方法。
二次规划的一般形式:
minxq(x)=12xTDx−dTx+cs.t.ATx≥b0
其中,x为向量,c为标量常数,G为Hessian矩阵,当G为半正定矩阵时,上式为凸二次规划,当G为正定矩阵时,上式为严格的凸二次规划,全局最小值是唯一的,A为约束系数矩阵。
quadprog包
quadprog包是专门解决凸二次规划问题的包,其中的函数为solve.QP.但是该函数只解决严格的凸二次规划问题,求极小值。
solve.QP(Dmat, dvec, Amat, bvec, meq=0, factorized=FALSE)
函数参数:
- Dmat: 为Hessian矩阵
- dvec: 为向量,和Dmat相对应
- Amat: 约束的系数矩阵,默认约束为“ ≥ ”
- bvec: 为向量,和Amat相对应
- meq: 表示从哪一行开始Amat矩阵中的约束是等式,默认为0
VALUE:
- solution: 二次规划问题中向量的取值
- value: 标量,二次规划目标函数的取值
- unconstrained.solution: 没有约束条件下向量的取值
R实现
假设一个例子:
要求最小化