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.