复制你的结果
因为模拟退火算法是随机的——也就是说,它做出随机的选择——所以每次运行它都会得到稍微不同的结果。算法采用默认的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
,这样你就能从这些算法的随机性中获益。