すべての制約タイプの使用方法
この例は、すべての制約タイプが利用できる非線形最小化問題を示します。この例では勾配を使用しません。
この問題には x(1)
から x(5)
までの 5 つの変数があります。目的関数は、それらの変数の多項式です。
.
目的関数はローカル関数 myobj(x)
内にあり、関数 fullexample
内で入れ子になっています。fullexample
のコードは、この例の終わりに掲載しています。
非線形制約も同様に多項式となります。
.
非線形制約はローカル関数 myconstr(x)
内にあり、関数 fullexample
内の入れ子になっています。
この問題では、 と に範囲指定があります。
, .
この問題には線形等式制約 があり、これは として記述できます。
この問題には次の 3 つの線形不等式制約もあります。
範囲および線形制約を行列およびベクトルとして表します。これらの配列を作成するコードは、関数 fullexample
内にあります。fmincon
の入力引数セクションで説明するように、lb
ベクトルと ub
ベクトルは、次の制約を表します。
lb
ub
.
行列 A
とベクトル b
は、次の線形不等式制約を表します。
A*x
b
,
行列 Aeq
とベクトル beq
は、次の線形等式制約を表します。
Aeq*x = b
.
すべての種類の制約条件で最小化問題を解くために、fullexample
を呼び出します。
[x,fval,exitflag] = fullexample
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 5×1
0.6114
2.0380
1.3948
0.1572
1.5498
fval = 37.3806
exitflag = 1
終了フラグ値が 1
であれば、fmincon
がすべての制約を満たす局所的最小値に収束するということを示しています。
このコードは関数 fullexample
を作成します。この関数には、入れ子関数 myobj
および myconstr
が含まれます。
function [x,fval,exitflag] = fullexample x0 = [1; 4; 5; 2; 5]; lb = [-Inf; -Inf; 0; -Inf; 1]; ub = [ Inf; Inf; 20; Inf; Inf]; Aeq = [1 -0.3 0 0 0]; beq = 0; A = [0 0 0 -1 0.1 0 0 0 1 -0.5 0 0 -1 0 0.9]; b = [0; 0; 0]; opts = optimoptions(@fmincon,'Algorithm','sqp'); [x,fval,exitflag] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub,... @myconstr,opts); %--------------------------------------------------------- function f = myobj(x) f = 6*x(2)*x(5) + 7*x(1)*x(3) + 3*x(2)^2; end %--------------------------------------------------------- function [c, ceq] = myconstr(x) c = [x(1) - 0.2*x(2)*x(5) - 71 0.9*x(3) - x(4)^2 - 67]; ceq = 3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875; end end