主要内容

範囲に制約のある二次の最小化

この例では,スパースで範囲制約付きの正定値2次問題に対する一部のオプション設定の効果を示します。

主対角線上のエントリが+ 4,非対角線上のエントリが2,サイズが400 x 400の三重対角対称行列として,2次行列Hを作成します。

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

400番目を除くすべての成分で[0, 0.9]の範囲を設定します。400番目の成分は制限なしにできます。

Lb = 0 (400,1);Lb (400) = -inf;Ub = 0.9*ones(400,1);Ub (400) = inf;

f (400) =- - - - - -2を設定することを除いて,線形ベクトルfを0に設定します。

F = 0 (400,1);F (400) = -2;

Trust-Region-Reflective法

“trust-region-reflective”アルゴリズムを使用して2次問題を解きます。

选项= optimoptions(“quadprog”“算法”“trust-region-reflective”);Tic [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

アルゴリズムは,比較的少ない反復回数で収束しますが,CG(共役勾配)反復を1000回以上実行します。CG反復を回避するには,代わりに直接ソルバ,を使用するようにオプションを設定します。

选项= optimoptions(选项,“SubproblemAlgorithm”“分解”);Tic [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”アルゴリズムでこの問題を解くことができます。

Tic [x3,fval3,exitflag3,output3] =...quadprog (H f ,[],[],[],[], 磅,乌兰巴托);%无选项表示使用默认算法
最小值满足约束条件。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。<停止条件详细信息>
Time3 = toc
Time3 = 0.0402
fval3、exitflag3 output3.iterations
Fval3 = -0.9930
Exitflag3 = 1
Ans = 8

結果の比較

すべてのアルゴリズムが,表示精度に対する同じ目的関数値-0.9930を示します。

“interior-point-convex”アルゴリズムの反復回数が最小になります。ただし,直接部分問題ソルバ,を使用した“trust-region-reflective”が最も速く解に到達します。

Tt = table([time1;time2;time3],[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