Main Content

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

代理最適化オプション

アルゴリズム制御

代理最適化アルゴリズムを制御するには、次のオプションを使用します。

  • ConstraintTolerance — 制約許容値は停止基準として使用されません。非線形制約に関する実現可能性を判断するために使用されます。許容値は max(fun(x).Ineq) <= ConstraintTolerance の場合に満たされ、それ以外の場合は違反になります。既定値は 1e-3 です。

  • InitialPoints — 2 つの方法のいずれかで初期点を指定します。

    • 行列 — 行列の各行は初期点を表します。各行の長さは、境界 lb または ub 内の要素の数と同じです。行数は任意です。surrogateopt はすべての行を使用して初期サロゲートを構築します。行数が MinSurrogatePoints より少ない場合、surrogateopt は残りの初期点を生成します。surrogateopt は各初期点で目的関数を評価します。

    • 構造 — 構造にはフィールド X が含まれ、オプションでフィールド FvalIneq が含まれます。X フィールドには、各行が初期点を表す行列が含まれています。Fval フィールドには、 X の各ポイントにおける目的関数の値を表すベクトルが含まれています。Fval を渡すと、ソルバーが各初期ポイントで目的関数の値を評価するため、ソルバーの時間が節約されます。Ineq フィールドには、非線形不等式制約値を含む行列が含まれています。Ineq の各行は 1 つの初期点を表し、各列はその点における非線形制約関数の値を表します。Ineq を渡すと、ソルバーが各初期ポイントで制約関数の値を評価するため、ソルバーの時間が節約されます。

  • MinSurrogatePoints — サロゲートの構築に使用される初期ポイントの数。値が大きいほど、サロゲートの完成精度は上がりますが、サロゲートの完成にかかる時間は長くなります。surrogateopt は、ランダム生成フェーズに切り替わるたびに、この数のランダム ポイントを作成します。代理最適化アルゴリズムを参照してください。

    BatchUpdateInterval > 1 の場合、代理を作成するために使用されるランダム サンプル ポイントの最小数は、 MinSurrogatePointsBatchUpdateInterval のうち大きい方になります。

  • MinSampleDistance — このオプションはアルゴリズムの 2 つの側面を制御します。

    • 代理値の最小値を推定するフェーズでは、アルゴリズムは代理値を評価するランダムなポイントを生成します。これらのポイントのいずれかが、目的関数値が評価された以前のポイントに対して MinSampleDistance よりも近い場合、surrogateopt は新しく生成されたポイントを破棄し、評価しません。

    • surrogateopt がすべてのランダム ポイントを破棄すると、代理を最小化しようとはせず、代わりにランダム生成フェーズに切り替わります。surrogateoptplot プロット関数が実行されている場合、このスイッチは青い垂直線でマークされます。

  • BatchUpdateInterval — このオプションは、アルゴリズムの 3 つの側面を制御します。

    • サロゲートが更新される前の関数評価の回数。

    • ベクトル化された評価で渡すポイントの数。UseVectorizedtrue の場合、surrogateopt はサイズが BatchUpdateIntervalnvar 列の行列を渡します。ここで、nvar は問題変数の数です。マトリックスの各行は 1 つの評価ポイントを表します。最後の反復(MaxFunctionEvaluations 関数の評価が発生する反復)では、MaxFunctionEvaluationsBatchUpdateInterval の整数倍でない場合、surrogateoptBatchUpdateInterval 行未満の行列を渡します。

    • BatchUpdateInterval > 1 の場合、代理を作成するために使用されるランダム サンプル ポイントの最小数は、 MinSurrogatePointsBatchUpdateInterval のうち大きい方になります。

    各バッチが完全に評価された後、出力関数とプロット関数が更新されます。

詳細については、代理最適化アルゴリズム を参照してください。

停止条件

通常、アルゴリズムは、ソルバー オプションで設定した制限に達した場合にのみ停止します。さらに、プロット関数または出力関数によってソルバーが停止されることもあります。

停止オプション停止テスト終了フラグ
MaxFunctionEvaluations

ソルバーは、MaxFunctionEvaluations 関数の評価を完了すると停止します。並列計算を行う場合、ワーカーが最終的な関数評価を返した後にソルバーはすべてのワーカーを停止し、一部の計算は不完全で未使用のままになります。

0
MaxTimeソルバーは、最適化の開始から tic / toc で測定される MaxTime 秒に達すると停止します。ソルバーは進行中の関数評価を中断しないため、実際の計算時間は MaxTime を超える可能性があります。0
ObjectiveLimit実行可能点の目的関数値が ObjectiveLimit 未満の場合、ソルバーは停止します。1
OutputFcn または PlotFcnOutputFcn または PlotFcn は反復を停止できます。-1
境界 lbublb のエントリが ub の対応するエントリを超える場合、境界が矛盾しているため、ソルバーは停止します。-2

コマンド ラインの表示

Display オプションを設定して、surrogateopt がコマンド ラインに返す内容を制御します。

  • 'final' — 終了メッセージのみを返します。これは既定の動作です。

  • 'iter' — 反復表示を返します。

  • 'off' または同等の 'none' — コマンドラインは表示されません。

反復表示では、ソルバーは次の情報を表形式で返します。

  • F-count — 関数評価の回数

  • Time(s) — ソルバーが起動してからの経過時間(秒)

  • Best Fval — 得られた目的関数の最低値

  • Current Fval — 最新の目的関数値

  • Trial Type — 評価されたポイント(random または adaptive のいずれか)を返すアルゴリズム。詳細については、代理最適化アルゴリズム を参照してください。

目的関数が非線形制約を返すと、Best FvalCurrent Fval の反復表示が変化します。代わりに、タイトルは BestCurrent となり、それぞれ 2 つの列 (Fval, Infeas) が表示されます。

  • ポイントが実行可能な場合、surrogateopt は関数値を表示し、実行不可能な場合は - を表示します。

  • 点が実行不可能な場合、surrogateopt はすべての非線形制約関数の中で最大の実行不可能性 (正の数) を表示し、関数値として - を表示します。

  • surrogateopt が実行可能なポイントを見つけると、Best 列の以降のエントリには、見つかった最小の関数値のみが表示され、- が最良の実行不可能点として表示されます。

反復表示では、ソルバーはテーブルの前に問題情報も返します。

  • 変数の数

  • 目的関数の種類(スカラーまたはなし)

  • 不等式の数

出力関数

出力関数は、ソルバーを停止したり、各反復で計算を実行したりできます。出力関数を含めるには、OutputFcn オプションを @myoutputfcn に設定します。ここで、myoutputfcn は次の段落で説明する構文を持つ関数です。この構文は Optimization Toolbox™ 出力関数と同じですが、x 引数と optimValues 引数の意味は異なります。これらの出力関数の詳細については、出力関数とプロット関数の構文 を参照してください。出力関数の例については、surrogateopt を使用した最適なコンポーネントの選択 を参照してください。

出力関数の構文は次のとおりです。

stop = outfun(x,optimValues,state)

surrogateopt は、各反復で xoptimValuesstate の値を出力関数 (この場合は outfun) に渡します。出力関数は、surrogateopt を停止するかどうかを示すブール値 (true または false) である stop を返します。

  • x — 入力引数 x は、これまでに見つかった最良のポイント、つまり目的関数の値が最も低いポイントです。

  • optimValues — この入力引数は、次のフィールドを含む構造体です。これらのフィールドの詳細については、代理最適化アルゴリズム を参照してください。

optimValues 構造体

フィールド名内容
constrviolation最適点の最大制約違反、max(optimValues.ineq)
currentConstrviolation現在のポイントの最大制約違反、max(optimValues.currentIneq)
currentFlag

現在のポイントがどのように作成されたか。

  • 'initial'options.InitialPoints で最初のポイントが通過しました

  • 'random' — 範囲内のランダムサンプル

  • 'adaptive' — 代理関数を最小化しようとするソルバーの結果

currentFval

現在の時点での目的関数値

currentIneq現在の点の制約違反ベクトル、fun(currentX).Ineq
currentX

現在の点

elapsedtime

ソルバーが開始してからの経過時間(秒)

flag

最高のポイントが生まれた経緯

  • 'initial'options.InitialPoints で最初のポイントが通過しました

  • 'random' — 範囲内のランダムサンプル

  • 'adaptive' — 代理関数を最小化しようとするソルバーの結果

funccount

目的関数評価の総数

fval

遭遇した最低目的関数値

incumbentConstrviolation現在のポイントの最大制約違反、max(optimValues.incumbentIneq)
incumbentIneq現時点の制約違反ベクトル、fun(incumbentX).Ineq
incumbentFlag

現職ポイントの作り方

  • 'initial'options.InitialPoints で最初のポイントが通過しました

  • 'random' — 範囲内のランダムサンプル

  • 'adaptive' — 代理関数を最小化しようとするソルバーの結果

incumbentFval

現時点における目的関数値

incumbentX

現行のポイント、つまりランダムサンプリングへの最後のフェーズシフト以降に見つかった最良のポイント

ineq最適点の制約違反ベクトル、fun(x).Ineq
iteration

完了した反復回数。funccount に等しい。ただし、'iter' 状態の間は iterationfunccount – 1 に等しくなります。このフィールドにより、surrogateoptは他のソルバーと同じプロット関数を使用できます。

surrogateReset

現在の反復がモデルをリセットし、ランダム サンプリングに切り替えることを示すブール値

surrogateResetCount

surrogateResettrue である合計回数

  • state — この入力引数はアルゴリズムの状態であり、次のいずれかの値として指定されます。

    • 'init' — アルゴリズムは最初の反復の前の初期状態にあります。アルゴリズムがこの状態にあるときは、プロット軸やその他のデータ構造を設定したり、ファイルを開いたりすることができます。

      メモ

      state'init' の場合、入力引数 xoptimValues.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 = trueUseVectorized = true の両方を指定することはできません。両方を true に設定すると、ソルバーは UseVectorized を無視し、可能であれば並列プールを使用して並列計算を試みます。

ベクトル化コンピューティング

UseVectorized オプションを true に設定すると、surrogateopt は目的関数に行列を渡します。マトリックスの各行は、評価する 1 つのポイントを表します。行列には options.BatchUpdateInterval 行がありますが、最終反復中に行列の行数が減る場合があります。カスタム並列シミュレーションのためのベクトル化サロゲート最適化 に示すように、このオプションはカスタム並列コンピューティングに使用します。

UseParallel = trueUseVectorized = 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 はエラーをスローしたり、矛盾した結果を返したりする可能性があります。

参考

関連するトピック