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 параллельно см. раздел Использование параллельной обработки в инструментарии глобальной оптимизации.