重现结果
由于遗传算法是随机的(即它会随机做出选择),因此每次运行遗传算法时都会得到略有不同的结果。算法使用默认的 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
注意
如果您不需要重现您的结果,最好不要设置流的状态,这样您就可以获得遗传算法中的随机性的好处。