このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
代理最適化オプション
アルゴリズム制御
代理最適化アルゴリズムを制御するには、次のオプションを使用します。
ConstraintTolerance
— 制約許容値は停止基準として使用されません。非線形制約に関する実現可能性を判断するために使用されます。許容値はmax(fun(x).Ineq) <= ConstraintTolerance
の場合に満たされ、それ以外の場合は違反になります。既定値は1e-3
です。InitialPoints
— 2 つの方法のいずれかで初期点を指定します。行列 — 行列の各行は初期点を表します。各行の長さは、境界
lb
またはub
内の要素の数と同じです。行数は任意です。surrogateopt
はすべての行を使用して初期サロゲートを構築します。行数がMinSurrogatePoints
より少ない場合、surrogateopt
は残りの初期点を生成します。surrogateopt
は各初期点で目的関数を評価します。構造 — 構造にはフィールド
X
が含まれ、オプションでフィールドFval
とIneq
が含まれます。X
フィールドには、各行が初期点を表す行列が含まれています。Fval
フィールドには、X
の各ポイントにおける目的関数の値を表すベクトルが含まれています。Fval
を渡すと、ソルバーが各初期ポイントで目的関数の値を評価するため、ソルバーの時間が節約されます。Ineq
フィールドには、非線形不等式制約値を含む行列が含まれています。Ineq
の各行は 1 つの初期点を表し、各列はその点における非線形制約関数の値を表します。Ineq
を渡すと、ソルバーが各初期ポイントで制約関数の値を評価するため、ソルバーの時間が節約されます。
MinSurrogatePoints
— サロゲートの構築に使用される初期ポイントの数。値が大きいほど、サロゲートの完成精度は上がりますが、サロゲートの完成にかかる時間は長くなります。surrogateopt
は、ランダム生成フェーズに切り替わるたびに、この数のランダム ポイントを作成します。代理最適化アルゴリズムを参照してください。BatchUpdateInterval
> 1 の場合、代理を作成するために使用されるランダム サンプル ポイントの最小数は、MinSurrogatePoints
とBatchUpdateInterval
のうち大きい方になります。MinSampleDistance
— このオプションはアルゴリズムの 2 つの側面を制御します。代理値の最小値を推定するフェーズでは、アルゴリズムは代理値を評価するランダムなポイントを生成します。これらのポイントのいずれかが、目的関数値が評価された以前のポイントに対して
MinSampleDistance
よりも近い場合、surrogateopt
は新しく生成されたポイントを破棄し、評価しません。surrogateopt
がすべてのランダム ポイントを破棄すると、代理を最小化しようとはせず、代わりにランダム生成フェーズに切り替わります。surrogateoptplot
プロット関数が実行されている場合、このスイッチは青い垂直線でマークされます。
BatchUpdateInterval
— このオプションは、アルゴリズムの 3 つの側面を制御します。サロゲートが更新される前の関数評価の回数。
ベクトル化された評価で渡すポイントの数。
UseVectorized
がtrue
の場合、surrogateopt
はサイズがBatchUpdateInterval
行nvar
列の行列を渡します。ここで、nvar
は問題変数の数です。マトリックスの各行は 1 つの評価ポイントを表します。最後の反復(MaxFunctionEvaluations
関数の評価が発生する反復)では、MaxFunctionEvaluations
がBatchUpdateInterval
の整数倍でない場合、surrogateopt
はBatchUpdateInterval
行未満の行列を渡します。BatchUpdateInterval
> 1 の場合、代理を作成するために使用されるランダム サンプル ポイントの最小数は、MinSurrogatePoints
とBatchUpdateInterval
のうち大きい方になります。
各バッチが完全に評価された後、出力関数とプロット関数が更新されます。
詳細については、代理最適化アルゴリズム を参照してください。
停止条件
通常、アルゴリズムは、ソルバー オプションで設定した制限に達した場合にのみ停止します。さらに、プロット関数または出力関数によってソルバーが停止されることもあります。
停止オプション | 停止テスト | 終了フラグ |
---|---|---|
MaxFunctionEvaluations | ソルバーは、 | 0 |
MaxTime | ソルバーは、最適化の開始から tic / toc で測定される MaxTime 秒に達すると停止します。ソルバーは進行中の関数評価を中断しないため、実際の計算時間は MaxTime を超える可能性があります。 | 0 |
ObjectiveLimit | 実行可能点の目的関数値が ObjectiveLimit 未満の場合、ソルバーは停止します。 | 1 |
OutputFcn または PlotFcn | OutputFcn または PlotFcn は反復を停止できます。 | -1 |
境界 lb と ub | lb のエントリが ub の対応するエントリを超える場合、境界が矛盾しているため、ソルバーは停止します。 | -2 |
コマンド ラインの表示
Display
オプションを設定して、surrogateopt
がコマンド ラインに返す内容を制御します。
'final'
— 終了メッセージのみを返します。これは既定の動作です。'iter'
— 反復表示を返します。'off'
または同等の'none'
— コマンドラインは表示されません。
反復表示では、ソルバーは次の情報を表形式で返します。
F-count
— 関数評価の回数Time(s)
— ソルバーが起動してからの経過時間(秒)Best Fval
— 得られた目的関数の最低値Current Fval
— 最新の目的関数値Trial Type
— 評価されたポイント(random
またはadaptive
のいずれか)を返すアルゴリズム。詳細については、代理最適化アルゴリズム を参照してください。
目的関数が非線形制約を返すと、Best Fval
と Current Fval
の反復表示が変化します。代わりに、タイトルは Best
と Current
となり、それぞれ 2 つの列 (Fval, Infeas)
が表示されます。
ポイントが実行可能な場合、
surrogateopt
は関数値を表示し、実行不可能な場合は-
を表示します。点が実行不可能な場合、
surrogateopt
はすべての非線形制約関数の中で最大の実行不可能性 (正の数) を表示し、関数値として-
を表示します。surrogateopt
が実行可能なポイントを見つけると、Best
列の以降のエントリには、見つかった最小の関数値のみが表示され、-
が最良の実行不可能点として表示されます。
反復表示では、ソルバーはテーブルの前に問題情報も返します。
変数の数
目的関数の種類(スカラーまたはなし)
不等式の数
出力関数
出力関数は、ソルバーを停止したり、各反復で計算を実行したりできます。出力関数を含めるには、OutputFcn
オプションを @myoutputfcn
に設定します。ここで、myoutputfcn
は次の段落で説明する構文を持つ関数です。この構文は Optimization Toolbox™ 出力関数と同じですが、x
引数と optimValues
引数の意味は異なります。これらの出力関数の詳細については、出力関数とプロット関数の構文 を参照してください。出力関数の例については、surrogateopt を使用した最適なコンポーネントの選択 を参照してください。
出力関数の構文は次のとおりです。
stop = outfun(x,optimValues,state)
surrogateopt
は、各反復で x
、optimValues
、state
の値を出力関数 (この場合は outfun
) に渡します。出力関数は、surrogateopt
を停止するかどうかを示すブール値 (true
または false
) である stop
を返します。
x
— 入力引数x
は、これまでに見つかった最良のポイント、つまり目的関数の値が最も低いポイントです。optimValues
— この入力引数は、次のフィールドを含む構造体です。これらのフィールドの詳細については、代理最適化アルゴリズム を参照してください。
optimValues
構造体
フィールド名 | 内容 |
---|---|
constrviolation | 最適点の最大制約違反、max(optimValues.ineq) |
currentConstrviolation | 現在のポイントの最大制約違反、max(optimValues.currentIneq) |
currentFlag | 現在のポイントがどのように作成されたか。
|
currentFval | 現在の時点での目的関数値 |
currentIneq | 現在の点の制約違反ベクトル、fun(currentX).Ineq |
currentX | 現在の点 |
elapsedtime | ソルバーが開始してからの経過時間(秒) |
flag | 最高のポイントが生まれた経緯
|
funccount | 目的関数評価の総数 |
fval | 遭遇した最低目的関数値 |
incumbentConstrviolation | 現在のポイントの最大制約違反、max(optimValues.incumbentIneq) |
incumbentIneq | 現時点の制約違反ベクトル、fun(incumbentX).Ineq |
incumbentFlag | 現職ポイントの作り方
|
incumbentFval | 現時点における目的関数値 |
incumbentX | 現行のポイント、つまりランダムサンプリングへの最後のフェーズシフト以降に見つかった最良のポイント |
ineq | 最適点の制約違反ベクトル、fun(x).Ineq |
iteration | 完了した反復回数。 |
surrogateReset | 現在の反復がモデルをリセットし、ランダム サンプリングに切り替えることを示すブール値 |
surrogateResetCount |
|
state
— この入力引数はアルゴリズムの状態であり、次のいずれかの値として指定されます。'init'
— アルゴリズムは最初の反復の前の初期状態にあります。アルゴリズムがこの状態にあるときは、プロット軸やその他のデータ構造を設定したり、ファイルを開いたりすることができます。メモ
state
が'init'
の場合、入力引数x
とoptimValues.fval
は空 ([]
) になります。これは、surrogateopt
が時間のかかる目的関数用に設計されており、初期化ステップを呼び出す前に目的関数を評価しないためです。'iter'
— アルゴリズムは目的関数を評価しました。アルゴリズムがこの状態にあるときに、ほとんどの計算を実行し、ほとんどの表示を表示します。'done'
— アルゴリズムは最終的な目的関数の評価を実行しました。アルゴリズムがこの状態にあるときは、ファイルを閉じたり、プロットを終了したり、その他の方法でsurrogateopt
を停止する準備をすることができます。
プロット機能
プロット関数は各反復で情報を表示します。プロット上のボタンをクリックすると、ソルバーを一時停止または停止できます。プロット関数を含めるには、PlotFcn
オプションを関数名または関数ハンドル、あるいは関数名またはハンドルのセル配列に設定して関数をプロットします。組み込みのプロット関数は次の 4 つです。
'optimplotfvalconstr'
(デフォルト) — 見つかった最適な実行可能な目的関数値を折れ線グラフとしてプロットします。目的関数がない場合は、最大の非線形制約違反を折れ線グラフとしてプロットします。プロットでは、実行不可能なポイントが 1 つの色で表示され、実行可能なポイントが別の色で表示されます。
目的関数がない場合、プロットのタイトルには実行可能なソリューションの数が表示されます。
'optimplotfval'
— 最適な関数値を表示します。プロット関数を選択しない場合、surrogateopt
は@optimplotfval
を使用します。'optimplotx'
— 見つかった最良のポイントを棒グラフとして表示します。'surrogateoptplot'
— 現在の目的関数値、最適な関数値、およびアルゴリズム フェーズに関する情報を表示します。surrogateoptplotを解釈するを参照してください。
出力関数 の構文を使用してカスタム プロット関数を記述できます。たとえば、MATLAB® コマンド ラインに type surrogateoptplot
と入力して、surrogateoptplot
のコードを確認します。
並列計算
UseParallel
オプションを true
に設定すると、surrogateopt
は並列で計算されます。並列計算には Parallel Computing Toolbox™ ライセンスが必要です。詳細については、代理最適化アルゴリズム を参照してください。
UseParallel = true
と UseVectorized = true
の両方を指定することはできません。両方を true
に設定すると、ソルバーは UseVectorized
を無視し、可能であれば並列プールを使用して並列計算を試みます。
ベクトル化コンピューティング
UseVectorized
オプションを true
に設定すると、surrogateopt
は目的関数に行列を渡します。マトリックスの各行は、評価する 1 つのポイントを表します。行列には options.BatchUpdateInterval
行がありますが、最終反復中に行列の行数が減る場合があります。カスタム並列シミュレーションのためのベクトル化サロゲート最適化 に示すように、このオプションはカスタム並列コンピューティングに使用します。
UseParallel = true
と UseVectorized = true
の両方を指定することはできません。両方を true
に設定すると、ソルバーは UseVectorized
を無視し、可能であれば並列プールを使用して並列計算を試みます。
チェックポイントファイル
CheckpointFile
オプションを使用してチェックポイント ファイルの名前を設定すると、surrogateopt
は各反復後にファイルにデータを書き込みます (最後のデータ書き込みから少なくとも 10 秒が経過しているか、これが最後の書き込みである場合)。これにより、関数は現在の状態から最適化を再開できるようになります。再起動すると、surrogateopt
は以前に評価されたポイントでの目的関数値を評価しません。
チェックポイント ファイルは、"C:\Documents\MATLAB\check1.mat"
などのファイル パス、または 'checkpoint1June2019.mat'
などのファイル名にすることができます。パスなしでファイル名を指定すると、surrogateopt
はチェックポイント ファイルを現在のフォルダーに保存します。
最適化を再開するときに変更できるのは次のオプションのみです。
BatchUpdateInterval
CheckpointFile
Display
MaxFunctionEvaluations
MaxTime
MinSurrogatePoints
ObjectiveLimit
OutputFcn
PlotFcn
UseParallel
UseVectorized
チェックポイント ファイルから最適化を再開するには、ファイル名を最初の引数として surrogateopt
を呼び出します。
[x,fval,exitflag,output] = surrogateopt('check1.mat')
新しいオプションを使用して最適化を再開するには、新しいオプションを 2 番目の引数として含めます。
opts = optimoptions(options,'MaxFunctionEvaluations',500); [x,fval,exitflag,output] = surrogateopt('check1.mat',opts)
再起動中、surrogateopt
は元の関数評価に基づいて、出力関数とプロット関数を実行します。たとえば、すでに実行された最適化に基づいて別のプロットを作成できます。チェックポイント ファイルの操作を参照してください。
メモ
surrogateopt
は、状態のすべての詳細をチェックポイント ファイルに保存しません。したがって、後続の反復は、チェックポイントの状態で停止せずにソルバーが実行する反復とは異なる場合があります。
警告
異なる MATLAB バージョンで作成されたチェックポイント ファイルから surrogateopt
を再開しないでください。surrogateopt
はエラーをスローしたり、矛盾した結果を返したりする可能性があります。