GlobalSearch и MultiStart используют псевдослучайные числа в выборе стартовых точек. Используйте тот же поток псевдослучайного числа снова для:
Сравните различные настройки алгоритма.
Запустите пример повторяемо.
Расширьте выполнение с известным начальным сегментом предыдущего выполнения.
И GlobalSearch и MultiStart используют поток случайных чисел по умолчанию.
Прежде, чем запустить вашу проблему, сохраните текущее состояние потока случайных чисел по умолчанию:
stream = rng;
Запустите свой GlobalSearch или проблему MultiStart.
Восстановите состояние потока случайных чисел:
rng(stream)
Если при запуске свою проблему снова, вы получаете тот же результат.
Этот пример показывает, как получить восстанавливаемые результаты для Глобальной переменной Находки или Нескольких Локальных Минимумов. Пример выполняет процедуру на Шагах, чтобы Взять в Репродуцировании Результатов.
Сохраните текущее состояние потока случайных чисел по умолчанию:
stream = rng;
Создайте файл функции sawtoothxy:
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Создайте структуру problem и объект GlobalSearch:
problem = createOptimProblem('fmincon',...
'objective',@(x)sawtoothxy(x(1),x(2)),...
'x0',[100,-50],'options',...
optimoptions(@fmincon,'Algorithm','sqp'));
gs = GlobalSearch('Display','iter');Запустите проблему:
[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Вы можете получить различный результат при выполнении этой проблемы, поскольку случайный поток был в неизвестном состоянии в начале выполнения.
Восстановите состояние потока случайных чисел:
rng(stream)
Запустите проблему снова. Вы получаете тот же вывод.
[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Вы получаете восстанавливаемые результаты MultiStart, когда вы запускаете алгоритм параллельно тот же путь, как вы делаете для последовательного вычисления. Выполнения восстанавливаемы, потому что MultiStart генерирует псевдослучайные стартовые точки локально, и затем распределяет стартовые точки, чтобы быть параллельным процессорам. Поэтому параллельные процессоры не используют случайные числа.
Чтобы воспроизвести параллельный запущенный MultiStart, используйте процедуру, описанную на Шагах, чтобы Взять в Репродуцировании Результатов. Для описания того, как запустить MultiStart параллельно, смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.