Main Content

ラグランジュ乗数構造体

制約付き最適化は、1 次の最適性の尺度で説明しているようにラグランジュ乗数の集合を含みます。ソルバーは推定されたラグランジュ乗数を構造体に出力します。慣例的にラグランジュ乗数の記号はギリシャ文字の lambda (λ) であるため、この構造体は lambda と呼ばれます。この構造体では乗数を以下のタイプのフィールドに分割しています。

  • lower 下限

  • upper 上限

  • eqlin 線形等式

  • ineqlin 線形不等式

  • eqnonlin 非線形等式

  • ineqnonlin 非線形不等式

  • soc (2 次錐制約に関連)

たとえば、ラグランジュ乗数構造体の非線形不等式フィールドにアクセスするには、lambda.inqnonlin と入力します。下限に関連するラグランジュ乗数の 3 要素目にアクセスするには、lambda.lower(3) と入力します。

ラグランジュ乗数構造体のコンテンツはソルバーにより異なります。たとえば、線形計画法は非線形性をもたないため、eqnonlin または ineqnonlin のフィールドはもちません。適用可能な各ソルバー関数のリファレンス ページには、「出力」見出しの下にラグランジュ乗数構造体の説明が記述されています。

線形不等式制約と非線形不等式制約および範囲指定がある非線形問題の解を求めるラグランジュ乗数構造体を確認します。

lb = [-3 -3]; % lower bounds
ub = [3 3]; % upper bounds
A = [1 1]; % linear inequality x(1) + x(2) <= 1
b = 1;
Aeq = [];
beq = [];
x0 = [-1 1];
fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; % Rosenbrock function
nlcons = @(x)deal(x(1)^2 + x(2)^2 - 1,[]); % nonlinear inequality
options = optimoptions('fmincon','Display','off');
[x,fval,exitflag,output,lambda] = ...
    fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcons,options);

disp(lambda)
         eqlin: [0×1 double]
      eqnonlin: [0×1 double]
       ineqlin: 0.3407
         lower: [2×1 double]
         upper: [2×1 double]
    ineqnonlin: 1.7038e-07

ラグランジュ乗数構造体の解釈を以下に示します。

  • 線形等式制約と非線形等式制約がないため、lambda.eqlin および lambda.eqnonlin フィールドのサイズは 0 になります。

  • lambda.ineqlin フィールドの値は 0.3407 です。これは、線形不等式制約がアクティブであることを示します。線形不等式制約は x(1) + x(2) <= 1 です。解で制約がアクティブになっている、つまり解によって不等式が等式になることを確認します。

    x(1) + x(2)
    ans =
    
        1.0000
  • lambda.lower および lambda.upper フィールドの値を確認します。

    lambda.lower
    ans =
    
       1.0e-07 *
    
        0.2210
        0.2365
    lambda.upper
    ans =
    
       1.0e-07 *
    
        0.3361
        0.3056

    これらの値は実質的に 0 です。これは、解が範囲に近くないことを示します。

  • lambda.ineqnonlin フィールドの値は 1.7038e-07 です。これは、この制約がアクティブでないことを示します。制約 (ここでは x(1)^2 + x(2)^2 <= 1) を確認します。

    x(1)^2 + x(2)^2
    ans =
    
        0.5282

    非線形制約関数の値が制限値に近くないため、ラグランジュ乗数はほぼ 0 になります。

関連するトピック