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

Определение Опций для 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- nvars, где каждая строка представляет местоположение одной частицы. Смотрите problem для деталей структуры задачи. В частности, можно получить SwarmSize от problem.options.SwarmSize, и nvars от problem.nvars.

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

edit pswcreationuniform

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

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

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

  • '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');
Включайте гибридные опции в particleswarm options можно следующим образом:
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' — Решатель является продолжением его итераций. Как правило, это - то, где ваша выходная функция или функция построения графика выполняют свою работу.

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

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

Структура 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- N матрица, где каждая строка представляет одну частицу и возвращает M- 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', и рой имеет частицы с NaNInf, или объедините значения целевой функции, particleswarm остановки и выдают ошибку.