重现结果
由于模拟退火算法是随机的(即它会做出随机选择),因此每次运行时都会得到略有不同的结果。该算法使用默认的 MATLAB® 伪随机数流。有关随机数流的更多信息,请参阅 RandStream
。每次算法调用流时,其状态都会发生变化。因此,下次算法调用流时,流将返回不同的随机数。
如果您需要准确地重现结果,请使用 simulannealbnd
参量调用 output
。output
结构体包含 output.rngstate
字段中的当前随机数生成器状态。再次运行该函数之前重置状态。
例如,要重现应用于 De Jong 的第五个函数(运行此示例时可用)的 simulannealbnd
的输出,请使用以下语法调用 simulannealbnd
rng(10,'twister') % For reproducibility [x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
检查 x
和 fval
输出。
x,fval
x = 1×2
-16.1292 -15.8214
fval = 6.9034
随机数生成器的状态 rngstate
存储在 output.rngstate
中。按如下方式重置流。
stream = RandStream.getGlobalStream; stream.State = output.rngstate.State;
再次运行 simulannealbnd
,您会得到相同的结果。
[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x,fval
x = 1×2
-16.1292 -15.8214
fval = 6.9034
如果您再次运行 simulannealbnd
而不重置随机数流,结果会发生变化。
[x,fval,exitflag,output] = simulannealbnd(@dejong5fcn,[0 0]);
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x,fval
x = 1×2
0 0
fval = 12.6705
注意:如果您不需要重现您的结果,最好不要设置 RandStream
的状态,这样您就可以从这些算法中的随机性中受益。