二次与绑定约束最小化
这个例子展示了一些选项设置在一个稀疏的影响,bound-constrained,正定二次问题。
创建二次矩阵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,除非集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直接0.018544 10 IP 0.040204 8