Reproduce Your Results
Because the simulated annealing algorithm is stochastic—that is, it makes random choices—you get slightly different results each time you run it. The algorithm uses the default MATLAB® pseudorandom number stream. For more information about random number streams, see RandStream
. Each time the algorithm calls the stream, its state changes. So the next time the algorithm calls the stream, the stream returns a different random number.
If you need to reproduce your results exactly, call simulannealbnd
with the output
argument. The output
structure contains the current random number generator state in the output.rngstate
field. Reset the state before running the function again.
For example, to reproduce the output of simulannealbnd
applied to De Jong's fifth function (which is available when you run this example), call simulannealbnd
with the syntax
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.
Examine the x
and fval
outputs.
x,fval
x = 1×2
-16.1292 -15.8214
fval = 6.9034
The state of the random number generator, rngstate
, is stored in output.rngstate
. Reset the stream as follows.
stream = RandStream.getGlobalStream; stream.State = output.rngstate.State;
Run simulannealbnd
a second time, and you get the same results.
[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
If you run simulannealbnd
again without resetting the random number stream, the results change.
[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
Note: If you do not need to reproduce your results, it is better not to set the states of RandStream
, so that you get the benefit of the randomness in these algorithms.