このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
サロゲート最適化オプション
アルゴリズム制御
サロゲート最適化アルゴリズムを制御するには、次のオプションを使用します。
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 | ソルバーは、最適化の開始から MaxTime 秒 (tic / toc で測定) に達すると停止します。ソルバーは進行中の関数評価を中断しないため、実際の計算時間は 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'— 最適な関数値を表示します。'optimplotx'— 見つかった最良のポイントを棒グラフとして表示します。'surrogateoptplot'— 現在の目的関数の値、最適な関数の値、およびアルゴリズムのフェーズに関する情報を表示します。surrogateoptplotを解釈するを参照してください。
出力関数 の構文を使用してカスタム プロット関数を記述できます。たとえば、MATLAB® コマンド ラインに type surrogateoptplot と入力して、surrogateoptplot のコードを確認します。
メモ
プロット関数のフレームワークで座標軸が管理されるため、プロット関数は subplot ステートメントをサポートしていません。複数のサブプロットを指定するには、個別のプロット関数を記述し、cell 配列としてソルバーに渡します。
options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});出力関数は subplot をサポートするため、プロット関数ではなく出力関数を使用すると、1 つの関数に複数のプロットを含めることができます。
並列計算
UseParallel オプションを true に設定すると、surrogateopt は並列で計算されます。並列計算には Parallel Computing Toolbox™ ライセンスが必要です。詳細は、サロゲート最適化アルゴリズムを参照してください。
UseParallel = true と UseVectorized = true の両方を指定することはできません。両方を true に設定すると、ソルバーは UseVectorized を無視し、可能な場合は並列プールを使用して並列計算を試みます。
ベクトル化コンピューティング
UseVectorized オプションを true に設定すると、surrogateopt は目的関数に行列を渡します。行列の各行は、評価する 1 つのポイントを表します。行列には options.BatchUpdateInterval 行がありますが、最終反復中に行列の行数が少なくなる場合があります。Simulink モデルを並列に最適化 に示すように、カスタム並列コンピューティングにはこのオプションを使用します。
UseParallel = true と UseVectorized = true の両方を指定することはできません。両方を true に設定すると、ソルバーは UseVectorized を無視し、可能な場合は並列プールを使用して並列計算を試みます。
チェックポイントファイル
CheckpointFile オプションを使用してチェックポイント ファイルの名前を設定すると、surrogateopt は各反復後にファイルにデータを書き込みます (最後のデータ書き込みから少なくとも 10 秒が経過しているか、これが最後の書き込みである場合)。これにより、関数は現在の状態から最適化を再開できるようになります。再起動すると、surrogateopt は以前に評価されたポイントでの目的関数の値を評価しません。
チェックポイント ファイルは、"C:\Documents\MATLAB\check1.mat" のようなファイル パス、または 'checkpoint1June2019.mat' のようなファイル名になります。パスなしでファイル名を指定すると、surrogateopt はチェックポイント ファイルを現在のフォルダーに保存します。
最適化を再開するときに変更できるのは次のオプションのみです。
BatchUpdateIntervalCheckpointFileDisplayMaxFunctionEvaluationsMaxTimeMinSurrogatePointsObjectiveLimitOutputFcnPlotFcnUseParallelUseVectorized
チェックポイント ファイルから最適化を再開するには、ファイル名を最初の引数として 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 はエラーをスローしたり、矛盾した結果を返したりする可能性があります。