メインコンテンツ

すべての制約タイプの使用方法

R2026b

この例は、すべての制約タイプが利用できる非線形最小化問題を示します。この例では勾配を使用しません。

この問題には x(1) から x(5) までの 5 つの変数があります。目的関数は、それらの変数の多項式です。

f(x)=6x2x5+7x1x3+3x22.

目的関数はローカル関数 myobj(x) 内にあり、関数 fullexample 内で入れ子になっています。同様に、非線形制約関数 myconstr には非線形不等式制約と非線形等式制約の両方があり、fullexample 内で入れ子になっています。

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 [ineqnonlin, eqnonlin] = myconstr(x)

        ineqnonlin = [x(1) - 0.2*x(2)*x(5) - 71
            0.9*x(3) - x(4)^2 - 67];
        eqnonlin = 3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875;
    end
end

非線形制約は多項式です。

x1-0.2x2x5≤71

0.9x3-x42≤67

3x22x5+3x12x3=20.875.

この問題では、x3 と x5 に範囲指定があります。

0≤x3≤20, x5≥1.

この問題には線形等式制約 x1=0.3x2 があり、これは x1-0.3x2=0 として記述できます。

この問題には次の 3 つの線形不等式制約もあります。

0.1x5≤x4x4≤0.5x50.9x5≤x3.

範囲および線形制約を行列およびベクトルとして表します。これらの配列を作成するコードは、関数 fullexample 内にあります。fmincon の入力引数セクションで説明するように、lb ベクトルと ub ベクトルは、次の制約を表します。

lb ≤x≤ 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.

<stopping criteria details>
x = 5×1

    0.6114
    2.0380
    1.3948
    0.1572
    1.5498

fval = 
37.3806
exitflag = 
1

終了フラグ値が 1 であれば、fmincon がすべての制約を満たす局所的最小値に収束するということを示しています。

参考

トピック