Параллельная обработка является привлекательным способом ускорить алгоритмы оптимизации. Чтобы использовать параллельную обработку, у вас должна быть лицензия Parallel Computing Toolbox™, и сделать, чтобы параллельный рабочий объединил (parpool
). Для получения дополнительной информации смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.
Решатели Global Optimization Toolbox используют параллельные вычисления в различных способах.
Решатель | Параллель? | Параллельные характеристики |
---|---|---|
| × | Никакая параллельная функциональность. Однако fmincon может использовать параллельную оценку градиента, когда запущено в GlobalSearch . Смотрите Используя параллельные вычисления в Optimization Toolbox. |
|
| Стартовые точки распределяются нескольким процессорам. От этих точек выполнение до завершения локальные решатели. Для получения дополнительной информации смотрите MultiStart и Как Использовать Параллельную обработку в Global Optimization Toolbox. |
Для fmincon , никакая параллельная оценка градиента с параллельным MultiStart . | ||
|
| Население оценило параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Генетический алгоритм и Как Использовать Параллельную обработку в Global Optimization Toolbox. |
Никакая векторизация фитнеса или ограничительных функций. | ||
|
| Население оценило параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Рой Частицы и Как Использовать Параллельную обработку в 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
удовлетворены, как дали в параллельной Функциональности Оптимизации. Фигура, Когда Запуски parfor Параллельно показывает три случая:
Наиболее удаленным циклом является параллельный MultiStart
. Только тот цикл запускается параллельно.
Наиболее удаленное parfor
цикл находится в fmincon
. Только fmincon
запуски параллельно.
Наиболее удаленное parfor
цикл находится в userfcn
. В этом случае, userfcn
может использовать parfor
параллельно.
Когда Запуски parfor Параллельно
Параллельные Случайные числа Не Восстанавливаемы. Последовательности случайных чисел в MATLAB® являются псевдослучайными, определяются из seed или начальной установки. Параллельные расчеты используют seed, которые не обязательно управляемы или восстанавливаемы. Например, каждый экземпляр MATLAB имеет глобальную переменную по умолчанию, устанавливающую, который определяет текущий seed для случайных последовательностей.
Для patternsearch
, если вы выбираете MADS как опрос или метод поиска, параллельный поиск шаблона не имеет восстанавливаемых запусков. Если вы выбираете генетический алгоритм или латинский гиперкуб как методы поиска, параллельный поиск шаблона не имеет восстанавливаемых запусков.
Для ga
и gamultiobj
, параллельная генерация населения дает невоспроизводимые результаты.
MultiStart
отличается. У вас могут быть восстанавливаемые запуски от параллельного MultiStart
. Запуски восстанавливаемы потому что MultiStart
генерирует псевдослучайные стартовые точки локально, и затем распределяет стартовые точки, чтобы быть параллельными процессорам. Поэтому параллельные процессоры не используют случайные числа. Для получения дополнительной информации смотрите Потоки Параллельной обработки и Случайного числа.
Ограничения и Факторы Эффективности. Больше протестов, связанных с parfor
появитесь в параллельных циклах for (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
, смотрите Параллель MultiStart.
Проблемы реализации параллельно 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
.
Установите метод поиска для a 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
, функция 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'
или []
.
Чтобы узнать, как записать опции для гибридной функции, смотрите Параллельные Гибридные Функции.
Параллельные вычисления с 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
использование a parfor
цикл, таким образом, fgoalattain
не оценивает градиенты параллельно, когда используется в качестве гибридной функции с gamultiobj
. Для получения дополнительной информации не смотрите Вложенные циклы parfor.
particleswarm
может автоматически распределить оценку целевой функции, сопоставленной с населением к нескольким процессорам. particleswarm
параллельные вычисления использования, когда вы:
Имейте лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функция Parallel Computing Toolbox.
Установите следующее использование опций 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
, функция Parallel Computing Toolbox.
Установите следующее использование опции optimoptions
:
UseParallel
true
.
Когда эти условия содержат, paretosearch
вычисляет целевую функцию частиц в населении параллельно.
Примечание
Запускаясь параллельно, paretosearch
иногда вызывает целевую функцию последовательно на хост-машине. Поэтому гарантируйте, что ваша целевая функция не имеет никаких предположений о том, оценена ли она в последовательном или параллельном.
Для алгоритмических деталей смотрите Модификации для Параллельного Расчета и Векторизованного Вычисления функции.
surrogateopt
может автоматически распределить оценку целевой функции, сопоставленной с населением к нескольким процессорам. surrogateopt
параллельные вычисления использования, когда вы:
Имейте лицензию на программное обеспечение Parallel Computing Toolbox.
Включите параллельные вычисления с parpool
, функция Parallel Computing Toolbox.
Установите следующее использование опции optimoptions
:
UseParallel
true
.
Когда эти условия содержат, surrogateopt
вычисляет целевую функцию частиц в населении параллельно.
Примечание
Запускаясь параллельно, surrogateopt
иногда вызывает целевую функцию последовательно на хост-машине. Поэтому гарантируйте, что ваша целевая функция не имеет никаких предположений о том, оценена ли она в последовательном или параллельном.
Для алгоритмических деталей смотрите Параллель surrogateopt Алгоритм.