Воспроизведение результатов

Идентичные ответы с псевдослучайными номерами

GlobalSearch и MultiStart используйте псевдослучайные числа при выборе начальных точек. Снова используйте тот же псевдослучайный поток чисел, чтобы:

  • Сравните различные настройки алгоритма.

  • Повторите выполнение примера.

  • Расширение запуска с известным начальным сегментом предыдущего запуска.

Оба GlobalSearch и MultiStart используйте поток случайных чисел по умолчанию.

Шаги, которые необходимо предпринять для воспроизведения результатов

  1. Прежде чем выполнять задачу, сохраните текущее состояние потока случайных чисел по умолчанию:

    stream = rng;
  2. Запустите свою GlobalSearch или MultiStart проблема.

  3. Восстановите состояние потока случайных чисел:

    rng(stream)
  4. Если вы запускаете свою задачу снова, вы получаете тот же результат.

Пример: Воспроизведение результата GlobalSearch или MultiStart

В этом примере показано, как получить воспроизводимые результаты для Find Global или Multiple Local Minima. Пример соответствует процедуре, описанной в шагах, которые необходимо предпринять при воспроизведении результатов.

  1. Сохраните текущее состояние потока случайных чисел по умолчанию:

    stream = rng;
  2. Создайте 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
  3. Создайте problem структура и GlobalSearch объект:

    problem = createOptimProblem('fmincon',...
        'objective',@(x)sawtoothxy(x(1),x(2)),...
        'x0',[100,-50],'options',...
        optimoptions(@fmincon,'Algorithm','sqp'));
    gs = GlobalSearch('Display','iter');
  4. Запустите задачу:

    [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

    Вы можете получить другой результат при выполнении этой проблемы, поскольку случайный поток находился в неизвестном состоянии в начале запуска.

  5. Восстановите состояние потока случайных чисел:

    rng(stream)
  6. Еще раз запустите задачу. Вы получаете тот же выход.

    [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 run, использовать процедуру, описанную в шагах, которые нужно сделать при воспроизведении результатов. Описание выполнения MultiStart параллельно см. раздел «Как использовать параллельную обработку в Global Optimization Toolbox».

Похожие темы