Параллельный MultiStart

Шаги для параллели MultiStart

Если у вас есть многоядерный процессор или доступ к сети процессора, можно использовать функции Parallel Computing Toolbox™ с MultiStart. В этом примере показано, как найти несколько минимумов параллельно для проблемы, с помощью процессора с двумя ядрами. Проблема эквивалентна в Нескольких Локальных Минимумах Через MultiStart.

  1. Запишите файл функции, чтобы вычислить цель:

    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
  2. Создайте структуру задачи:

    problem = createOptimProblem('fminunc',...
        'objective',@(x)sawtoothxy(x(1),x(2)),...
        'x0',[100,-50],'options',...
        optimoptions(@fminunc,'Algorithm','quasi-newton'));
  3. Подтвердите структуру задачи путем выполнения его:

    [x,fval] = fminunc(problem)
    
    x =
        8.4420 -110.2602
    
    fval =
      435.2573
  4. Создайте MultiStart объект и набор объект использовать параллельную обработку и итеративное отображение:

    ms = MultiStart('UseParallel',true,'Display','iter');
  5. Настроенная параллельная обработка:

    parpool
    
    Starting parpool using the 'local' profile ... connected to 4 workers.
    
    ans = 
    
     Pool with properties: 
    
                Connected: true
               NumWorkers: 4
                  Cluster: local
            AttachedFiles: {}
              IdleTimeout: 30 minute(s) (30 minutes remaining)
              SpmdEnabled: true
  6. Запустите проблему на 50 стартовых точках:

    [x,fval,eflag,output,manymins] = run(ms,problem,50);
    Running the local solvers in parallel.
    
     Run       Local       Local      Local    Local   First-order
    Index     exitflag      f(x)     # iter   F-count   optimality
       17         2         3953         4        21        0.1626
       16         0         1331        45       201         65.02
       34         0         7271        54       201         520.9
       33         2         8249         4        18         2.968
         ... Many iterations omitted ... 
       47         2         2740         5        21        0.0422
       35         0         8501        48       201         424.8
       50         0         1225        40       201         21.89
    
    MultiStart completed some of the runs from the start points.
    
    17 out of 50 local solver runs converged with a positive 
    local solver exit flag.

    Заметьте, что индексы запуска выглядят случайными. Параллельный MultiStart запускает его стартовые точки в непредсказуемом порядке.

    Заметьте тот MultiStart подтверждает параллельную обработку в первой линии выхода, который утверждает: “Запуская локальные решатели параллельно”.

  7. По окончании закройте параллельную среду:

    delete(gcp)
    Parallel pool using the 'local' profile is shutting down.

Для примера того, как получить лучшие решения этой проблемы, смотрите Пример: Поиск Лучшего Решения. Можно использовать параллельную обработку наряду с методами, описанными в том примере.

Ускорение с параллельными вычислениями

Результаты MultiStart запуски являются стохастическими. Синхронизация запусков является стохастической, также. Тем не менее, некоторые ясные тренды очевидны в следующей таблице. Данные для таблицы прибыли из одного запуска в каждом количестве стартовых точек на машине с двумя ядрами.

Стартовые точкиПараллельные секундыПоследовательные секунды
503.63.4
1004.95.7
2008.310
5001623
10003146

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

Существует много факторов, которые влияют на ускорение (или замедление) с параллельной обработкой. Для получения дополнительной информации смотрите Улучшающую Производительность с Параллельными вычислениями.

Похожие темы