主要内容

复制你的结果

因为模拟退火算法是随机的——也就是说,它做出随机的选择——所以每次运行它都会得到稍微不同的结果。算法采用默认的MATLAB®伪随机数流。有关随机数流的更多信息,请参见RandStream.每次算法调用流时,它的状态都会发生变化。因此,下次算法调用流时,流返回一个不同的随机数。

如果你需要精确再现你的结果,打电话simulannealbnd输出论点。的输出控件中的当前随机数生成器状态output.rngstate字段。在再次运行函数之前重置状态。

例如,再现的输出simulannealbnd应用到德容的第五个函数(在运行本例时可用),调用simulannealbnd与语法

rng (10,“旋风”%的再现性[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
优化终止:最佳函数值的变化小于options.FunctionTolerance。

检查x而且fval输出。

x, fval
x =1×2-16.1292 - -15.8214
fval = 6.9034

随机数发生器的状态,rngstate,存储在output.rngstate.按以下方法重置流。

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

运行simulannealbnd第二次,你会得到同样的结果。

[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
优化终止:最佳函数值的变化小于options.FunctionTolerance。
x, fval
x =1×2-16.1292 - -15.8214
fval = 6.9034

如果你运行simulannealbnd同样,在不重置随机数流的情况下,结果会改变。

[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
优化终止:最佳函数值的变化小于options.FunctionTolerance。
x, fval
x =1×20 0
fval = 12.6705

注意:如果不需要重新生成结果,最好不要设置的状态RandStream,这样你就能从这些算法的随机性中获益。

另请参阅

相关的话题

Baidu
map