有约束的二次极小化
这个例子展示了一些选项设置对一个稀疏,有界约束,正定二次问题的影响。
创建二次矩阵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
到0,除了setf (400) =
- - - - - -2
.
f = 0 (400 1);f (400) = 2;
Trust-Region-Reflective解决方案
解二次方程'信任区域 - 反思'
算法。
选择= optimoptions (“quadprog”,“算法”,“信任区域反光”);抽搐(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 ,[],[],[],[], 磅,乌兰巴托);没有选项意味着使用默认算法
最少发现满足约束。优化完成,因为目标函数在可行的方向上是非减小的,以便在最优耐受性的值内,并且对约束公差的值满足约束。<停止标准详细信息>
time3 = toc.
历史问题= 0.0402
fval3、exitflag3 output3.iterations
fval3 = -0.9930
exitflag3 = 1
ans = 8
比较结果
所有算法都给出相同的目标函数值来显示精度,-0.9930
.
的“interior-point-convex”
算法迭代次数最少。然而,'信任区域 - 反思'
采用直接子问题求解器的算法能最快地求解。
tt = table([time1; time2; time3],[output1.ileations; output2.mertations; Output3.Iltations],...“VariableNames”, (“时间”“迭代”],“RowNames”, (“TRR”“TRR直接”“知识产权”])
tt =3×2表时间迭代________ __________ TRR 0.10443 18 TRR直接0.018544 10 IP 0.040204 8