このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
シミュレーテッドアニーリングオプション
コマンドラインでシミュレーテッドアニーリングオプションを設定する
次のように optimoptions
関数を使用して options
オブジェクトを作成し、オプションを指定します。
options = optimoptions(@simulannealbnd,... 'Param1',value1,'Param2',value2, ...);
このセクションの各オプションは、options
のフィールド名でリストされます。たとえば、InitialTemperature
は options
の対応するフィールドを参照します。
プロット オプション
プロット オプションを使用すると、シミュレーテッド アニーリング ソルバーの実行中にデータをプロットできます。
PlotInterval
は、プロット関数の連続呼び出し間の反復回数を指定します。
コマンドラインから simulannealbnd
を呼び出すときにプロットを表示するには、options
の PlotFcn
フィールドを組み込みのプロット関数名またはプロット関数へのハンドルに設定します。次のいずれかのプロットを指定できます。
'saplotbestf'
は最適な目的関数値をプロットします。'saplotbestx'
は現在の最良のポイントをプロットします。'saplotf'
は現在の関数値をプロットします。'saplotx'
は現在の点をプロットします。'saplotstopping'
は停止基準レベルをプロットします。'saplottemperature'
は各反復で温度をプロットします。@myfun
はカスタム プロット関数をプロットします。ここで、myfun
は関数の名前です。構文の説明については、プロット関数の構造 を参照してください。
たとえば、最良の客観的プロットを表示するには、options
を次のように設定します。
options = optimoptions(@simulannealbnd,'PlotFcn','saplotbestf');
複数のプロットを表示するには、セル配列構文を使用します。
options = optimoptions(@simulannealbnd,... 'PlotFcn',{@plotfun1,@plotfun2, ...});
ここで、@plotfun1
、@plotfun2
などはプロット関数への関数ハンドルです。
複数のプロット関数を指定すると、すべてのプロットが同じウィンドウにサブプロットとして表示されます。任意のサブプロットを右クリックすると、別の図ウィンドウで拡大バージョンが表示されます。
プロット関数の構造
プロット関数の最初の行は次の形式になります。
function stop = plotfun(options,optimvalues,flag)
関数の入力引数は
options
—optimoptions
を使用して作成されたオプション。optimvalues
— ソルバーの現在の状態に関する情報を含む構造体。この構造体には、次のフィールドがあります。x
— 現在のポイントfval
— x における目的関数の値bestx
— これまでに見つけた最高のポイントbestfval
— 最良点における目的関数値temperature
— 現在の気温iteration
— 現在のイテレーションfunccount
— 関数評価の回数t0
— アルゴリズムの開始時刻k
— アニーリングパラメータ
flag
— プロット関数が呼び出される現在の状態。flag
の可能な値は'init'
— 初期化状態'iter'
— 反復状態'done'
— 最終状態
出力引数 stop
は、現在の反復でアルゴリズムを停止する方法を提供します。stop
には次の値を指定できます。
false
— アルゴリズムは次の反復に進みます。true
— アルゴリズムは現在の反復で終了します。
温度オプション
温度オプションは、アルゴリズムの実行中に各反復で温度をどのように下げるかを指定します。
InitialTemperature
— アルゴリズム開始時の初期温度。既定値は100
です。初期温度は、未知数のベクトルであるx
と同じ長さのベクトルにすることができます。simulannealbnd
は、スカラー初期温度をベクトルに展開します。TemperatureFcn
— 温度スケジュールを更新するために使用される関数。k はアニーリングパラメータを表します。(アニーリングパラメータは再アニーリングまでの反復回数と同じです。)次のオプションがあります。'temperatureexp'
— 温度は InitialTemperature * 0.95^k に等しいです。これは既定値です。'temperaturefast'
— 温度は InitialTemperature / k に等しいです。'temperatureboltz'
— 温度は InitialTemperature / ln(k) に等しいです。@myfun
— カスタム関数myfun
を使用して温度を更新します。構文は、次のようになります。temperature = myfun(optimValues,options)
ここで、
optimValues
は プロット関数の構造 で記述された構造体です。options
はoptimoptions
で作成されるか、オプションを作成していない場合はデフォルトのオプションで構成されます。アニーリングパラメータoptimValues.k
と温度optimValues.temperature
はどちらも、現在のポイントx
の要素数に等しい長さのベクトルです。たとえば、関数temperaturefast
は次のようになります。temperature = options.InitialTemperature./optimValues.k;
アルゴリズムの設定
アルゴリズム設定は、各反復で新しいポイントを生成する際に使用されるアルゴリズム固有のパラメータを定義します。
simulannealbnd
に指定できるパラメータは次のとおりです。
DataType
— 目的関数で使用するデータのタイプ。選択肢:'double'
(デフォルト) —double
型のベクトル。'custom'
— その他のデータ型。'custom'
アニーリング関数を指定する必要があります。ハイブリッド機能は使用できません。
AnnealingFcn
— 次の反復のための新しいポイントを生成するために使用される関数。選択肢は以下になります。'annealingfast'
— ステップの長さは温度で、方向は均一にランダムです。これは既定値です。'annealingboltz'
— ステップの長さは温度の平方根で、方向は均一にランダムです。@myfun
— カスタムアニーリングアルゴリズムmyfun
を使用します。構文は、次のようになります。ここで、newx = myfun(optimValues,problem)
optimValues
は 出力関数の構造 で記述された構造体であり、problem
は次の情報を含む構造体です。objective
: 目的関数への関数ハンドルx0
: スタート地点nvar
: 決定変数の数lb
: 決定変数の下限ub
: 決定変数の上限
たとえば、現在の位置は
optimValues.x
で、現在の目的関数の値はproblem.objective(optimValues.x)
です。saannealingfcntemplate.m
ファイルを変更することで、カスタム目的関数を記述できます。すべての反復を境界内に維持するには、カスタム アニーリング関数で最終コマンドとしてsahonorbounds
を呼び出します。
ReannealInterval
— 再アニーリング前に受け入れられるポイントの数。既定値は100
です。AcceptanceFcn
— 新しいポイントが受け入れられるかどうかを判断するために使用される関数。選択肢は以下になります。'acceptancesa'
— シミュレーテッドアニーリング受け入れ関数(デフォルト)。新しい目的関数の値が古い値より小さい場合、新しいポイントは常に受け入れられます。それ以外の場合、新しいポイントは、目的関数の値の差と現在の温度に応じた確率でランダムに受け入れられます。受理確率はここで、Δ = 新しい目標値 - 古い目標値、T は現在の温度です。Δ と T は両方とも正なので、受け入れられる確率は 0 から 1/2 の間になります。温度が低いほど、合格確率は低くなります。また、Δ が大きいほど、受け入れ確率は低くなります。
@myfun
— カスタム受け入れ関数myfun
。構文は、次のようになります。ここで、acceptpoint = myfun(optimValues,newx,newfval);
optimValues
は 出力関数の構造 で記述された構造、newx
は受け入れが評価されるポイント、newfval
はnewx
における目的関数です。acceptpoint
はブール値であり、値true
はnewx
を受け入れ、false
はnewx
を拒否します。
ハイブリッド機能オプション
ハイブリッド関数は、ソルバーの反復中または反復の最後に実行される別の最小化関数です。HybridInterval
は、ハイブリッド関数が呼び出される間隔を指定します (never
または end
でない場合)。HybridFcn
オプションを使用してハイブリッド関数を指定できます。選択肢は以下になります。
[]
— ハイブリッド機能はありません。'fminsearch'
— MATLAB® 関数fminsearch
を使用して制約のない最小化を実行します。'patternsearch'
—patternsearch
を使用して、制約付きまたは制約なしの最小化を実行します。'fminunc'
— Optimization Toolbox™ 関数fminunc
を使用して制約のない最小化を実行します。'fmincon'
— Optimization Toolbox 関数fmincon
を使用して制約付き最小化を実行します。
メモ
ハイブリッド関数が問題の制約を受け入れることを確認します。そうでない場合、simulannealbnd
はエラーをスローします。
ハイブリッド機能には個別のオプションを設定できます。fminsearch
の場合は optimset
を使用し、fmincon
、patternsearch
、fminunc
の場合は optimoptions
を使用します。以下に例を示します。
hybridopts = optimoptions('fminunc',... 'Display','iter','Algorithm','quasi-newton');
simulannealbnd
options
にハイブリッド オプションを含めます。options = optimoptions(@simulannealbnd,options,... 'HybridFcn',{@fminunc,hybridopts});
options
を設定する前に hybridopts
が存在している必要があります。例については、遺伝的アルゴリズムにおけるハイブリッド方式を参照してください。ハイブリッド関数を使用する場合を参照してください。
停止基準オプション
停止基準は、アルゴリズムを終了する原因を決定します。次のオプションを指定できます。
FunctionTolerance
— アルゴリズムは、StallIterLim
回の反復における目的関数の値の平均変化がFunctionTolerance
未満になるまで実行されます。既定値は1e-6
です。MaxIterations
— 反復回数がこの最大反復回数を超えると、アルゴリズムは停止します。最大反復回数は、正の整数またはInf
として指定できます。デフォルトはInf
です。MaxFunctionEvaluations
は目的関数の評価の最大回数を指定します。関数評価の回数が関数評価の最大回数を超えると、アルゴリズムは停止します。許容される最大値は3000*numberofvariables
です。MaxTime
は、アルゴリズムが停止するまでに実行される最大時間を秒単位で指定します。ObjectiveLimit
— 実行可能なポイントの最適な目的関数値がObjectiveLimit
未満の場合、アルゴリズムは停止します。
出力関数オプション
出力関数は、アルゴリズムが各反復で呼び出す関数です。デフォルト値は出力関数なし、[]
です。まず、出力関数の構造 で説明されている構文を使用して出力関数を作成する必要があります。
最適化アプリの使用:
Output function を
@myfun
として指定します。ここで、myfun
は関数の名前です。出力関数で追加のパラメータを渡すには、無名関数 を使用します。
出力関数が複数ある場合は、出力関数ハンドルのセル配列を入力します:
{@myfun1,@myfun2,...}
。
コマンド ラインで、次を指定します。
options = optimoptions(@simulannealbnd,'OutputFcn',@myfun);
複数の出力関数の場合は、関数ハンドルのセル配列を入力します。
options = optimoptions(@simulannealbnd,... 'OutputFcn',{@myfun1,@myfun2,...});
独自の出力関数を書くために使用できるテンプレートを表示するには、次のように入力します。
edit saoutputfcntemplate
MATLAB コマンドラインで。
出力関数の構造
出力関数の呼び出し構文は次のとおりです。
[stop,options,optchanged] = myfun(options,optimvalues,flag)
この関数には次の入力引数があります。
options
—optimoptions
を使用して作成されたオプション。optimvalues
— ソルバーの現在の状態に関する情報を含む構造体。この構造体には、次のフィールドがあります。x
— 現在のポイントfval
— x における目的関数の値bestx
— これまでに見つけた最高のポイントbestfval
— 最良点における目的関数値temperature
— 現在の気温、x
と同じ長さのベクトルiteration
— 現在のイテレーションfunccount
— 関数評価の回数t0
— アルゴリズムの開始時刻k
— アニーリングパラメータ、x
と同じ長さのベクトル
flag
— 出力関数が呼び出される現在の状態。flag
の可能な値は'init'
— 初期化状態'iter'
— 反復状態'done'
— 最終状態
追加パラメーターの受け渡し は、出力関数に追加のパラメータを提供する方法について説明します。
出力関数は次の引数を返します。
stop
— 現在の反復でアルゴリズムを停止する方法を提供します。stop
には次の値を指定できます。false
— アルゴリズムは次の反復に進みます。true
— アルゴリズムは現在の反復で終了します。
options
— 出力関数によって変更されるオプション。optchanged
—options
に変更が加えられたことを示すブールフラグ。オプションを変更する場合は、これをtrue
に設定する必要があります。
表示オプション
アルゴリズムの実行中にコマンド ラインに表示される情報の量を指定するには、Display
オプションを使用します。利用可能なオプションは次のとおりです
off
— 出力は表示されません。これは、最適化アプリからエクスポートされたoptions
のデフォルト値です。iter
— 反復ごとに情報が表示されます。diagnose
— 反復ごとに情報が表示されます。さらに、診断にはいくつかの問題情報とデフォルトから変更されたオプションがリストされます。final
— 停止の理由が表示されます。これは、optimoptions
を使用して作成されたオプションのデフォルトです。
iter
と diagnose
は両方とも次の情報を表示します。
Iteration
— 反復回数f-count
— 目的関数評価の累積回数Best f(x)
— 最適な目的関数値Current f(x)
— 現在の目的関数の値Mean Temperature
— 平均温度関数値