主要内容

有界约束的二次极小化

这个例子展示了一些选项设置对一个稀疏的,有界约束的,正定二次问题的影响。

创建二次矩阵H是一个大小为400 × 400的三对角对称矩阵,主对角线上的元素为+4,非对角线上的元素为-2。

本= 2 * 1 (399 1);H = spdiags(本,-1400400);H = H + H';H = H + 4*speye(400);

设定的范围[0, 0.9]除第400部分外,其余各部分。允许第400个组件不受限制。

磅= 0 (400 1);磅(400)=无穷;乌兰巴托的= 0.9 * (400 1);乌兰巴托(400)=正;

设置线性向量f除设置外,为零f (400) =- - - - - -2

f = 0 (400 1);f (400) = 2;

Trust-Region-Reflective解决方案

“trust-region-reflective”算法。

选择= optimoptions (“quadprog”“算法”“trust-region-reflective”);抽搐(x1, fval1、exitflag1 output1) =...quadprog (H f ,[],[],[],[], 磅,乌兰巴托,[]选项);
局部最小值。Quadprog停止是因为功能值的相对变化小于功能容限。
time1 = toc
time1 = 0.1044

检查解决方案。

fval1、exitflag1 output1.iterations output1.cgiterations
fval1 = -0.9930
exitflag1 = 3
ans = 18
ans = 1682

该算法在相对较少的迭代中收敛,但需要超过1000次CG(共轭梯度)迭代。为了避免CG迭代,设置选项使用直接求解器。

选择= optimoptions(选项,“SubproblemAlgorithm”“分解”);抽搐(x2, fval2、exitflag2 output2] =...quadprog (H f ,[],[],[],[], 磅,乌兰巴托,[]选项);
局部最小值。Quadprog停止是因为功能值的相对变化小于功能容限。
time2 = toc
time2 = 0.0185
fval2、exitflag2 output2.iterations output2.cgiterations
fval2 = -0.9930
exitflag2 = 3
ans = 10
ans = 0

这一次,算法需要更少的迭代,没有CG迭代。尽管直接分解步骤相对耗时,但由于求解器避免了许多CG步骤,因此求解时间大幅减少。

内点解

默认的“interior-point-convex”算法可以解决这个问题。

(x3, fval3抽搐,exitflag3 output3] =...quadprog (H f ,[],[],[],[], 磅,乌兰巴托);%没有选项意味着使用默认算法
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节
历史问题= toc
历史问题= 0.0402
fval3、exitflag3 output3.iterations
fval3 = -0.9930
exitflag3 = 1
ans = 8

比较结果

所有算法给出相同的目标函数值,以显示精度,-0.9930

“interior-point-convex”算法的迭代次数最少。然而,“trust-region-reflective”采用直接子问题求解器的算法求解速度最快。

tt =表([time1; time2;历史问题],[output1.iterations; output2.iterations; output3.iterations],...“VariableNames”,[“时间”“迭代”],“RowNames”,[“TRR”“TRR直接”“知识产权”])
tt =3×2表时间迭代________ __________ TRR 0.10443 18 TRR Direct 0.018544 10 IP 0.040204 8