exponenta event banner

Параллельный мультизапуск

Шаги для параллельного мультизапуска

Если у вас есть многоядерный процессор или доступ к сети процессоров, вы можете использовать функции Parallel Computing Toolbox™ с MultiStart. В этом примере показано, как найти несколько минимумов параллельно для проблемы, используя процессор с двумя ядрами. Проблема такая же, как в Multiple Local Minima Via 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

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

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

Связанные темы