Reproduce Results
Identical Answers with Pseudorandom Numbers
GlobalSearch
and MultiStart
use
pseudorandom numbers in choosing start points. Use the same pseudorandom
number stream again to:
Compare various algorithm settings.
Have an example run repeatably.
Extend a run, with known initial segment of a previous run.
Both GlobalSearch
and MultiStart
use
the default random number stream.
Steps to Take in Reproducing Results
Before running your problem, store the current state of the default random number stream:
stream = rng;
Run your
GlobalSearch
orMultiStart
problem.Restore the state of the random number stream:
rng(stream)
If you run your problem again, you get the same result.
Example: Reproducing a GlobalSearch or MultiStart Result
This example shows how to obtain reproducible results for Find Global or Multiple Local Minima. The example follows the procedure in Steps to Take in Reproducing Results.
Store the current state of the default random number stream:
stream = rng;
Create the
sawtoothxy
function file:function f = sawtoothxy(x,y) [t r] = cart2pol(x,y); % change to polar coordinates h = cos(2*t - 1/2)/2 + cos(t) + 2; g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ... .*r.^2./(r+1); f = g.*h; end
Create the
problem
structure andGlobalSearch
object:problem = createOptimProblem('fmincon',... 'objective',@(x)sawtoothxy(x(1),x(2)),... 'x0',[100,-50],'options',... optimoptions(@fmincon,'Algorithm','sqp')); gs = GlobalSearch('Display','iter');
Run the problem:
[x,fval] = run(gs,problem)
Num Pts Best Current Threshold Local Local Analyzed F-count f(x) Penalty Penalty f(x) exitflag Procedure 0 465 422.9 422.9 2 Initial Point 200 1730 1.547e-015 1.547e-015 1 Stage 1 Local 300 1830 1.547e-015 6.01e+004 1.074 Stage 2 Search 400 1930 1.547e-015 1.47e+005 4.16 Stage 2 Search 500 2030 1.547e-015 2.63e+004 11.84 Stage 2 Search 600 2130 1.547e-015 1.341e+004 30.95 Stage 2 Search 700 2230 1.547e-015 2.562e+004 65.25 Stage 2 Search 800 2330 1.547e-015 5.217e+004 163.8 Stage 2 Search 900 2430 1.547e-015 7.704e+004 409.2 Stage 2 Search 981 2587 1.547e-015 42.24 516.6 7.573 1 Stage 2 Local 1000 2606 1.547e-015 3.299e+004 42.24 Stage 2 Search GlobalSearch stopped because it analyzed all the trial points. All 3 local solver runs converged with a positive local solver exit flag. x = 1.0e-007 * 0.0414 0.1298 fval = 1.5467e-015
You might obtain a different result when running this problem, since the random stream was in an unknown state at the beginning of the run.
Restore the state of the random number stream:
rng(stream)
Run the problem again. You get the same output.
[x,fval] = run(gs,problem)
Num Pts Best Current Threshold Local Local Analyzed F-count f(x) Penalty Penalty f(x) exitflag Procedure 0 465 422.9 422.9 2 Initial Point 200 1730 1.547e-015 1.547e-015 1 Stage 1 Local ... Output deleted to save space ... x = 1.0e-007 * 0.0414 0.1298 fval = 1.5467e-015
Parallel Processing and Random Number Streams
You obtain reproducible results from MultiStart
when
you run the algorithm in parallel the same way as you do for serial
computation. Runs are reproducible because MultiStart
generates
pseudorandom start points locally, and then distributes the start
points to parallel processors. Therefore, the parallel processors
do not use random numbers.
To reproduce a parallel MultiStart
run, use
the procedure described in Steps to Take in Reproducing Results. For a description of
how to run MultiStart
in parallel, see How to Use Parallel Processing in Global Optimization Toolbox.