这个例子展示了如何将一个正半定二次规划问题转化为二阶锥形式coneprog
解算器。二次规划问题具有这样的形式
,
可能受制于边界和线性约束。coneprog
解决表单中的问题
这样
,
可能受制于边界和线性约束。
把一个二次程序转换成coneprog
形式,首先计算矩阵的平方根
.假设
是对称半正定矩阵,命令
A = sqrtm(H);
返回一个正半定矩阵一个
这样A'*A = A*A = h
.因此,
.
修改二次程序的形式如下:
在哪里 满足约束条件
.
扩展控制变量 来 ,其中包括 作为最后一个元素:
.
将二阶锥约束矩阵和向量展开如下:
.
将系数向量展开 :
.
根据新的变量,二次规划问题就变成了
在哪里
.
通过下面的计算,这个二次约束变成了一个锥约束 , , :
.
二次规划与相应的锥规划具有相同的解。唯一的区别是附加项 在圆锥程序中。
的quadprog
文档给出了这个示例。
H = [1,-1, -1,2,-2 1,-2,4];F = [-7;-12;-15];Lb = 0 (3,1);Ub = ones(size(lb));Aineq = [1,1,1];Bineq = 3;[xqp fqp] = quadprog(H,f,Aineq,bineq,[],[],lb,ub)
找到满足约束条件的最小值。由于目标函数在可行方向上不减少,优化完成,在最优性公差的值内,约束满足在约束公差的值内。
xqp =3×11 1 1
FQP = -32.5000
参考本例开头的描述,指定二阶锥约束变量,然后调用coneprog
函数。
Asc = sqrtm(H);Asc((end+1),(end+1)) = 1;D = [zero (size(f(:)));1];Gamma = -1;B = 0 (size(d));qp = secondordercone(Asc,b,d,gamma);Aq = Aineq;Aq(:,(end+1)) = 0;lb(end+1) = -Inf;ub(end+1) = Inf; [u,fval,eflag] = coneprog([f(:);1],qp,Aq,bineq,[],[],lb,ub)
找到最优解。
u =4×11.0000 1.0000 1.0000 1.0000 1.0000
Fval = -33.0000
Eflag = 1
锥解的前三个元素u
等于二次规划解的元素xqp
,显示精度:
disp ([xqp u (1: (end-1))))
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
返回的二次函数值哲学基本问题
什么时候返回的锥值是- 1/2
是正的,什么时候是+ 1/2
是负的。
disp ([fqp-sign u (2 * () + 1) * 1/2 fval])
-33.0000 - -33.0000
coneprog
|quadprog
|secondordercone