Параллельная обработка является привлекательным способом ускорить алгоритмы оптимизации. Чтобы использовать параллельную обработку, у вас должна быть лицензия Parallel Computing Toolbox™, и сделать, чтобы параллельный рабочий объединил (parpool
). Для получения дополнительной информации смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.
Решатели Global Optimization Toolbox используют параллельные вычисления в различных способах.
Решатель | Параллель? | Параллельные характеристики |
---|---|---|
| × | Никакая параллельная функциональность. Однако fmincon может использовать параллельную оценку градиента, когда запущено в GlobalSearch . Смотрите Используя Параллельные вычисления в Optimization Toolbox (Optimization Toolbox). |
|
| Стартовые точки распределяются нескольким процессорам. От этих точек выполнение до завершения локальные решатели. Для получения дополнительной информации смотрите MultiStart и Как Использовать Параллельную обработку в Global Optimization Toolbox. |
Для fmincon , никакой параллельной оценки градиента с параллельным MultiStart . | ||
|
| Генеральная совокупность оценила параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Генетический алгоритм и Как Использовать Параллельную обработку в Global Optimization Toolbox. |
Никакая векторизация фитнеса или ограничительных функций. | ||
|
| Генеральная совокупность оценила параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Рой Частицы и Как Использовать Параллельную обработку в Global Optimization Toolbox. |
Никакая векторизация цели или ограничительных функций. | ||
|
| Опросите точки, оцененные параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Поиск Шаблона и Как Использовать Параллельную обработку в Global Optimization Toolbox. |
Никакая векторизация цели или ограничительных функций. | ||
| × | Никакая параллельная функциональность. Однако simulannealbnd может использовать гибридную функцию, которая запускается параллельно. Смотрите Моделируемый Отжиг. |
|
| Поисковые точки оценены параллельно. |
Никакая векторизация цели или ограничительных функций. |
Кроме того, несколько решателей имеют гибридные функции, которые выполняются, они закончили. Некоторые гибридные функции могут запуститься параллельно. Кроме того, большинство методов поиска patternsearch
может запуститься параллельно. Для получения дополнительной информации смотрите Параллельные Поисковые Функции или Гибридные Функции.
Никакие Вложенные циклы parfor. Решатели используют функцию parfor
Parallel Computing Toolbox, чтобы выполнить параллельные вычисления.
parfor
не работает параллельно, когда названо из другого цикла parfor
.
Предположим, например, своя целевая функция, userfcn
вызывает parfor
, и вы хотите вызвать fmincon
с помощью MultiStart
и параллельной обработки. Предположим также, что условия для параллельной оценки градиента fmincon
удовлетворены, как дали в параллельной Функциональности Оптимизации (Optimization Toolbox). Фигура, Когда Выполнения 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).
Для получения информации о факторах, которые влияют на скорость параллельных вычислений и факторы, которые влияют на результаты параллельных вычислений, смотрите Улучшающую Производительность с Параллельными вычислениями (Optimization 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 (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
, перечисленные в Поиске Шаблона, возникают частично из ограничений 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
с помощью цикла 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 Алгоритм.