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

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

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

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

  • Запустите пример повторяемо.

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

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

Шаги, чтобы взять в репродуцировании результатов

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

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

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

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

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

В этом примере показано, как получить восстанавливаемые результаты для Глобальной переменной Находки или Нескольких Локальных Минимумов. Пример выполняет процедуру на Шагах, чтобы Взять в Репродуцировании Результатов.

  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 запустите, используйте процедуру, описанную на Шагах, чтобы Взять в Репродуцировании Результатов. Для описания того, как запустить MultiStart параллельно, смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.

Похожие темы