Опции роя частицы

Определение Опций для particleswarm

Создайте options с помощью функции optimoptions можно следующим образом.

options = optimoptions('particleswarm','Param1',value1,'Param2',value2,...);

Для примера смотрите, Оптимизируют Используя Рой Частицы.

Каждая опция в этом разделе перечислена его именем поля в options. Например, Display относится к соответствующему полю options.

Создание роя

По умолчанию particleswarm вызывает функцию создания роя 'pswcreationuniform'. Эта функция работает можно следующим образом.

  1. Если опция InitialSwarmMatrix существует, 'pswcreationuniform' берет первые строки SwarmSize матрицы InitialSwarmMatrix как рой. Если количество строк матрицы InitialSwarmMatrix меньше, чем SwarmSize, то 'pswcreationuniform' продолжается к следующему шагу.

  2. 'pswcreationuniform' создает достаточно частиц так, чтобы был SwarmSize всего. 'pswcreationuniform' создает частицы, которые являются случайным образом, равномерно распределены. Областью значений для любого компонента роя является -InitialSwarmSpan/2,InitialSwarmSpan/2, переключенный и масштабированный при необходимости, чтобы совпадать с любыми границами.

После создания particleswarm проверяет, что все частицы удовлетворяют любые границы, и обрезает компоненты при необходимости. Если опцией Display является 'iter', и для частицы было нужно усечение, то particleswarm уведомляет вас.

Пользовательская функция создания

Установите пользовательскую функцию создания использование optimoptions устанавливать опцию CreationFcn на @customcreation, где customcreation является именем вашего файла функции создания. Пользовательская функция создания имеет этот синтаксис.

swarm = customcreation(problem)

Функция создания должна возвратить матрицу размера SwarmSize-by-nvars, где каждая строка представляет местоположение одной частицы. Смотрите problem для деталей структуры задачи. В частности, можно получить SwarmSize из problem.options.SwarmSize и nvars от problem.nvars.

Для примера функции создания см. код для pswcreationuniform.

edit pswcreationuniform

Отобразите настройки

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

  • 'off' или 'none' — No вывод отображен.

  • 'iter' — Информация отображена в каждой итерации.

  • 'final' (значение по умолчанию) — Причина остановки отображена.

Отображения iter:

  • Iteration — Номер итерации

  • f-count — Совокупное число оценок целевой функции

  • Best f(x) — Лучшее значение целевой функции

  • Mean f(x) — Среднее значение целевой функции по всем частицам

  • Stall Iterations — Количество итераций начиная с последнего изменения в Best f(x)

Опция DisplayInterval определяет номер итераций, которые выполняются перед итеративными обновлениями отображения. Дайте положительное целое число.

Настройки алгоритма

Детали алгоритма particleswarm появляются в Алгоритме Оптимизации Роя Частицы. В этом разделе описываются настраивающиеся параметры.

Основной шаг в алгоритме роя частицы является генерацией новых скоростей для роя:

Для u1 и u2 однородно (0,1) распределенные случайные векторы длины nvars, обновите скорость

v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).

Переменные W = inertia, y1 = SelfAdjustmentWeight и y2 = SocialAdjustmentWeight.

Это обновление использует взвешенную сумму:

  • Предыдущая скорость v

  • x-p, различие между текущим положением x и лучшим положением p частица видели

  • x-g, различие между текущим положением x и лучшим положением g в текущем окружении

На основе этой формулы опции имеют следующий эффект:

  • Большее абсолютное значение инерции W приводит к новой скорости, являющейся больше в той же строке как старое, и с большим абсолютным значением. Большое абсолютное значение W может дестабилизировать рой. Значение W остается в области значений двухэлементного векторного InertiaRange.

  • Большие значения y1 = SelfAdjustmentWeight заставляют частицу направиться больше в лучшее место, которое это посетило.

  • Большие значения y2 = SocialAdjustmentWeight заставляют частицу направиться больше в лучшее место в текущем окружении.

Большие значения инерции, SelfAdjustmentWeight или SocialAdjustmentWeight могут дестабилизировать рой.

Опция MinNeighborsFraction устанавливает и начальный размер окружения для каждой частицы и минимальный размер окружения; см. Алгоритм Оптимизации Роя Частицы. Установка MinNeighborsFraction к 1 имеет всех участников использования роя глобальная минимальная точка как их социальная цель корректировки.

Смотрите Оптимизируют Используя Рой Частицы для примера, который устанавливает несколько из этих настраивающих опций.

Гибридная функция

Гибридная функция является другой функцией минимизации, которая выполняется после алгоритма роя частицы, останавливается. Можно задать гибридную функцию в опции HybridFcn. Выбор

  • [] — Никакая гибридная функция.

  • fminsearch Используйте функцию MATLAB® fminsearch, чтобы выполнить безусловную минимизацию.

  • 'patternsearch' — Используйте поиск шаблона, чтобы выполнить ограниченную или безусловную минимизацию.

  • 'fminunc' — Используйте функцию Optimization Toolbox™ fminunc, чтобы выполнить безусловную минимизацию.

  • 'fmincon' — Используйте функцию Optimization Toolbox fmincon, чтобы выполнить ограниченную минимизацию.

Примечание

Гарантируйте, что ваша гибридная функция принимает ваши ограничения задач. В противном случае particleswarm выдает ошибку.

Можно установить отдельные опции для гибридной функции. Используйте optimset для fminsearch или optimoptions для fmincon, patternsearch или fminunc. Например:

hybridopts = optimoptions('fminunc','Display','iter','Algorithm','quasi-newton');
Включайте гибридные опции в options particleswarm можно следующим образом:
options = optimoptions(options,'HybridFcn',{@fminunc,hybridopts}); 
hybridopts должен существовать, прежде чем вы установите options.

Для примера, который использует гибридную функцию, смотрите, Оптимизируют Используя Рой Частицы. Смотрите, Когда Использовать Гибридную Функцию.

Выходная функция и функция построения графика

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

options = optimoptions(@particleswarm,'OutputFcn',@outfun)

где outfun является функцией с синтаксисом, заданным в Структуре Выходной функции или Функции построения графика. Если вы имеете несколько выходных функций, передаете их как cell-массив указателей на функцию:

options = optimoptions(@particleswarm,'OutputFcn',{@outfun1,@outfun2,@outfun3})

Точно так же функции построения графика являются функциями, что particleswarm заходит в каждую итерацию. Различие между выходной функцией и функцией построения графика - то, что функция построения графика имеет встроенные улучшения графического вывода, такие как кнопки, которые, кажется, на окне графика приостанавливают или останавливают particleswarm. Одинокая встроенная функция построения графика 'pswplotbestf' строит лучшее значение целевой функции против итераций. Задавать его,

options = optimoptions(@particleswarm,'PlotFcn','pswplotbestf')

Чтобы создать пользовательскую функцию построения графика, запишите функцию с синтаксисом, заданным в Структуре Выходной функции или Функции построения графика. Чтобы задать пользовательскую функцию построения графика, используйте указатель на функцию. Если вы имеете несколько функций построения графика, передаете их как cell-массив указателей на функцию:

options = optimoptions(@particleswarm,'PlotFcn',{@plotfun1,@plotfun2,@plotfun3})

Для примера пользовательской выходной функции смотрите Выходную функцию Роя Частицы.

Структура выходной функции или функции построения графика

Выходная функция имеет следующий синтаксис вызова:

stop = myfun(optimValues,state)

Если ваша функция устанавливает stop на true, конец итераций. Набор stop к false, чтобы иметь particleswarm продолжает вычислять.

Функция имеет следующие входные параметры:

  • optimValues — Структура, содержащая информацию о рое в текущей итерации. Детали находятся в optimValues Структуре.

  • state — Строка, дающая состояние текущей итерации.

    • 'init' — Решатель не начал выполнять итерации. Ваша выходная функция или функция построения графика могут использовать это состояние, чтобы открыть файлы или настроить структуры данных или графики для последующих итераций.

    • 'iter' — Решатель является продолжением его итераций. Как правило, это - то, где ваша выходная функция или функция построения графика выполняют свою работу.

    • сделанный Решатель достиг останавливающегося критерия. Ваша выходная функция или функция построения графика могут использовать это состояние, чтобы вымыться, такие как закрытие любых файлов, которые это открыло.

Передача Дополнительных Параметров (Optimization Toolbox) объясняет, как предоставить дополнительные параметры выходным функциям или функциям построения графика.

Структура optimValues

particleswarm передает структуру optimValues вашим выходным функциям или функциям построения графика. Структура optimValues имеет следующие поля.

Поле Содержимое
funccountОбщее количество оценок целевой функции.
bestxНайденная точка лучшего решения, соответствуя лучшему значению целевой функции bestfval.
bestfvalЛучше всего (самое низкое) значение целевой функции найдено.
iterationНомер итерации.
meanfvalСредняя целевая функция среди всех частиц в текущей итерации.
stalliterationsКоличество итераций начиная с последнего изменения в bestfval.
swarmМатрица, содержащая положения частицы. Каждая строка содержит положение одной частицы, и количество строк равно размеру роя.
swarmfvalsВектор, содержащий значения целевой функции частиц в рое. Для частицы i, swarmfvals(i) = fun(swarm(i,:)), где fun является целевой функцией.

Параллельная или векторизованная функциональная оценка

Для увеличенной скорости можно установить опции так, чтобы particleswarm выполнил целевую функцию для роя в parallel или способом vectorized. Можно использовать только одну из этих опций. Если вы устанавливаете UseParallel на true и UseVectorized к true, то вычисления сделаны векторизованным способом, и не параллельно.

Параллель particleswarm

Если у вас есть лицензия Parallel Computing Toolbox™, можно распределить оценку целевых функций к рою среди процессоров или ядер. Установите опцию UseParallel на true.

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

Для получения дополнительной информации смотрите Параллельные вычисления.

Векторизованный particleswarm

Если ваша целевая функция может оценить все частицы целиком, можно обычно экономить время путем установки опции UseVectorized на true. Ваша целевая функция должна принять M-by-N матрица, где каждая строка представляет одну частицу, и возвратите M-by-1 вектор значений целевой функции. Эта опция работает одинаково как patternsearch и ga опции UseVectorized. Для получения дополнительной информации patternsearch смотрите, Векторизуют Функции Цели и Ограничения.

Критерий остановки

particleswarm прекращает выполнять итерации, когда любое следующее происходит.

Остановка опцииОстановка тестаExitflag
MaxStallIterations и FunctionToleranceОтносительное изменение в лучшем значении целевой функции g по последним итерациям MaxStallIterations является меньше, чем FunctionTolerance.1
MaxIterationsКоличество итераций достигает MaxIterations.0
OutputFcn или PlotFcnOutputFcn или PlotFcn могут остановить итерации.-1
ObjectiveLimitЛучшее значение целевой функции g меньше чем или равно ObjectiveLimit.-3
MaxStallTimeЛучшее значение целевой функции g не изменилось за прошлые секунды MaxStallTime.-4
MaxTimeФункциональное время выполнения превышает секунды MaxTime.-5

Кроме того, если вы устанавливаете опцию FunValCheck на 'on', и рой имеет частицы с NaN, Inf или комплексными значениями целевой функции, particleswarm останавливается и выдает ошибку.