因为模拟退火算法是随机的——也就是说,它会做出随机选择——所以每次运行它都会得到稍微不同的结果。该算法使用默认的MATLAB®伪随机数流。有关随机数流的更多信息,请参见RandStream
.每次算法调用流时,它的状态都会改变。所以下一次算法调用流时,它会返回一个不同的随机数。
如果你想准确重现你的结果,打电话simulannealbnd
与输出
论点。的输出
结构中包含的当前随机数生成器状态output.rngstate
字段。重置状态后,功能才能再次运行。
例如,复制的输出simulannealbnd
应用到德容的第五个函数,callsimulannealbnd
与语法
Rng (10,'twister') % for再现性[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
假设结果是
X,fval = -16.1292 -15.8214 fval = 6.9034
随机数发生器的状态,rngstate
,存储在output.rngstate
.通过输入重置流
流= RandStream.getGlobalStream;流。状态= output.rngstate.State;
如果你现在跑simulannealbnd
第二次,你得到同样的结果。
请注意
如果您不需要复制您的结果,最好不要设置状态RandStream
,这样你就能从这些算法的随机性中获益。