線形制約
線形制約とは
いくつかの最適化ソルバーは線形制約、つまり解 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 を列ベクトルとして線形制約に渡します。行列引数を参照してください。
より複雑な線形制約の例については、線形計画法の設定、ソルバーベースを参照してください。
中間の反復は線形制約に違反する可能性があります。反復は制約に違反する可能性ありを参照してください。
線形範囲制約
R2026a 以降では、linprog ソルバーおよび intlinprog ソルバーに対して、2 要素 cell 配列を使用して線形不等式の下限と上限を指定できます。A と {bl,b} を線形制約として渡すと、ソルバーによって以下が適用されることになります。
たとえば、次の不等式について考えます。
| –2 ≤ x1 + 2x3 ≤ 4, x2 – 3x3 ≥ –2, x1 – x2 + x3 – x4 ≤ 8 | (1) |
次の配列を入力することによって、不等式を指定します。
A = [1 0 2 0;
0 1 -3 0;
1 -1 1 -1];
bl = [-2 -2 -inf];
b = [4 inf 8]; % Pass the range constraints as {bl,b}下限の範囲の指定がない 3 行目の不等式などについては、それぞれ -inf を bl の値として指定します。同様に、上限の範囲の指定がない 2 行目の不等式などについては、それぞれ inf を b の値として指定します。
cell 配列の構文を使用する代わりに、各不等式に ≤ 形式を使用できます。たとえば、次の 2 つの不等式は等価です。
| –2 ≤ x1 + 2x3 | (2) |
| –x1 – 2x3 ≤ 2 | (3) |
範囲制約の構文は、1 行目の不等式など、各線形式に下限と上限の両方がある場合に特に便利です。
| –2 ≤ x1 + 2x3 ≤ 4 | (4) |
bl または b が問題に適用されないことを示すには、{bl []} などの空の配列を渡します。
線形等式制約
線形等式は Aeq·x = beq の形式をもちます。これは n 要素のベクトル x をもつ m 個の等式を表します。m 行 n 列の行列 Aeq と m 要素のベクトル beq を入力します。
線形不等式制約で説明した引数 A および b の場合と同じように、引数 Aeq および beq での線形等式制約を渡します。