Main Content

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

結果を再現する

シミュレーテッド アニーリング アルゴリズムは確率的であるため、つまりランダムに選択を行うため、実行するたびにわずかに異なる結果が得られます。アルゴリズムはデフォルトの MATLAB® 疑似乱数ストリームを使用します。乱数ストリームの詳細については、RandStream を参照してください。アルゴリズムがストリームを呼び出すたびに、その状態は変化します。したがって、次にアルゴリズムがストリームを呼び出すと、ストリームは異なる乱数を返します。

結果を正確に再現する必要がある場合は、output 引数を指定して simulannealbnd を呼び出します。output 構造体には、output.rngstate フィールドに現在の乱数ジェネレーターの状態が含まれています。関数を再度実行する前に状態をリセットします。

例えば、De Jongの第5関数(この例を実行すると利用可能)に適用されたsimulannealbndの出力を再現するには、次の構文でsimulannealbndを呼び出します。

rng(10,'twister') % For reproducibility
[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.

xfval の出力を調べます。

x,fval
x = 1×2

  -16.1292  -15.8214

fval = 6.9034

乱数ジェネレーターの状態 rngstateoutput.rngstate に格納されます。次のようにストリームをリセットします。

stream = RandStream.getGlobalStream;
stream.State = output.rngstate.State;

simulannealbnd をもう一度実行すると、同じ結果が得られます。

[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x,fval
x = 1×2

  -16.1292  -15.8214

fval = 6.9034

乱数ストリームをリセットせずに simulannealbnd を再度実行すると、結果が変わります。

[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x,fval
x = 1×2

     0     0

fval = 12.6705

メモ: 結果を再現する必要がない場合は、RandStream の状態を設定しない方が、これらのアルゴリズムのランダム性の利点を享受できます。

参考

関連するトピック