Main Content

本页采用了机器翻译。点击此处可查看英文原文。

重现结果

由于遗传算法是随机的(即它会随机做出选择),因此每次运行遗传算法时都会得到略有不同的结果。算法使用默认的 MATLAB® 伪随机数流。有关随机数流的更多信息,请参阅 RandStream。每次 ga 调用流时,其状态都会发生变化。这样,下次 ga 调用流时,它会返回不同的随机数。这就是为什么每次运行 ga 时其输出都会不同的原因。

如果您需要准确地重现结果,您可以使用包含默认流的当前状态的输出参量调用 ga,然后在再次运行 ga 之前将状态重置为该值。例如,要重现应用于拉斯特里金函数的 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

注意

如果您不需要重现您的结果,最好不要设置流的状态,这样您就可以获得遗传算法中的随机性的好处。

相关主题