ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

非線形不等式制約

この例では、非線形不等式制約を使ってスカラー最小化の問題を解く方法を示します。次式を解く x を求めます。

(6-57)

以下の制約に従います。

x1x2 – x1 – x2 ≤ –1.5,
x1x2 ≥ –10.

いずれの制約も線形でないため、制約をコマンド ラインで fmincon に渡すことができません。代わりに、2 つ目のファイル confun.m を作成して、ベクトル c の中に現在の x における両方の制約の値を返します。このとき、制約付きオプティマイザー fmincon を呼び出します。fmincon は c(x) ≤ 0 の形式で記述される制約を前提としているため、次のように制約を書き直す必要があります。

x1x2 – x1 – x2 + 1.5 ≤ 0,
–x1x2 –10 ≤ 0.
(6-58)

手順 1: 目的関数のファイル objfun.m を記述します。

function f = objfun(x)
f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);

手順 2: 制約のファイル confun.m を記述します。

function [c, ceq] = confun(x)
% Nonlinear inequality constraints
c = [1.5 + x(1)*x(2) - x(1) - x(2);     
     -x(1)*x(2) - 10];
% Nonlinear equality constraints
ceq = [];

手順 3: 制約付き最適化ルーチンの呼び出し

x0 = [-1,1];     % Make a starting guess at the solution
options = optimoptions(@fmincon,'Algorithm','sqp');
[x,fval] = ... 
fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);

fmincon では、関数値 x で解 fval が生成されます。

x,fval
x = 
   -9.5474  1.0474 
fval =
    0.0236

解 x の点での制約量も計算できます。

[c,ceq] = confun(x)

これは以下のようにゼロに近い数を出力します。

c =

   1.0e-14 *

   -0.6661
    0.7105


ceq =

     []

両制約値とも小さい許容誤差内にあり 0 以下であることに注意してください。すなわち x は c(x) ≤ 0 を満たします。

この情報は役に立ちましたか?