主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

内点法アルゴリズムを使った大規模なスパース二次計画法

この例は,スパース問題を解くときにスパース演算を使用することの価値を示しています。行列はn行です。大きい値のnと,いくつかの非ゼロの対角帯を選択します。nn列の非スパース行列は使用可能なメモリをすべて使用することがありますが,スパース行列は問題を起こしません。

問題は以下の制約に従ってx ' * H * x / 2 + f ' * xを最小化することです。

X (1) + X(2) +…+ x(n) <= 0

ここで,f =[1, 2, 3,…;- n)Hはスパース対称帯行列です。

スパース二次行列の作成

ベクトル(2 2 3, 6日,14日,6日3]の14を主対角に置いたシフトにより,対称循環行列を作成します。行列はnn列にします。ここで,n = 30000です。

n = 3 e4;H2 = speye (n);H = 3 * circshift (H2 3 2) + 6 * circshift (H2 2 2) + 2 * circshift (H2, 1、2)...+ 14*H2 + 2*circshift(H2,1,2) + 6*circshift(H2,2,2) + 3*circshift(H2,3,2);

行列構造を表示します。

间谍(H)

線形制約と目的関数の作成

線形制約は,解の要素の合計が非正であるというものです。目的関数には,ベクトルfで表現された線形項が含まれます。

一个= 1 (1,n);b = 0;f = 1: n;f = - f;

問題を解く

interior-point-convex”アルゴリズムを使用して二次計画問題を解きます。ソルバーが途中で停止しないように,StepToleranceオプションを0に設定します。

选择= optimoptions (@quadprog,“算法”“interior-point-convex”“StepTolerance”, 0);[x, fval exitflag、输出λ)=...quadprog (H f A、b ,[],[],[],[],[], 选项);
找到满足约束条件的最小值。优化完成是因为目标函数在可行方向上不减小到最优性公差的值内,约束条件满足到约束公差的值内。> <停止标准细节

n= 30000の場合,多くのコンピューターでは,完全なnn列の行列を作成することができません。したがって,この問題はスパース行列を使用してのみ実行できます。

解の検証

目的関数の値と反復回数を表示し,線形不等式に関連付けられたラグランジュ乗数も表示します。

流(’目标函数值为%d。\n迭代次数为%d。拉格朗日乘数是%d.\n'...fval、output.iterations lambda.ineqlin)
目标函数值为-3.133073e+10。迭代次数为7次。拉格朗日乘数是1.500050e+04。

下限,上限,線形等式のいずれの制約もないため,有効なラグランジュ乗数はlambda.ineqlinのみです。lambda.ineqlinが非ゼロであるため,不等式制約がアクティブであることがわかります。制約を評価して,解が境界上であることを確認します。

流(线性不等式约束A*x的值为%d.\n'* x)
线性不等式约束A*x的值为9.150244e-08。

解の構成要素の合計は0で許容誤差の範囲内です。

xには3つの領域,最初の部分,最後の部分,および解の大半を占めるほぼ線形の部分があります。3つの領域をプロットします。

次要情节(1,1)情节(x(一60))标题((1)通过x(60)”)子地块(3,1,2)地块(x(61:n-60))标题(“x(61)通过x (n-60) ')子地块(3,1,3)地块(x(n-59:n))标题(“x (n-59) x (n) '

参考

|

関連するトピック