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

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

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.

Похожие темы