ドキュメンテーション

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

fseminf

半無限制約付き多変数非線形関数の最小値を計算する

以下で指定された問題の最小値を見つけます。

minxf(x) such that {Axb,Aeqx=beq,lbxub,c(x)0,ceq(x)=0,Ki(x,wi)0, 1in.

b および beq はベクトル、A および Aeq は行列、c(x)、ceq(x) および Ki(x,wi) はベクトルを返す関数、f(x) はスカラーを返す関数です。f(x)、c(x)、ceq(x) を非線形関数にすることもできます。ベクトル (または行列) Ki(x,wi) ≤ 0 は x および変数 w1,w2,...,wn の付加的な集合からなる連続関数です。変数 w1,w2,...,wn は長くても長さ 2 のベクトルです。

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

構文

x = fseminf(fun,x0,ntheta,seminfcon)
x = fseminf(fun,x0,ntheta,seminfcon,A,b)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)
x = fseminf(problem)
[x,fval] = fseminf(...)
[x,fval,exitflag] = fseminf(...)
[x,fval,exitflag,output] = fseminf(...)
[x,fval,exitflag,output,lambda] = fseminf(...)

説明

fseminf は複数変数の半無限制約付きスカラー関数の最小値を初期推定を使って探索します。目的は wi∈ℜ1 (または wi∈ℜ2)のすべての可能な値に対して、制約が満足された状態で f(x) を最小化することです。Ki(x,wi) のすべての可能な値を計算することは不可能であるため、wi に対する領域を選択して、その上で適切にサンプリングした値の集合を計算しなければなりません。

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入力引数に説明されている構造体です。

作業のエクスポートで説明されているように、最適化アプリケーションから問題をエクスポートして problem 構造体を作成します。

[x,fval] = fseminf(...) は、解 x において、目的関数 fun の値を返します。

[x,fval,exitflag] = fseminf(...) は、終了条件を記述する値 exitflag を返します。

[x,fval,exitflag,output] = fseminf(...) は最適化の情報を含む構造体 output を返します。

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

    メモ:   問題の指定された入力範囲に矛盾がない場合、出力 xx0、出力 fval[] です。

入力引数

fseminf に渡す引数の一般的な説明は 関数の引数 にあります。この節では、funnthetaoptionsseminfconproblem の各関数に固有な詳細を示します。

fun

最小化される関数です。fun はベクトル x を受け入れる関数であり、x で計算した目的関数のスカラー f を返します。関数 fun はファイルの関数ハンドルとして指定することができます。

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

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

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

fun は無名関数の関数ハンドルにもなります。

fun = @(x)sin(x''*x);

またfun の勾配を計算することもでき、さらに次のように GradObj オプションが 'on' である場合、

options = optimoptions('fseminf','GradObj','on')

関数 fun は 2 番目の出力引数に x での勾配値ベクトル g を返さなければなりません。

ntheta

半無限制約の数。

options

オプションoptions の値の関数固有の詳細を示します。

seminfcon

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

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

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

function [c,ceq,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
c = ...      % Compute nonlinear inequalities at x
ceq = ...    % Compute the nonlinear equalities at x

S は推奨サンプリング区間です。この区間を使用するかどうかは任意です。このような制約が存在しない場合には c および ceq に対して [] を返してください。

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

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

追加パラメーターの受け渡し は、必要に応じて seminfcon をパラメタライズする方法を説明します。サンプリング点の作成例 は 1 次元と 2 次元のサンプリング点の例を含んでいます。

 
 
 
problem

objective

目的関数 

x0

x の初期点 
ntheta半無限制約の数 
seminfcon半無限制約関数 

Aineq

線形不等式制約の行列 

bineq

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

Aeq

線形等式制約の行列 

beq

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

solver

'fseminf' 

options

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

出力引数

fseminf が返す引数の一般的な説明は 関数の引数 にあります。この節では、exitflaglambdaoutput の各関数に固有な詳細を示します。

exitflag

アルゴリズムが停止した理由を示す整数。以下の表は exitflag の値とそれに対応したアルゴリズムが終了した理由を示します。

1

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

4

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

5

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

0

反復回数が options.MaxIter を超えた、または関数評価の回数が options.MaxFunEvals を超えたことを示します。

-1

アルゴリズムが出力関数により停止したことを示します。

-2

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

lambda

x でのラグランジュ乗数を含む構造体 (制約タイプにより分類) です。構造体のフィールドは以下のようになります。

lower

下限 lb

upper

上限 ub

ineqlin

線形不等式

eqlin

線形等式

ineqnonlin

非線形不等式

eqnonlin

非線形等式

output

最適化に関する情報を含む構造体。構造体のフィールドは以下のようになります。

iterations

実行した反復回数

funcCount

関数評価の回数

lssteplength

探索方向に対するライン探索ステップ サイズ

stepsize

x の最終変位

algorithm

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

constrviolation

制約関数の最大値

firstorderopt

1 次の最適性の尺度

message

終了メッセージ

オプション

fseminf により使用される最適化オプションです。options を設定または変更するには optimoptions を使用します。詳細は 最適化オプション リファレンス を参照してください。

DerivativeCheck

ユーザー設定の微分 (目的関数または制約の勾配) と有限差分微分を比較選択肢は 'on' または 'off' (既定の設定) です。

Diagnostics

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

DiffMaxChange

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

DiffMinChange

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

Display

表示レベル:

  • 'off' または 'none' は出力を表示しません。

  • 'iter' は各反復の出力を表示し、既定の終了メッセージを与えます。

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

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

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

  • 'final' (既定の設定) は最終出力を表示し、既定の終了メッセージを返します。

  • 'final-detailed' は最終出力を表示し、技術的な終了メッセージを返します。

FinDiffRelStep

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

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

中央有限差分は次のとおりです。

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

スカラー FinDiffRelStep はベクトルに拡張します。前方有限差分の既定値は sqrt(eps)、中央有限差分の既定値は eps^(1/3) です。

FinDiffType

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

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

FunValCheck

目的関数値と制約値が有効であるかどうかをチェックします。'on' は目的関数または制約が complexInf、または NaN の値を返した場合にエラーを表示します。既定の 'off' ではエラーを表示しません。

GradObj

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

MaxFunEvals

可能な関数評価の最大回数 (正の整数)。既定の設定は 100*numberOfVariables です。

MaxIter

可能な反復の最大数 (正の整数)。既定値は 400 です。

MaxSQPIter

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

OutputFcn

各反復で最適化関数が呼び出すユーザー定義の関数を 1 つ以上指定します (関数ハンドルか関数ハンドルのセル配列として)。既定の設定はなし ([]) です。出力関数を参照してください。

PlotFcns

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

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

  • @optimplotfunccount は関数計算をプロットします。

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

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

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

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

カスタム プロット関数の記述については、プロット関数を参照してください。

RelLineSrchBnd

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

RelLineSrchBndDuration

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

TolCon

制約違反に関する終了許容誤差 (正のスカラー)。既定の設定は 1e-6 です。

TolConSQP

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

TolFun

関数値に関する終了許容誤差 (正のスカラー)。既定の設定は 1e-4 です。

TolX

x に関する許容誤差 (正のスカラー)。既定値は 1e-4 です。

TypicalX

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

メモ:

最適化ルーチン fseminf は、seminfcon に設定された推奨のサンプリング間隔 S を計算中に変更する場合があります。これは、効率性またはロバスト性の点から推奨間隔以外の値の方が適しているためです。また Ki(x,wi) が計算される有界領域 wi は、Ki(x,wi) の局所的最小値の数に重大な変化が起こらない限り、最適化中に変わることができます。

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

(x – 1)2

以下の制約に従います。

すべての 0 ≤ t ≤ 1 に対して 0 ≤ x ≤ 2
g(x, t) = (x – 1/2) – (t – 1/2)2 ≤ 0

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

すべての 0 ≤ t ≤ 1 に対して g(x, t) ≤ 0

は、x ≤ 1/2 を示唆します。(t – 1/2)2 ≥ 0 に注目することで以下のようになることを確認できます。

maxt g(x, t) = (x– 1/2)。

そのため、次のようになります。

x ≤ 1/2 の場合 maxt g(x, t) ≤ 0

fseminf を使用してこの問題を解くには以下のようにします。

  1. 無名関数として目的関数を記述します。

    objfun = @(x)(x-1)^2;
  2. 非線形制約 (ここでは [ ])、t の初期サンプリング間隔 (ここでは 0 から 1 まで 0.01 間隔) および半無限制約関数 g(x, t) を含む、半無限制約関数を記述します。

    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;
  3. 初期点 0.2 で fseminf を呼び出し、結果を参照します。

    x = fseminf(objfun,0.2,1,@seminfcon)
    
    Local minimum found that satisfies the constraints.
    
    Optimization completed because the objective function is
    non-decreasing in feasible directions, to within the 
    default value of the function tolerance, and constraints
    are satisfied to within the default value of the
    constraint tolerance.
    
    Active inequalities (to within options.TolCon = 1e-006):
      lower      upper     ineqlin   ineqnonlin
                                         1
    
    x =
        0.5000

制限

最小化する関数、制約、半無限制約は、共に x および w の連続関数でなければなりません。fseminf は局所的な解のみを出力する可能性があります。

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

詳細

すべて折りたたむ

アルゴリズム

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

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

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

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