Параллельная обработка является привлекательным способом ускорения алгоритмов оптимизации. Чтобы использовать параллельную обработку, необходимо иметь лицензию Parallel Computing Toolbox™ и иметь параллельный рабочий пул (parpool). Дополнительные сведения см. в разделе Использование параллельной обработки в инструментарии глобальной оптимизации.
Решатели Global Optimization Toolbox используют параллельные вычисления различными способами.
| Решающее устройство | Параллельно? | Параллельные характеристики |
|---|---|---|
| × | Параллельные функциональные возможности отсутствуют. Однако fmincon может использовать параллельную оценку градиента при выполнении в GlobalSearch. См. раздел Использование параллельных вычислений на панели инструментов оптимизации. |
|
| Начальные точки распределяются по нескольким процессорам. От этих точек локальные решатели переходят к завершению. Дополнительные сведения см. в разделах MultiStart и Использование параллельной обработки в инструментарии глобальной оптимизации. |
Для fmincon, без оценки параллельного градиента с параллельным MultiStart. | ||
|
| Популяция оценивается параллельно, что происходит один раз за итерацию. Дополнительные сведения см. в разделах Генетический алгоритм и Использование параллельной обработки в инструментарии глобальной оптимизации. |
| Нет векторизации функций пригодности или ограничения. | ||
|
| Популяция оценивается параллельно, что происходит один раз за итерацию. Дополнительные сведения см. в разделах Рой частиц и Использование параллельной обработки в инструментарии глобальной оптимизации. |
| Векторизация целевых функций или функций ограничения отсутствует. | ||
|
| Точки опроса вычисляются параллельно, что происходит один раз за итерацию. Дополнительные сведения см. в разделах Поиск массива и Использование параллельной обработки в инструментарии глобальной оптимизации. |
| Векторизация целевых функций или функций ограничения отсутствует. | ||
| × | Параллельные функциональные возможности отсутствуют. Однако simulannealbnd может использовать гибридную функцию, которая работает параллельно. См. Смоделированный отжиг. |
|
| Точки поиска оцениваются параллельно. |
| Векторизация целевых функций или функций ограничения отсутствует. |
Кроме того, несколько решателей имеют гибридные функции, которые выполняются после их завершения. Некоторые гибридные функции могут выполняться параллельно. Также, большинство patternsearch методы поиска могут выполняться параллельно. Дополнительные сведения см. в разделе Функции параллельного поиска или Гибридные функции.
Нет вложенных элементов для циклов. В большинстве решателей используется панель инструментов параллельных вычислений parfor (Панель параллельных вычислений) для выполнения параллельных вычислений. Два решателя, surrogateopt и paretosearch, использовать parfeval(Панель инструментов параллельных вычислений).
Примечание
parfor не работает параллельно при вызове из другого parfor цикл.
Примечание
В документации рекомендуется не использовать parfor или parfeval при вызове Simulink ®; см. Использование sim-функции в parfor (Simulink). Поэтому при параллельной оптимизации моделирования Simulink с помощью встроенных функций параллельного решения могут возникнуть проблемы.
Предположим, например, ваша целевая функция userfcn требования parfor, и вы хотите позвонить fmincon использование MultiStart и параллельная обработка. Предположим также, что условия для параллельной градиентной оценки fmincon удовлетворяются, как указано в разделе Функции параллельной оптимизации. На рисунке When parfor Runs In Parallel показаны три случая:
Самый внешний контур параллелен MultiStart. Только этот цикл проходит параллельно.
Наиболее удаленное parfor цикл находится в fmincon. Только fmincon выполняется параллельно.
Наиболее удаленное parfor цикл находится в userfcn. В этом случае userfcn может использовать parfor параллельно.
При параллельном выполнении Parfor

Параллельные случайные числа не воспроизводимы. Последовательности случайных чисел в MATLAB ® являются псевдослучайными, определяемыми из начального значения или начальной установки. В параллельных вычислениях используются начальные числа, которые не обязательно являются управляемыми или воспроизводимыми. Например, каждый экземпляр MATLAB имеет глобальный параметр по умолчанию, который определяет текущее начальное число для случайных последовательностей.
Для patternsearch, при выборе MADS в качестве метода опроса или поиска поиск параллельного шаблона не имеет воспроизводимых запусков. Если в качестве методов поиска выбран генетический алгоритм или латинский гиперкуб, параллельный поиск шаблона не имеет воспроизводимых прогонов.
Для ga и gamultiobjпараллельная генерация населения дает невоспроизводимые результаты.
MultiStart отличается. Можно иметь воспроизводимые прогоны из параллельных MultiStart. Выполнение воспроизводимо, так как MultiStart генерирует псевдослучайные начальные точки локально, а затем распределяет начальные точки параллельным процессорам. Поэтому параллельные процессоры не используют случайные числа. Дополнительные сведения см. в разделе Параллельная обработка и потоки случайных чисел.
Ограничения и соображения по производительности. Больше предостережений, связанных с parfor отображаются в окне Parallel for-Loops (parfor) (Панель параллельных вычислений).
Сведения о факторах, влияющих на скорость параллельных вычислений, и факторах, влияющих на результаты параллельных вычислений, см. в разделе Повышение производительности с помощью параллельных вычислений. То же самое относится к параллельным вычислениям с функциями Global Optimization Toolbox.
MultiStart может автоматически распределять проблемы и начальные точки по нескольким процессам или процессорам. Проблемы выполняются независимо, и MultiStart объединяет различные локальные минимумы в вектор GlobalOptimSolution объекты. MultiStart использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Установите UseParallel свойство для true в MultiStart объект:
ms = MultiStart('UseParallel',true);Когда эти условия сохраняются, MultiStart распределяет проблемы и точки запуска между процессами или процессорами по одному. Алгоритм останавливается, когда достигает условия остановки или заканчиваются начальные точки для распределения. Если MultiStart Display свойство - 'iter', то MultiStart отображает:
Running the local solvers in parallel.
Пример параллельного MultiStart, см. раздел Параллельный мультизапуск.
Проблемы внедрения в параллельном MultiStart. fmincon невозможно оценить градиенты параллельно при использовании с параллельными MultiStart. Это отсутствие оценки параллельного градиента обусловлено ограничением parfor описано в разделе Отсутствие вложенных элементов для циклов.
fmincon может занять больше времени для оценки градиентов параллельно, а не последовательно. В этом случае использование MultiStart с оценкой параллельного градиента в fmincon усиливает замедление. Например, предположим, что ms
MultiStart объект имеет UseParallel установить в значение false. Предположим fmincon занимает 1 с дольше для решения problem с problem.options.UseParallel установить в значение true. Тогда run(ms,problem,200) занимает 200 с дольше, чем тот же прогон с problem.options.UseParallel установить в значение false
Примечание
При серийном выполнении parfor циклы выполняются медленнее, чем for петли. Поэтому для достижения максимальной производительности установите локальный решатель UseParallel опция для false когда MultiStart UseParallel свойство - true.
Примечание
Даже при параллельном выполнении решатель иногда вызывает функции целевых и нелинейных ограничений последовательно на хост-машине. Поэтому убедитесь, что у ваших функций нет предположений о том, что они анализируются последовательно и параллельно.
GlobalSearch не распространяет проблему и точки запуска на несколько процессов или процессоров. Однако когда GlobalSearch запускает fmincon локальный решатель, fmincon может оценивать градиенты по параллельным конечным разностям. fmincon использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Установите UseParallel опция для true с optimoptions. Установить этот параметр в problem структура:
opts = optimoptions(@fmincon,'UseParallel',true,'Algorithm','sqp'); problem = createOptimProblem('fmincon','objective',@myobj,... 'x0',startpt,'options',opts);
Дополнительные сведения см. в разделе Использование параллельных вычислений на панели инструментов оптимизации.
patternsearch может автоматически распределять оценку функций цели и ограничения, связанных с точками в шаблоне, по нескольким процессам или процессорам. patternsearch использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Задайте следующие параметры с помощью optimoptions:
UseCompletePoll является true.
UseVectorized является false (по умолчанию).
UseParallel является true.
Когда эти условия сохраняются, решатель вычисляет значения целевой функции и ограничения поиска массива параллельно во время опроса. Кроме того, patternsearch переопределяет настройку Cache и использует значение по умолчанию 'off' установка.
Начиная с R2019a, при установке UseParallel опция для true, patternsearch внутренне переопределяет UseCompletePoll установка для true так что он опрашивает параллельно.
Примечание
Даже при параллельном выполнении, patternsearch иногда вызывает функции целевых и нелинейных ограничений последовательно на хост-машине. Поэтому убедитесь, что в функциях отсутствуют предположения о том, выполняются ли они последовательно или параллельно.
Функция параллельного поиска. patternsearch может дополнительно вызывать функцию поиска в каждой итерации. Поиск выполняется параллельно, если:
Набор UseCompleteSearch кому true.
Не устанавливайте для метода поиска значение @searchneldermead или custom.
Задайте для метода поиска значение patternsearch метод опроса или поиск по латинскому гиперкубу и набор UseParallel кому true.
Или, если для метода поиска задано значение ga, создайте параметр метода поиска с помощью UseParallel установить в значение true.
Проблемы реализации при поиске параллельных шаблонов. Ограничения на patternsearch опции, перечисленные в разделе Поиск шаблона, частично вытекают из ограничений parforи частично от природы параллельной обработки:
Cache переопределяется, чтобы быть 'off' — patternsearch орудия Cache в качестве постоянной переменной. parfor не обрабатывает постоянные переменные, поскольку переменная может иметь различные настройки в разных процессорах.
UseCompletePoll является true — UseCompletePoll определяет, прекращается ли опрос, как только patternsearch находит лучшую точку. При параллельном поиске parfor планирует все оценки одновременно, и patternsearch продолжается после завершения всех оценок. patternsearch невозможно остановить оценки после их запуска.
Начиная с R2019a, при установке UseParallel опция для true, patternsearch внутренне переопределяет UseCompletePoll установка для true так что он опрашивает параллельно.
UseVectorized является false — UseVectorized определяет, patternsearch вычисляет все точки в шаблоне с помощью одного вызова функции векторизированным образом. Если UseVectorized является true, patternsearch не распределяет оценку функции, поэтому не использует parfor.
ga и gamultiobj может автоматически распределять оценку целевых и нелинейных функций ограничений, связанных с популяцией, по нескольким процессорам. ga использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Задайте следующие параметры с помощью optimoptions:
UseVectorized является false (по умолчанию).
UseParallel является true.
Когда эти условия сохраняются, ga вычисляет значения целевой функции и нелинейных ограничений индивидов в совокупности параллельно.
Примечание
Даже при параллельном выполнении, ga иногда вызывает функции фитнеса и нелинейных ограничений последовательно на хост-машине. Поэтому убедитесь, что в функциях отсутствуют предположения о том, выполняются ли они последовательно или параллельно.
Проблемы реализации в параллельном генетическом алгоритме. Ограничения на варианты, перечисленные в генетическом алгоритме, частично возникают из-за ограничений parforи частично от природы параллельной обработки:
UseVectorized является false — UseVectorized определяет, ga оценивает всю совокупность с помощью одного вызова функции векторизированным образом. Если UseVectorized является true, ga не распределяет оценку функции, поэтому не использует parfor.
ga может иметь гибридную функцию, которая запускается после её завершения; см. Гибридная схема в генетическом алгоритме. Если вы хотите, чтобы гибридная функция использовала преимущества параллельных вычислений, задайте ее опции отдельно, чтобы UseParallel является true. Если гибридная функция patternsearch, комплект UseCompletePoll кому true чтобы patternsearch выполняется параллельно.
Если гибридная функция fmincon, задайте следующие параметры с помощью optimoptions чтобы иметь оценку параллельного градиента:
GradObj не должно быть 'on' - это может быть 'off' или [].
Или, если существует нелинейная функция ограничения, GradConstr не должно быть 'on' - это может быть 'off' или [].
Сведения о том, как записать параметры гибридной функции, см. в разделе Параллельные гибридные функции.
Параллельные вычисления с помощью gamultiobj работает почти так же, как с ga. Дополнительные сведения см. в разделе Генетический алгоритм.
Разница между параллельными вычислениями с помощью gamultiobj и ga имеет отношение к гибридной функции. gamultiobj допускает только одну гибридную функцию, fgoalattain. Эта функция дополнительно выполняется после gamultiobj завершает свою работу. Каждый человек в рассчитанной границе Парето, то есть конечная популяция, найденная gamultiobj, становится отправной точкой для оптимизации с использованием fgoalattain. Эти оптимизации выполняются параллельно. Количество процессоров, выполняющих эти оптимизации, меньше количества отдельных пользователей и размера вашего parpool.
Для fgoalattain для параллельного выполнения правильно задайте его параметры:
fgoalopts = optimoptions(@fgoalattain,'UseParallel',true) gaoptions = optimoptions('ga','HybridFcn',{@fgoalattain,fgoalopts});
gamultiobj с gaoptions, и fgoalattain выполняется параллельно. Дополнительные сведения о настройке гибридной функции см. в разделе Параметры гибридной функции.gamultiobj требования fgoalattain использование parfor петля, так fgoalattain не оценивает градиенты параллельно при использовании в качестве гибридной функции с gamultiobj. Дополнительные сведения см. в разделе Отсутствие вложенных элементов для циклов.
particleswarm может автоматически распределять оценку целевой функции, связанной с популяцией, по нескольким процессорам. particleswarm использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Задайте следующие параметры с помощью optimoptions:
UseVectorized является false (по умолчанию).
UseParallel является true.
Когда эти условия сохраняются, particleswarm вычисляет целевую функцию частиц в популяции параллельно.
Примечание
Даже при параллельном выполнении, particleswarm иногда вызывает целевую функцию последовательно на хост-машине. Поэтому убедитесь, что целевая функция не имеет предположений относительно того, оценивается ли она последовательно или параллельно.
Проблемы реализации в параллельной оптимизации роев частиц. Ограничения на варианты, перечисленные в разделе «Рой частиц», частично возникают из-за ограничений parforи частично от природы параллельной обработки:
UseVectorized является false — UseVectorized определяет, particleswarm оценивает всю совокупность с помощью одного вызова функции векторизированным образом. Если UseVectorized является true, particleswarm не распределяет оценку функции, поэтому не использует parfor.
particleswarm может иметь гибридную функцию, которая запускается после её завершения; см. Гибридная схема в генетическом алгоритме. Если вы хотите, чтобы гибридная функция использовала преимущества параллельных вычислений, задайте ее опции отдельно, чтобы UseParallel является true. Если гибридная функция patternsearch, комплект UseCompletePoll кому true чтобы patternsearch выполняется параллельно.
Если гибридная функция fmincon, установите GradObj опция для 'off' или [] с optimoptions иметь оценку параллельного градиента.
Сведения о том, как записать параметры гибридной функции, см. в разделе Параллельные гибридные функции.
simulannealbnd не выполняется параллельно автоматически. Однако он может вызывать гибридные функции, которые используют преимущества параллельных вычислений. Сведения о том, как записать параметры гибридной функции, см. в разделе Параллельные гибридные функции.
paretosearch может автоматически распределять оценку целевой функции, связанной с популяцией, по нескольким процессорам. paretosearch использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Установите следующий параметр с помощью optimoptions:
UseParallel является true.
Когда эти условия сохраняются, paretosearch вычисляет целевую функцию частиц в популяции параллельно.
Примечание
Даже при параллельном выполнении, paretosearch иногда вызывает целевую функцию последовательно на хост-машине. Поэтому убедитесь, что целевая функция не имеет предположений относительно того, оценивается ли она последовательно или параллельно.
Сведения об алгоритме см. в разделе Модификации для параллельных вычислений и векторизованной оценки функций.
surrogateopt может автоматически распределять оценку целевой функции, связанной с популяцией, по нескольким процессорам. surrogateopt использует параллельные вычисления в следующих случаях:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Разрешить параллельные вычисления с помощью parpool, функция панели инструментов параллельных вычислений.
Установите следующий параметр с помощью optimoptions:
UseParallel является true.
Когда эти условия сохраняются, surrogateopt вычисляет целевую функцию частиц в популяции параллельно.
Примечание
Даже при параллельном выполнении, surrogateopt иногда вызывает целевую функцию последовательно на хост-машине. Поэтому убедитесь, что целевая функция не имеет предположений относительно того, оценивается ли она последовательно или параллельно.
Сведения об алгоритме см. в разделе Алгоритм параллельного суррогатеопта.