Как решатели вычисляют параллельно

Типы параллельной обработки в Global Optimization Toolbox

Параллельная обработка является привлекательным способом ускорить алгоритмы оптимизации. Чтобы использовать параллельную обработку, у вас должна быть лицензия Parallel Computing Toolbox™, и сделать, чтобы параллельный рабочий объединил (parpool). Для получения дополнительной информации смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.

Решатели Global Optimization Toolbox используют параллельные вычисления в различных способах.

РешательПараллель?Параллельные характеристики

GlobalSearch

×

Никакая параллельная функциональность. Однако fmincon может использовать параллельную оценку градиента, когда запущено в GlobalSearch. Смотрите Используя параллельные вычисления в Optimization Toolbox.

MultiStart

Стартовые точки распределяются нескольким процессорам. От этих точек выполнение до завершения локальные решатели. Для получения дополнительной информации смотрите MultiStart и Как Использовать Параллельную обработку в Global Optimization Toolbox.
Для fmincon, никакая параллельная оценка градиента с параллельным MultiStart.

ga, gamultiobj

Население оценило параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Генетический алгоритм и Как Использовать Параллельную обработку в Global Optimization Toolbox.
Никакая векторизация фитнеса или ограничительных функций.

particleswarm

Население оценило параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Рой Частицы и Как Использовать Параллельную обработку в Global Optimization Toolbox.
Никакая векторизация цели или ограничительных функций.

patternsearch, paretosearch

Опросите точки, оцененные параллельно, который происходит однажды на итерацию. Для получения дополнительной информации смотрите Поиск Шаблона и Как Использовать Параллельную обработку в Global Optimization Toolbox.
Никакая векторизация цели или ограничительных функций.

simulannealbnd

×

Никакая параллельная функциональность. Однако simulannealbnd может использовать гибридную функцию, которая запускается параллельно. Смотрите Симулированный Отжиг.

surrogateopt

Поисковые точки оценены параллельно.
Никакая векторизация цели или ограничительных функций.

Кроме того, несколько решателей имеют гибридные функции, которые выполняются, они закончили. Некоторые гибридные функции могут запуститься параллельно. Кроме того, большинство patternsearch методы поиска могут запуститься параллельно. Для получения дополнительной информации смотрите Параллельные Поисковые Функции или Гибридные Функции.

Как функции тулбокса распределяют процессы

Характеристики parfor и Протесты

Никакие Вложенные циклы 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 Параллельно показывает три случая:

  1. Наиболее удаленным циклом является параллельный MultiStart. Только тот цикл запускается параллельно.

  2. Наиболее удаленное parfor цикл находится в fmincon. Только fmincon запуски параллельно.

  3. Наиболее удаленное 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 может автоматически распределить проблему и стартовые точки к нескольким процессам или процессорам. Проблемы, запущенные независимо, и 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 не распределяет проблему и стартовые точки к нескольким процессам или процессорам. Однако, когда 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 trueUseCompletePoll определяет, останавливается ли опрос как только patternsearch находит лучшую точку. При поиске параллельно, parfor расписания все оценки одновременно, и patternsearch продолжается после всех завершенных оценок. patternsearch не может остановить оценки после того, как они запустят.

    Начало в R2019a, когда вы устанавливаете UseParallel опция к true, patternsearch внутренне заменяет UseCompletePoll установка на true таким образом, это опрашивает параллельно.

  • UseVectorized falseUseVectorized определяет ли patternsearch оценивает все точки в шаблоне с одним вызовом функции векторизованным способом. Если UseVectorized true, patternsearch не распределяет оценку функции, не, используют - также parfor.

Генетический алгоритм

ga и gamultiobj может автоматически распределить оценку объективных и нелинейных ограничительных функций, сопоставленных с населением к нескольким процессорам. ga параллельные вычисления использования, когда вы:

  • Имейте лицензию на программное обеспечение Parallel Computing Toolbox.

  • Включите параллельные вычисления с parpool, функция Parallel Computing Toolbox.

  • Установите следующее использование опций optimoptions:

    • UseVectorized false (значение по умолчанию).

    • UseParallel true.

Когда эти условия содержат, ga вычисляет целевую функцию и нелинейные ограничительные значения индивидуумов в населении параллельно.

Примечание

Запускаясь параллельно, ga иногда вызывает фитнес, и нелинейное ограничение функционирует последовательно на хост-машине. Поэтому гарантируйте, что ваши функции не имеют никаких предположений о том, оценены ли они в последовательном или параллельном.

Проблемы реализации в параллельном Генетическом алгоритме.  Ограничения на опции, перечисленные в Генетическом алгоритме, возникают частично из ограничений parfor, и частично от природы параллельной обработки:

  • UseVectorized falseUseVectorized определяет ли ga оценивает целое население с одним вызовом функции векторизованным способом. Если UseVectorized true, ga не распределяет оценку функции, не, используют - также parfor.

ga может иметь гибридную функцию, которая выполняется после него концы; см. Гибридную Схему в Генетическом алгоритме. Если вы хотите, чтобы гибридная функция использовала в своих интересах параллельный расчет, установите его опции отдельно так, чтобы UseParallel true. Если гибридная функция patternsearch, установите UseCompletePoll к true так, чтобы patternsearch запуски параллельно.

Если гибридная функция fmincon, установите следующие опции с optimoptions иметь параллельную оценку градиента:

  • GradObj не должен быть 'on' — это может быть 'off' или [].

  • Или, если существует нелинейная ограничительная функция, GradConstr не должен быть 'on' — это может быть 'off' или [].

Чтобы узнать, как записать опции для гибридной функции, смотрите Параллельные Гибридные Функции.

Параллельные вычисления с gamultiobj

Параллельные вычисления с 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 falseUseVectorized определяет ли 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 Алгоритм.

Похожие темы