このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。
結果を再現する
シミュレーテッド アニーリング アルゴリズムは確率的であるため、つまりランダムに選択を行うため、実行するたびにわずかに異なる結果が得られます。アルゴリズムはデフォルトの 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.
x
と fval
の出力を調べます。
x,fval
x = 1×2
-16.1292 -15.8214
fval = 6.9034
乱数ジェネレーターの状態 rngstate
は output.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
の状態を設定しない方が、これらのアルゴリズムのランダム性の利点を享受できます。