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.