Параллельная обработка является привлекательным способом ускорения алгоритмов оптимизации. Чтобы использовать параллельную обработку, вы должны иметь лицензию Parallel Computing Toolbox™ и иметь параллельный рабочий пул (parpool
). Для получения дополнительной информации см. раздел «Как использовать параллельную обработку в Global Optimization Toolbox».
Решатели Global Optimization Toolbox используют параллельные вычисления различными способами.
Решатель | Параллельно? | Параллельные характеристики |
---|---|---|
| × | Нет параллельных функций. Однако, fmincon может использовать параллельную оценку градиента при запуске в GlobalSearch . Смотрите Использование параллельных вычислений в Optimization Toolbox. |
|
| Начальные точки, распределенные по нескольким процессорам. От этих точек локальные решатели выполняются до своего завершения. Для получения дополнительной информации смотрите MultiStart и Как использовать параллельную обработку в Global Optimization Toolbox. |
Для fmincon , нет параллельной оценки градиента с параллельными MultiStart . | ||
|
| Население оценивается параллельно, что происходит один раз в итерацию. Для получения дополнительной информации смотрите Генетический алгоритм и Как использовать параллельную обработку в Global Optimization Toolbox. |
Нет векторизации соответствия или ограничительных функций. | ||
|
| Население оценивается параллельно, что происходит один раз в итерацию. Для получения дополнительной информации смотрите Particle Swarm и Как использовать параллельную обработку в Global Optimization Toolbox. |
Векторизация целевых или ограничительных функций отсутствует. | ||
|
| Точки опроса оцениваются параллельно, что происходит один раз за итерацию. Для получения дополнительной информации смотрите Поиск шаблона и Как использовать параллельную обработку в Global Optimization Toolbox. |
Векторизация целевых или ограничительных функций отсутствует. | ||
| × | Нет параллельных функций. Однако, simulannealbnd может использовать гибридную функцию, которая работает параллельно. См. Моделируемый отжиг. |
|
| Поисковые точки оцениваются параллельно. |
Векторизация целевых или ограничительных функций отсутствует. |
В сложение, несколько решателей имеют гибридные функции, которые запускаются после того, как они заканчивают. Некоторые гибридные функции могут работать параллельно. Кроме того, большинство patternsearch
методы поиска могут выполняться параллельно. Для получения дополнительной информации смотрите Функции параллельного поиска или Гибридные функции.
Нет вложенных циклов parfor. Большинство решателей используют Parallel Computing Toolbox parfor
(Parallel Computing Toolbox) для выполнения параллельных расчетов. Два решателя, surrogateopt
и paretosearch
, использование parfeval
(Parallel Computing Toolbox) вместо этого.
Примечание
parfor
не работает параллельно при вызове из другого parfor
цикл.
Примечание
Документация рекомендует не использовать parfor
или parfeval
при вызове Simulink®; см. Использование функции sim в parfor (Simulink). Поэтому вы можете столкнуться с проблемами при оптимизации параллельной симуляции Simulink с помощью встроенной параллельной функциональности решателя.
Допустим, например, ваша целевая функция userfcn
вызовы parfor
, и вы хотите позвонить fmincon
использование MultiStart
и параллельную обработку. Предположим также, что условия для параллельной градиентной оценки fmincon
удовлетворены, как указано в Parallel Optimization Functivality. Рисунок Когда parfor запускается параллельно показывает три случая:
Крайний цикл параллелен MultiStart
. Только этот цикл проходит параллельно.
Наиболее удаленное parfor
цикл находится в fmincon
. Только fmincon
проходит параллельно.
Наиболее удаленное parfor
цикл находится в userfcn
. В этом случае userfcn
может использовать parfor
параллельно.
Когда parfor запускается параллельно
Параллельные случайные числа не воспроизводимы. Случайные числовые последовательности в MATLAB® являются псевдослучайными, определяемыми из seed или начальной настройки. В параллельных расчетах используются семена, которые не обязательно являются управляемыми или воспроизводимыми. Например, каждый образец MATLAB имеет глобальную настройку по умолчанию, которая определяет текущий seed для случайных последовательностей.
Для patternsearch
, если вы выбираете MADS в качестве метода опроса или поиска, параллельный поиск по шаблону не имеет воспроизводимых запусков. Если вы выбираете генетический алгоритм или латинский гиперкуб в качестве методов поиска, параллельный поиск по шаблону не имеет воспроизводимых запусков.
Для ga
и gamultiobj
параллельная генерация населения дает непродуктивные результаты.
MultiStart
отличается. Можно иметь воспроизводимые запуски от параллельных MultiStart
. Запусков воспроизводимы, потому что MultiStart
генерирует псевдослучайные стартовые точки локально, а затем распределяет стартовые точки по параллельным процессорам. Поэтому параллельные процессоры не используют случайные числа. Для получения дополнительной информации см. «Параллельная обработка» и «Потоки случайных чисел».
Ограничения и факторы по эффективности. Больше предостережений, связанных с parfor
появляются в Parallel for-Loops (parfor) (Parallel Computing Toolbox).
Для получения информации о факторах, которые влияют на скорость параллельных расчетов, и факторах, которые влияют на результаты параллельных расчетов, смотрите Улучшение Эффективности при параллельных вычислениях. Те же факторы относятся к параллельным вычислениям с функциями Global Optimization Toolbox.
MultiStart
может автоматически распределить задачу и запустить точки для нескольких процессов или процессоров. Задачи выполняются независимо, и MultiStart
объединяет отдельные локальные минимумы в вектор GlobalOptimSolution
объекты. MultiStart
использует параллельные вычисления, когда вы:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функцию Parallel Computing Toolbox.
Установите UseParallel
свойство к true
в MultiStart
объект:
ms = MultiStart('UseParallel',true);
Когда эти условия сохраняются, MultiStart
распределяет задачу и запускает процессы или процессоры по одному за раз. Алгоритм останавливается, когда он достигает остановочного условия или заканчиваются стартовые точки, которые нужно распределить. Если на MultiStart
Display
свойство 'iter'
, затем MultiStart
отображает:
Running the local solvers in parallel.
Для примера параллельных MultiStart
, см. Parallel MultiStart.
Вопросы реализации в Parallel MultiStart. fmincon
невозможно оценить градиенты параллельно при использовании с параллельными MultiStart
. Это отсутствие параллельной оценки градиента связано с ограничением parfor
описывается в разделе «Нет вложенных циклов 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
, функцию Parallel Computing Toolbox.
Установите UseParallel
опция для true
с optimoptions
. Установите эту опцию в problem
структура:
opts = optimoptions(@fmincon,'UseParallel',true,'Algorithm','sqp'); problem = createOptimProblem('fmincon','objective',@myobj,... 'x0',startpt,'options',opts);
Для получения дополнительной информации смотрите Использование параллельных вычислений в Optimization Toolbox.
patternsearch
может автоматически распределить оценку целевых и ограничительных функций, связанных с точками в шаблоне, по нескольким процессам или процессорам. patternsearch
использует параллельные вычисления, когда вы:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функцию Parallel Computing Toolbox.
Установите следующие опции используя 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
опции, перечисленные в Pattern Search, возникают частично из-за ограничений 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
, функцию Parallel Computing Toolbox.
Установите следующие опции используя 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'
или []
.
Чтобы узнать, как записать опции для гибридной функции, смотрите Parallel Hybrid Functions.
Параллельные вычисления с 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
. Для получения дополнительной информации см. раздел «Нет вложенных циклов parfor».
particleswarm
может автоматически распределить оценку целевой функции, связанной с населением, по нескольким процессорам. particleswarm
использует параллельные вычисления, когда вы:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функцию Parallel Computing Toolbox.
Установите следующие опции используя optimoptions
:
UseVectorized
является false
(по умолчанию).
UseParallel
является true
.
Когда эти условия удерживаются, particleswarm
вычисляет целевую функцию частиц в совокупности параллельно.
Примечание
Даже при параллельном беге, particleswarm
иногда вызывается целевая функция последовательно на хост-машине. Поэтому убедитесь, что ваша целевая функция не имеет никаких предположений о том, оценивается ли она последовательно или параллельно.
Вопросы реализации в параллельной оптимизации роя частиц. Ограничения на опции, перечисленные в Particle Swarm, частично возникают из-за ограничений parfor
и частично от характера параллельной обработки:
UseVectorized
является false
— UseVectorized
определяет, будет ли particleswarm
оценивает целое население с одним вызовом функции векторизированно. Если UseVectorized
является true
, particleswarm
не распределяет оценку функции, поэтому не использует parfor
.
particleswarm
может иметь гибридную функцию, которая запускается после ее окончания; см. Гибридную схему в генетическом алгоритме. Если вы хотите, чтобы гибридная функция использовала преимущества параллельных расчетов, установите ее опции отдельно, чтобы UseParallel
является true
. Если гибридная функция patternsearch
, задать UseCompletePoll
на true
так что patternsearch
проходит параллельно.
Если гибридная функция fmincon
, установите GradObj
опция для 'off'
или []
с optimoptions
иметь параллельную оценку градиента.
Чтобы узнать, как записать опции для гибридной функции, смотрите Parallel Hybrid Functions.
simulannealbnd
не запускается параллельно автоматически. Однако он может вызвать гибридные функции, которые используют преимущества параллельных вычислений. Чтобы узнать, как записать опции для гибридной функции, смотрите Parallel Hybrid Functions.
paretosearch
может автоматически распределить оценку целевой функции, связанной с населением, по нескольким процессорам. paretosearch
использует параллельные вычисления, когда вы:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функцию Parallel Computing Toolbox.
Установите следующую опцию используя optimoptions
:
UseParallel
является true
.
Когда эти условия удерживаются, paretosearch
вычисляет целевую функцию частиц в совокупности параллельно.
Примечание
Даже при параллельном беге, paretosearch
иногда вызывается целевая функция последовательно на хост-машине. Поэтому убедитесь, что ваша целевая функция не имеет никаких предположений о том, оценивается ли она последовательно или параллельно.
Для подробностей алгоритма см. «Изменения для параллельных Расчетов и векторизованных Вычислений функции».
surrogateopt
может автоматически распределить оценку целевой функции, связанной с населением, по нескольким процессорам. surrogateopt
использует параллельные вычисления, когда вы:
Иметь лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функцию Parallel Computing Toolbox.
Установите следующую опцию используя optimoptions
:
UseParallel
является true
.
Когда эти условия удерживаются, surrogateopt
вычисляет целевую функцию частиц в совокупности параллельно.
Примечание
Даже при параллельном беге, surrogateopt
иногда вызывается целевая функция последовательно на хост-машине. Поэтому убедитесь, что ваша целевая функция не имеет никаких предположений о том, оценивается ли она последовательно или параллельно.
Для подробностей алгоритма см. Parallel surrogateopt Algorithm.