主要内容

将二次规划问题转化为二阶锥规划

这个例子展示了如何将一个正半定二次规划问题转化为二阶锥形式coneprog解算器。二次规划问题具有这样的形式

最小值 x 1 2 x T H x + f T x

可能受制于边界和线性约束。coneprog解决表单中的问题

最小值 x f T x

这样

一个 年代 c x - b 年代 c d 年代 c x - γ

可能受制于边界和线性约束。

把一个二次程序转换成coneprog形式,首先计算矩阵的平方根 H .假设 H 是对称半正定矩阵,命令

A = sqrtm(H);

返回一个正半定矩阵一个这样A'*A = A*A = h.因此,

x T H x x T 一个 T 一个 x 一个 x T 一个 x 一个 x 2

修改二次程序的形式如下:

最小值 x 1 2 x T H x + f T x - 1 2 + 最小值 x t t + 1 / 2 + f T x

在哪里 t 满足约束条件

t + 1 / 2 1 2 x T H x

扩展控制变量 x u ,其中包括 t 作为最后一个元素:

u x t

将二阶锥约束矩阵和向量展开如下:

一个 sc 一个 0 0 1

b sc 0 0

d sc 0 0 1

γ - 1

将系数向量展开 f :

f sc f 1

根据新的变量,二次规划问题就变成了

最小值 u 1 2 u T 一个 年代 c u + f 年代 c T u - 1 / 2 + 最小值 u 1 / 2 + f 年代 c T u

在哪里

u e n d + 1 / 2 1 2 u T 一个 年代 c u

通过下面的计算,这个二次约束变成了一个锥约束 一个 年代 c d 年代 c , γ

1 2 u T 一个 年代 c u 1 2 H x 2 t + 1 2

H x 2 2 t + 1

H x 2 + t 2 t 2 + 2 t + 1 t + 1 2

H x 2 + t 2 | t + 1 | ± t + 1

u ± t - γ

u ± d 年代 c - γ

二次规划与相应的锥规划具有相同的解。唯一的区别是附加项 - 1 / 2 在圆锥程序中。

数值例子

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 2 t + 1 是正的,什么时候是+ 1/2 2 t + 1 是负的。

disp ([fqp-sign u (2 * () + 1) * 1/2 fval])
-33.0000 - -33.0000

另请参阅

||

相关的话题