主要内容

复制的结果

因为遗传算法是随机的——也就是说,它做出随机的选择——每次运行遗传算法都会得到略微不同的结果。该算法使用默认的MATLAB®伪随机数流。有关随机数流的更多信息,请参见RandStream.每一次遗传算法调用流,它的状态改变。这样下次遗传算法调用流,它返回一个不同的随机数。这就是为什么输出遗传算法每次运行都不同。

如果您需要精确地重现您的结果,您可以调用遗传算法使用包含默认流的当前状态的输出参数,然后在运行之前将状态重置为此值遗传算法一次。的输出遗传算法应用于Rastrigin函数,调用遗传算法与语法

rng (1,“旋风”%的再现性[x,fval,exitflag,output] = ga(@rastriginsfcn, 2);

假设结果是

x fval exitflag
fval = 2.4385 exitflag = 1

存储流的状态output.rngstate.重新设置状态,请输入

流= RandStream.getGlobalStream;流。状态= output.rngstate.State;

如果你现在运行遗传算法第二次,你会得到和之前一样的结果:

[x,fval,exitflag] = ga(@rastriginsfcn, 2)
优化终止:平均变化的适应度值小于选项。功能公差。fval = 2.4385 exitflag = 1

请注意

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

相关的话题