主要内容

具有许多线性约束的二次编程

这个例子表明了Quadprog.'active-set'与默认值相比,算法在许多线性约束存在下执行'内部point-convex'算法。此外,来自的拉格朗日乘数'active-set'算法在非活动约束时完全是零,当您正在寻找活动约束时可能有用。

问题描述

创建一个伪随机二次问题N变量和10 * N.线性不平等约束。指定n = 150.

RNG.默认重复性的%n = 150;RNG.默认a = randn([10 * n,n]);b = 10 * =(尺寸(a,1),1);f = sqrt(n)* rand(n,1);h = 18 *眼睛(n)+ randn(n);h = h + h';

检查生成的二次矩阵是否为凸。

ee = min(eig(h))
ee = 3.6976.

所有特征值都是积极的,所以二次形式x'* h * x是凸的。

不包括线性平等约束或界限。

AEQ = [];beq = [];lb = [];UB = [];

使用两个算法解决问题

设置选项以使用Quadprog.'active-set'算法。该算法需要初始点。设置初始点X0.是一个零的长度矢量N

opts = Optimoptions('quadprog''算法''active-set');x0 =零(n,1);

解决方案的时间。

TIC [XA,FVALA,EFLAGA,OUPPORTA,LAMBDAA] =四肢(H,F,A,B,AEQ,BEQ,LB,UB,X0,OPTS);
最低发现满足约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。<停止标准详细信息>
TOC.
经过时间为0.042058秒。

将解决方案时间与默认值进行比较'内部point-convex'算法。

TIC [XI,FVALI,EFLAGI,OUTPORI,LAMBDAI] =四肢(H,F,A,B);
最低发现满足约束。优化完成,因为目标函数在可行的方向上不降低,到在最优性公差的值内,并且对约束公差的值满足约束。<停止标准详细信息>
TOC.
经过时间为2.305694秒。

这 'active-set'算法在许多线性约束的问题上更快。

检查拉格朗日乘数

'active-set'算法仅在与线性约束矩阵相关联的拉格朗日乘法器结构中报告几个非零条目。

NNZ(Lambdaa.ineqlin)
ans = 14.

相比之下,'内部point-convex'算法返回包含所有非零元素的拉格朗日乘法器结构。

nnz(lambdai.ineqlin)
ans = 1500.

几乎所有这些拉格朗日乘法器都小于n * eps.在尺寸方面。

NNZ(ABS(Lambdai.ineqlin)> N * EPS)
ans = 20.

换句话说,'active-set'算法在拉格朗日乘法器结构中有明确的主动约束指示,而'内部point-convex'算法没有。

也可以看看

|

相关话题