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

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

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

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

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

GlobalSearch

×

Никакая параллельная функциональность. Однако fmincon может использовать параллельную оценку градиента, когда запущено в GlobalSearch. Смотрите Используя Параллельные вычисления в Optimization Toolbox (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.  Решатели используют функцию parfor Parallel Computing Toolbox, чтобы выполнить параллельные вычисления.

Примечание

parfor не работает параллельно, когда названо из другого цикла parfor.

Предположим, например, своя целевая функция, userfcn вызывает parfor, и вы хотите вызвать fmincon с помощью MultiStart и параллельной обработки. Предположим также, что условия для параллельной оценки градиента fmincon удовлетворены, как дали в параллельной Функциональности Оптимизации (Optimization Toolbox). Фигура, Когда Выполнения 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).

Для получения информации о факторах, которые влияют на скорость параллельных вычислений и факторы, которые влияют на результаты параллельных вычислений, смотрите Улучшающую Производительность с Параллельными вычислениями (Optimization 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 (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 является 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 с помощью цикла 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 Алгоритм.

Похожие темы