線形制約
線形制約とは
いくつかの最適化ソルバーは線形制約、つまり解 x に対する制約を受け入れて、線形等式または線形不等式を満たします。線形制約を受け入れるソルバーには、fmincon
、intlinprog
、linprog
、lsqlin
、quadprog
、多目的ソルバー、一部の Global Optimization Toolbox ソルバーが含まれます。
線形不等式制約
線形不等式制約は A·x ≤ b の形式になります。A が m 行 n 列の場合、n 個の要素をもつ変数 x に対し m 個の制約条件があります。m 行 n 列の行列 A と m 要素のベクトル b を入力します。
引数 A
および b
での線形不等式制約を渡します。
たとえば、以下の線形不等式不等式を制約として考えてみましょう。
x1 + x3 ≤ 4,
2x2 – x3 ≥ –2,
x1 – x2 + x3 – x4 ≥ 9.
ここで、m = 3、n = 4 です。
以下の行列 A とベクトル b を使用して、これらの制約を記述します。
"大なり" の不等式は -1 を乗算して "小なり" の不等式の形式に変換されていることに注意してください。MATLAB® 構文では次のようになります。
A = [1 0 1 0; 0 -2 1 0; -1 1 -1 1]; b = [4;2;-9];
線形制約に勾配を与える必要はありません。ソルバーが自動的に勾配を計算します。線形制約はヘッシアンに影響を与えません。
初期点 x0
を行列として渡す場合でも、ソルバーは現在の点 x を列ベクトルとして線形制約に渡します。詳細は、行列引数を参照してください。
より複雑な線形制約の例については、線形計画法の設定、ソルバーベースを参照してください。
中間の反復は線形制約に違反する可能性があります。詳細は、反復は制約に違反する可能性ありを参照してください。
線形等式制約
線形等式は Aeq·x = beq の形式をもちます。これは n 要素のベクトル x をもつ m 個の等式を表します。m 行 n 列の行列 Aeq と m 要素のベクトル beq を入力します。
線形不等式制約で説明した引数 A
および b
の場合と同じように、引数 Aeq
および beq
での線形等式制約を渡します。