メインコンテンツ

fseminf

R2026b

半無限制約付き多変数非線形最小化問題を解く

説明

fseminf は、以下で指定された問題の最小値を見つける非線形計画法ソルバーです。

minxf(x) such that {A⋅x≤bAeq⋅x=beqlb≤x≤ubineqnonlin(x)≤0,eqnonlin(x)=0,Ki(x,wi)≤0, 1≤i≤n.

  • b と beq はベクトルです。

  • A と Aeq は行列です。

  • ineqnonlin(x)、eqnonlin(x)、および Ki(x,wi) はベクトルを返す関数です。

  • f(x) はスカラーを返す関数です。

f(x)、ineqnonlin(x)、および eqnonlin(x) は非線形関数とすることができます。ベクトル (または行列) Ki(x,wi) ≤ 0 は x および変数 w1,w2,...,wn の付加的な集合から成る連続関数です。変数 w1,w2,...,wn は長くても長さ 2 のベクトルです。

x、lb および ub はベクトルまたは行列として渡すことができます。行列引数を参照してください。

x = fseminf(fun,x0,ntheta,seminfcon) は、x0 を開始値として、seminfcon に定義する半無限制約 ntheta により制約を受けた関数 fun の最小化関数を求めます。

例

x = fseminf(fun,x0,ntheta,seminfcon,A,b) はまた、線形不等式 A*x ≤ b も満たすように試みます。

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq) は線形等式 Aeq*x = beq を制約とした最小化も行います。不等式が存在しない場合は A = [] および b = [] と設定してください。

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub) は、解が常に lb ≤ x ≤ ub の範囲に存在するように、設計変数 x に上限と下限を定義します。

x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options) は、options で指定された最適化オプションを使って最小化します。optimoptions を使用してこれらのオプションを設定してください。

x = fseminf(problem) は、problem で説明されている構造体 problem の最小値を求めます。

[x,fval] = fseminf(___) は、前記のすべての入力構文に対して、解 x で目的関数 fun の値を返します。

メモ

問題の指定された入力範囲が矛盾する場合、出力 x は x0、出力 fval は [] です。

[x,fval,exitflag,output] = fseminf(___) は、終了条件を記述する値 exitflag および最適化プロセスに関する情報を含む構造体 output も返します。

例

[x,fval,exitflag,output,lambda] = fseminf(___) は、解 x におけるラグランジュ乗数をフィールドに含む、構造体 lambda を返します。

例

例

すべて折りたたむ

次の関数を最小化します。

(x-1)2,

以下の制約に従います。

0≤x≤2

g(x,t)=(x-1/2)-(t-1/2)2≤0 (すべての 0≤t≤1 について)

制約なしの目的関数は x=1 で最小化されます。ただし、次の制約

g(x,t)≤0 (すべての 0≤t≤1 について)

は、x≤1/2 を意味します。つまり、(t-1/2)2≥0 であることから、

maxtg(x,t)=x-1/2.

したがって次のようになります。

x≤1/2 のとき maxtg(x,t)≤0

fseminf を使用してこの問題を解くには、無名関数として目的関数を記述します。

objfun = @(x)(x-1)^2;

非線形制約 [ ]、t の初期サンプリング間隔 (0 から 1 まで 0.01 間隔) および半無限制約関数 g(x,t) を含む、半無限制約関数 seminfcon を記述します。関数 seminfcon のコードは、この例の終わりに掲載しています。

初期点 x0 = 0.2 を設定します。

x0 = 0.2;

半無限制約を 1 つ指定します。

ntheta = 1;

fseminf を呼び出して問題を解き、結果を表示します。

x = fseminf(objfun,x0,ntheta,@seminfcon)
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 = 
0.5000

次のコードは関数 seminfcon を作成します。

function [ineqnonlin,eqnonlin,K1,s] = seminfcon(x,s)

% No finite nonlinear inequality and equality constraints
ineqnonlin = [];
eqnonlin = [];

% Sample set
if isnan(s)
    % Initial sampling interval
    s = [0.01 0];
end
t = 0:s(1):1;

% Evaluate the semi-infinite constraint
K1 = (x - 0.5) - (t - 0.5).^2;
end

次の関数を最小化します。

(x-1)2,

以下の制約に従います。

0≤x≤2

g(x,t)=(x-1/2)-(t-1/2)2≤0 (すべての 0≤t≤1 について)

この問題は、例半無限制約のある関数の最小化で定式化して解きます。解および解法プロセスに関する詳細については、この例にまとめています。

fseminf を使用してこの問題を解くには、無名関数として目的関数を記述します。

objfun = @(x)(x-1)^2;

非線形半無限制約関数 seminfcon のコードは、この例の終わりに掲載しています。

初期点 x0 = 0.2 を設定します。

x0 = 0.2;

半無限制約を 1 つ指定します。

ntheta = 1;

fseminf を呼び出して問題を解き、結果を表示します。

A = [];
b = [];
Aeq = [];
beq = [];
lb = 0;
ub = 2;
[x,fval,exitflag,output,lambda] = fseminf(objfun,x0,ntheta,@seminfcon,...
    A,b,Aeq,beq,lb,ub)
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 = 
0.5000
fval = 
0.2500
exitflag = 
1
output = struct with fields:
         iterations: 2
          funcCount: 4
       lssteplength: 1
           stepsize: 4.6841e-12
          algorithm: 'active-set'
      firstorderopt: 9.3682e-12
    constrviolation: 4.6841e-12
            message: '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>↵↵Optimization completed: The first-order optimality measure, 9.368173e-12, is less↵than options.OptimalityTolerance = 1.000000e-04, and the maximum constraint violation,↵4.684060e-12,is less than options.ConstraintTolerance = 1.000000e-06.'

lambda = struct with fields:
         lower: 0
         upper: 0
         eqlin: [0×1 double]
      eqnonlin: [0×1 double]
       ineqlin: [0×1 double]
    ineqnonlin: [1×0 double]

返された情報から次のことがわかります。

  • 問題の解は x=1/2 において得られた。

  • 目的関数 (x-1)2 値は 1/4 である。

  • ソルバーは反復を 2 回行い、関数評価を 4 回行ったところで解に到達した。

  • 半無限制約以外の制約は範囲のみであるため、lambda 構造体は線形値も非線形値ももたない。解がどちらの境界にもないため、範囲に対応する lambda.lower フィールドと lambda.upper フィールドは空ではなく、ゼロ値をもつ。

次のコードは関数 seminfcon を作成します。

function [c, ceq, K1, s] = seminfcon(x,s)

% No finite nonlinear inequality and equality constraints
c = [];
ceq = [];

% Sample set
if isnan(s)
    % Initial sampling interval
    s = [0.01 0];
end
t = 0:s(1):1;

% Evaluate the semi-infinite constraint
K1 = (x - 0.5) - (t - 0.5).^2;
end

入力引数

すべて折りたたむ

最小化する関数。関数ハンドルまたは関数名として指定されます。fun は、ベクトルまたは配列 x を受け、x で評価される目的関数の実数スカラー f を返す関数です。

fseminf は、目的関数および任意の非線形制約関数に x0 引数の形式で x を渡します。たとえば、x0 が 5 行 3 列の配列の場合、fseminf は 5 行 3 列の配列として x を fun に渡します。ただし、fseminf は、x を列ベクトル x(:) に変換してから、線形制約行列 A または Aeq を x と乗算します。

fun をファイルの関数ハンドルとして指定します。

x = fseminf(@myfun,...)

ここで myfun は次のような MATLAB® 関数です。

function f = myfun(x)
f = ...            % Compute function value at x

fun は、無名関数の関数ハンドルとして指定することもできます。

x = fseminf(@(x)norm(x)^2,...);

fun の勾配を計算することができ、"さらに" 次のように SpecifyObjectiveGradient オプションが true に設定されている場合、

options = optimoptions("fseminf",SpecifyObjectiveGradient=true);
fun は 2 番目の出力引数に勾配ベクトル g(x) を出力しなければなりません。

例: fun = @(x)sin(x(1))*cos(x(2))

データ型: char | function_handle | string

初期点。実数ベクトルまたは実数配列として指定されます。ソルバーは、x0 の要素数および x0 のサイズを使用して、fun が受け入れる変数の数およびサイズを決定します。

例: x0 = [1,2,3,4]

データ型: double

半無限制約の数。正の整数として指定します。

例: 4

データ型: double

非線形不等式制約のベクトル ineqnonlin、非線形等式制約のベクトル eqnonlin および点 x において区間 S で計算される K1, K2,..., Kntheta である ntheta 個の半無限制約 (ベクトルあるいは行列) を演算する関数です。seminfcon は関数ハンドルとして指定できます。

x = fseminf(@myfun,x0,ntheta,@myinfcon)

ここで myinfcon は次のような MATLAB 関数です。

function [ineqnonlin,eqnonlin,K1,K2,...,Kntheta,S] = myinfcon(x,S)
% Initial sampling interval
if isnan(S(1,1)),
   S = ... % S has ntheta rows and 2 columns
end
w1 = ... % Compute sample set
w2 = ... % Compute sample set 
...
wntheta = ... % Compute sample set
K1 = ... % 1st semi-infinite constraint at x and w
K2 = ... % 2nd semi-infinite constraint at x and w
...
Kntheta = ... % Last semi-infinite constraint at x and w
ineqnonlin = ... % Compute nonlinear inequalities at x
eqnonlin = ... % Compute nonlinear equalities at x

S は推奨サンプリング区間です。関数が使用しない場合があります。このような制約が存在しない場合には ineqnonlin および eqnonlin に対して [] を返してください。

ベクトルまたは行列 K1, K2, ..., Kntheta は、独立変数 w1, w2, ..., wntheta に個々にサンプリングした値の集合に対して計算した半無限制約を含みます。2 列行列 S は K1, K2, ..., Kntheta の評価に使用する値 w1, w2, ..., wntheta に対する推奨サンプリング区間を含みます。S の i 番目の行は Ki を計算するための推奨サンプリング区間を含みます。Ki がベクトルである場合、関数は S(i,1) のみを使用します (2 列目をすべてゼロにすることができます)。Ki が行列である場合、関数は Ki 行のサンプリングに S(i,2) を使用し、Ki の列のサンプリング区間に S(i,1) を使用します (2 次元の半無限制約を参照)。最初の反復で S は NaN であるため、seminfcon により任意の初期サンプリング区間を決める必要があります。

メモ

Optimization Toolbox™ の関数が double 型の入力のみを受け入れるため、ユーザーが指定した目的関数と非線形制約関数は double 型の出力を返さなければなりません。

seminfcon をパラメーター化する方法については、必要に応じて追加パラメーターの受け渡しを参照してください。1 次元と 2 次元のサンプリング点の例については、サンプリング点の作成例を参照してください。

実数行列として指定される線形不等式制約です。A は M 行 N 列の行列で、M は不等式の数、N は変数の数 (x0 の要素数) です。スパース データをサポートするアルゴリズムを使用する大規模な問題の場合は、A をスパース行列として渡します。最適化アルゴリズムのスパース性を参照してください。

A は M 個の線形不等式を符号化します。

A*x <= b,(1)

ここで、x は N 個の変数 x(:) の列ベクトル、b は M 個の要素をもつ列ベクトルです。

たとえば、次の不等式を考えてみましょう。

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30
(2)

次の制約を入力することによって、不等式を指定します。

A = [1,2;3,4;5,6];
b = [10;20;30];

例: x の成分の和が 1 以下であることを指定するには、A = ones(1,N) と b = 1 を使用します。

データ型: double

実数ベクトルで指定される線形不等式制約です。b は、行列 A に関連する M 要素ベクトルです。b を行ベクトルとして渡す場合、ソルバーは b を列ベクトル b(:) に内部的に変換します。

b は M 個の線形不等式を符号化します。

A*x <= b,(3)

ここで、x は N 個の変数 x(:) の列ベクトル、A は M 行 N 列の行列です。

たとえば、次の不等式を考えてみましょう。

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30
(4)

次の制約を入力することによって、不等式を指定します。

A = [1,2;3,4;5,6];
b = [10;20;30];

例: x の成分の和が 1 以下であることを指定するには、A = ones(1,N) と b = 1 を使用します。

データ型: double

実数行列として指定される線形等式制約です。Aeq は Me 行 N 列の行列で、Me は等式の数、N は変数の数 (x0 の要素数) です。スパース データをサポートするアルゴリズムを使用する大規模な問題の場合は、A をスパース行列として渡します。最適化アルゴリズムのスパース性を参照してください。

Aeq は Me 個の線形等式を符号化します。

Aeq*x = beq,(5)

ここで、x は N 個の変数 x(:) の列ベクトル、beq は Me 個の要素をもつ列ベクトルです。

たとえば、次の不等式を考えてみましょう。

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20
(6)

次の制約を入力することによって、不等式を指定します。

Aeq = [1,2,3;2,4,1];
beq = [10;20];

例: x の成分の和が 1 であることを指定するには、Aeq = ones(1,N) と beq = 1 を使用します。

データ型: double

実数ベクトルで指定される線形等式制約です。beq は、行列 Aeq に関連する Me 要素ベクトルです。beq を行ベクトルとして渡す場合、ソルバーはこれを列ベクトル beq(:) に内部的に変換します。

beq は Me 個の線形等式を符号化します。

Aeq*x = beq,(7)

ここで、x は N 個の変数 x(:) の列ベクトル、Aeq は Me 行 N 列の行列です。

たとえば、次の等式を考えてみましょう。

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20
(8)

次の制約を入力することによって、等式を指定します。

Aeq = [1,2,3;2,4,1];
beq = [10;20];

例: x の成分の和が 1 であることを指定するには、Aeq = ones(1,N) と beq = 1 を使用します。

データ型: double

下限。実数ベクトルまたは実数配列として指定されます。x0 の要素数と lb の要素数が等しい場合、lb は次を指定します。

x(i) &gt;= lb(i) (すべての i について)(9)

numel(lb) < numel(x0) の場合、lb は次を指定します。

x(i) &gt;= lb(i) (1 <= i <= numel(lb))(10)

lb の要素数が x0 より少ない場合、ソルバーは警告を生成します。

例: x のすべての成分が正であることを指定するには、lb = zeros(size(x0)) を使用します。

データ型: double

実数ベクトルまたは実数配列として指定される上限です。x0 の要素数と ub の要素数が等しい場合、ub は次を指定します。

x(i) <= ub(i) (すべての i について)(11)

numel(ub) < numel(x0) の場合、ub は次を指定します。

x(i) <= ub(i) (1 <= i <= numel(ub))(12)

ub の要素数が x0 より少ない場合、ソルバーは警告を生成します。

例: x のすべての成分が 1 未満であることを指定するには、ub = ones(size(x0)) を使用します。

データ型: double

最適化オプション。optimoptions の出力、または optimset などによって返される構造体として指定されます。詳細については、最適化オプション リファレンスを参照してください。

一部のオプションは、optimoptions に表示されません。このようなオプションは、次の表ではイタリックで示されています。詳細については、最適化オプションの表示を参照してください。

オプション説明
ConstraintTolerance

制約違反に関する終了許容誤差 (非負のスカラー)。既定値は 1e-6 です。許容誤差と停止条件を参照してください。

optimset の場合、名前は TolCon です。新旧のオプション名を参照してください。

Diagnostics

最小化または計算する関数に関する情報を表示します。選択肢は "on" または "off" (既定の設定) です。

DiffMaxChange

有限差分勾配を計算する場合に変数内で生じる最大変化量です (正のスカラー)。既定値は Inf です。

DiffMinChange

有限差分勾配を計算する場合に変数内で生じる最小変化量です (正のスカラー)。既定値は 0 です。

Display

表示レベル (反復表示を参照):

  • "off" または "none" — 出力を表示しない。

  • "iter" — 各反復の出力を表示し、既定の終了メッセージを与える。

  • "iter-detailed" — 各反復の出力を表示し、技術的な終了メッセージを与える。

  • "notify" — 関数が収束しない場合にのみ出力を表示し、既定の終了メッセージを与える。

  • "notify-detailed" — 関数が収束しない場合にのみ出力を表示し、技術的な終了メッセージを与える。

  • "final" (既定の設定) — 最終出力のみを表示し、既定の終了メッセージを与える。

  • "final-detailed" — 最終出力のみを表示し、技術的な終了メッセージを与える。

FiniteDifferenceStepSize

有限差分のスカラーまたはベクトルのステップ サイズ ファクター。FiniteDifferenceStepSize をベクトル v に設定すると、前方有限差分 delta は次のようになります。

delta = v.*sign′(x).*max(abs(x),TypicalX);

ここで、sign′(0) = 1 を除き sign′(x) = sign(x) です。中心有限差分は次のようになります。

delta = v.*max(abs(x),TypicalX);

スカラー FiniteDifferenceStepSize はベクトルに展開されます。既定値は、前進有限差分法では sqrt(eps)、中心有限差分法では eps^(1/3) です。

optimset の場合、名前は FinDiffRelStep です。新旧のオプション名を参照してください。

FiniteDifferenceType

勾配推定に使用される有限差分は "forward" (既定の設定) または "central" (中心) のいずれかです。"central" では 2 倍の関数評価が必要になりますが、正確性が増す可能性があります。

アルゴリズムは有限差分の両方のタイプを推定するとき、範囲に注意深く従います。たとえば、範囲外の点を計算しないようにするため、アルゴリズムは forward 差分ではなく backward 差分を選択する場合があります。

optimset の場合、名前は FinDiffType です。新旧のオプション名を参照してください。

FunctionTolerance

関数値に関する終了許容誤差 (非負のスカラー)。既定値は 1e-4 です。許容誤差と停止条件を参照してください。

optimset の場合、名前は TolFun です。新旧のオプション名を参照してください。

FunValCheck

目的関数値および制約値が正しいかどうかチェックします。"on" に設定すると、目的関数または制約が complex、Inf、または NaN の値を返す場合にエラーが表示されます。既定の "off" ではエラーを表示しません。

MaxFunctionEvaluations

関数評価の最大許容回数 (非負の整数)。既定値は 100*numberOfVariables です。詳細については、許容誤差と停止条件および反復と関数カウントを参照してください。

optimset の場合、名前は MaxFunEvals です。新旧のオプション名を参照してください。

MaxIterations

反復の最大許容回数 (非負の整数)。既定値は 400 です。詳細については、許容誤差と停止条件および反復と関数カウントを参照してください。

optimset の場合、名前は MaxIter です。新旧のオプション名を参照してください。

MaxSQPIter

SQP 反復の最大数 (正の整数)。既定値は 10*max(numberOfVariables, numberOfInequalities + numberOfBounds) です。

OptimalityTolerance

1 次の最適性に関する終了許容誤差 (非負のスカラー)。既定値は 1e-6 です。1 次の最適性の尺度を参照してください。

optimset の場合、名前は TolFun です。新旧のオプション名を参照してください。

OutputFcn

各反復で最適化関数に呼び出されるユーザー定義の関数を 1 つ以上指定します。関数ハンドルか、関数ハンドルの cell 配列を渡します。既定の設定はなし ([]) です。出力関数とプロット関数の構文を参照してください。

PlotFcn

アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか、独自のコードを記述してください。名前、関数ハンドル、または名前か関数ハンドルの cell 配列を渡します。カスタム プロット関数の場合は、関数ハンドルを渡します。既定の設定はなし ([]) です。

  • "optimplotx" は現在の点をプロットします。

  • "optimplotfunccount" は関数カウントをプロットします。

  • "optimplotfval" は関数値をプロットします。

  • "optimplotfvalconstr" は検出された実行可能な最良の目的関数値をプロットします。このプロットでは、実行可能性の許容誤差を 1e-6 として、実行不可能点をある色で、実行可能点を別の色で示します。

  • "optimplotconstrviolation" は最大制約違反をプロットします。

  • "optimplotstepsize" はステップ サイズをプロットします。

  • "optimplotfirstorderopt" は 1 次の最適性尺度をプロットします。

カスタムのプロット関数は、出力関数と同じ構文を使用します。詳細については、Optimization Toolbox の出力関数および出力関数とプロット関数の構文を参照してください。

optimset の場合、名前は PlotFcns です。新旧のオプション名を参照してください。

RelLineSrchBnd

x の変位合計が |Δx(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|) を満たすような、直線探索ステップ長の相対範囲 (実数の非負のスカラー値)。このオプションはソルバーが fseminf にとって大きすぎるステップを取った場合に、x の変位の大きさを制御します。既定の設定は範囲なし [] です。

RelLineSrchBndDuration

RelLineSrchBnd で指定された範囲の反復数は有効になります (既定値は 1 です)。

SpecifyObjectiveGradient

ユーザーが定義する目的関数の勾配。fun の勾配の定義方法については、上述の fun の説明を参照してください。このオプションを true に設定すると、fseminf は目的関数のユーザー定義の勾配を使用します。既定の false の場合、fseminf は有限差分を使用して勾配を推定します。

optimset の場合、名前は GradObj で、値は "on" または "off" です。新旧のオプション名を参照してください。

StepTolerance

x に関する終了許容誤差 (非負のスカラー)。既定値は 1e-4 です。許容誤差と停止条件を参照してください。

optimset の場合、名前は TolX です。新旧のオプション名を参照してください。

TolConSQP

内部反復 SQP 制約違反に関する終了許容誤差。正のスカラーです。既定値は 1e-6 です。

TypicalX

典型的な x の値です。TypicalX の要素数は、開始点 x0 の要素数と等しくなります。既定値は ones(numberofvariables,1) です。fseminf では TypicalX を使用して勾配推定の有限差分をスケーリングします。

例: options = optimoptions("fseminf",PlotFcn="optimplotfval")

次のフィールドをもつ構造体として指定される問題構造体です。

フィールド名エントリ

objective

目的関数

x0

x の初期点

ntheta

半無限制約の数

seminfcon

半無限制約関数

Aineq

線形不等式制約の行列

bineq

線形不等式制約のベクトル

Aeq

線形等式制約の行列

beq

線形等式制約のベクトル
lb下限のベクトル
ub上限のベクトル

solver

"fmseminf"

options

optimoptions で作成されたオプション

problem 構造体では、少なくとも objective、x0、seminfcon、solver、および options フィールドを指定しなければなりません。

データ型: struct

出力引数

すべて折りたたむ

実数ベクトルまたは実数配列として返される解です。x のサイズは、x0 のサイズと同じです。通常、exitflag が正の場合、x は問題に対する局所的な解になります。解の質の詳細については、ソルバーが成功する場合を参照してください。

解での目的関数値。実数として返されます。一般的に、fval = fun(x) になります。

fseminf の停止理由。整数として返されます。

フラグ

説明

1

関数が解 x に収束したことを示します。

4

探索方向の大きさが指定した許容誤差より小さく、制約違反が options.ConstraintTolerance より小さいことを示します。

5

方向導関数の大きさが指定した許容誤差より小さく、制約違反が options.ConstraintTolerance より小さいことを示します。

0

反復回数が options.MaxIterations を超過、または関数評価の回数が options.MaxFunctionEvaluations を超過しています。

-1

出力関数またはプロット関数によって停止したことを示します。

-2

実行可能な点が見つかりません。

最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。

フィールド名説明
iterations

実行した反復回数

funcCount

関数評価の回数

lssteplength

探索方向に対する直線探索ステップ サイズ

stepsize

x の最終変位

algorithm

使用される最適化アルゴリズム

constrviolation

制約関数の最大値

firstorderopt

1 次の最適性の尺度

message

終了メッセージ

iterations

実行した反復回数

funcCount

関数評価の回数

解におけるラグランジュ乗数。次のフィールドをもつ構造体として返されます。

フィールド名説明
lower

lb に対応する下限

upper

ub に対応する上限

ineqlin

A および b に対応する線形不等式

eqlin

Aeq および beq に対応する線形等式

ineqnonlin

seminfcon の ineqnonlin 関数に対応する非線形不等式

eqnonlin

seminfcon の eqnonlin 関数に対応する非線形等式

制限

  • 最小化する関数、制約、半無限制約は、x および w の連続関数でなければなりません。

  • fseminf は局所解のみを出力する可能性があります。

アルゴリズム

fseminf は三次と二次の内挿法を使用して、半無限制約のピーク値を推定します。アルゴリズムは、このピーク値を使用して、関数 fmincon の場合と同様に SQP 法に与える制約の集合を形成します。制約数が変わる場合は、新しい制約集合に対して、ラグランジュ乗数の再割り当てを行います。

推奨サンプリング間隔の計算では、より多くの点が必要なのか、より少ない点が必要なのかを推定するために、データセット中のピーク値と内挿されたピーク値との間の差が使用されます。関数は、内挿の効率を、曲線を外挿し、それを曲線の他の点と比較することによっても調べることができます。ピーク値が制約境界、すなわち、ゼロに近づく際には、推奨サンプリング区間が狭くなります。

問題が実行不可能である場合、fseminf は最大制約値を最小化しようと試みます。

使用アルゴリズム、および optimoptions で Display オプションを "iter" に設定したときに Procedures 見出しの下に表示されるプロシージャのタイプの詳細については、SQP 法の実装を参照してください。fseminf アルゴリズムについての詳細については、fseminf の問題の定式化とアルゴリズムを参照してください。

バージョン履歴

R2006a より前に導入

すべて展開する