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

Параллельные типы обработки в 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

Население оценивается параллельно, что происходит один раз в итерацию. Для получения дополнительной информации смотрите Particle Swarm и Как использовать параллельную обработку в 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 удовлетворены, как указано в Parallel Optimization Functivality. Рисунок Когда parfor запускается параллельно показывает три случая:

  1. Крайний цикл параллелен MultiStart. Только этот цикл проходит параллельно.

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

  3. Наиболее удаленное 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 может автоматически распределить задачу и запустить точки для нескольких процессов или процессоров. Задачи выполняются независимо, и 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 не распределяет задачу и запускает точки для нескольких процессов или процессоров. Однако, когда 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 является 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' или [].

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

Параллельные вычисления с 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 использование parfor цикл, так fgoalattain не оценивает градиенты параллельно при использовании в качестве гибридной функции с gamultiobj. Для получения дополнительной информации см. раздел «Нет вложенных циклов parfor».

Рой частиц

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

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

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

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

    • UseVectorized является false (по умолчанию).

    • UseParallel является true.

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

Примечание

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

Вопросы реализации в параллельной оптимизации роя частиц.  Ограничения на опции, перечисленные в Particle Swarm, частично возникают из-за ограничений parforи частично от характера параллельной обработки:

  • UseVectorized является falseUseVectorized определяет, будет ли 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.

Похожие темы