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.