因为遗传算法是随机的——也就是说,它做出随机的选择——每次运行遗传算法都会得到略微不同的结果。该算法使用默认的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
请注意
如果您不需要重现您的结果,那么最好不要设置流的状态,这样您就可以从遗传算法的随机性中获益。