主要内容

复制的结果

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

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

rng (1,“旋风”%的再现性定义Rastrigin的函数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.4485 exitflag = 1

流的状态存储在output.rngstate.要重置状态,输入

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

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

[x,fval,exitflag] = ga(rastriginsfcn, 2)
优化终止:适应度值的平均变化小于options.FunctionTolerance。X = -1.0421 -1.0018 fval = 2.4485 exitflag = 1

请注意

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

相关的话题

Baidu
map