Main Content

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

結果を再現する

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

結果を正確に再現する必要がある場合は、デフォルト ストリームの現在の状態を含む出力引数を使用して ga を呼び出し、状態をこの値にリセットしてから ga を再度実行します。例えば、Rastrigin関数に適用されたgaの出力を再現するには、次の構文でgaを呼び出します。

rng(1,'twister') % for reproducibility
% Define Rastrigin's function
rastriginsfcn = @(pop)10.0 * size(pop,2) + sum(pop .^2 - 10.0*cos(2*pi.*pop),2);
[x,fval,exitflag,output] = ga(rastriginsfcn, 2);

結果が

x,fval,exitflag
x =
   -1.0421   -1.0018

fval =
    2.4385

exitflag =
     1

ストリームの状態は output.rngstate に保存されます。状態をリセットするには、次のように入力します。

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

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

[x,fval,exitflag] = ga(rastriginsfcn, 2)
Optimization terminated: average change in the fitness value less than options.FunctionTolerance.

x =
   -1.0421   -1.0018

fval =
    2.4385

exitflag =
     1

メモ

結果を再現する必要がない場合は、遺伝的アルゴリズムのランダム性の利点を享受できるように、ストリームの状態を設定しない方がよいでしょう。

関連するトピック