Создайте options с помощью функции optimoptions можно следующим образом.
options = optimoptions('particleswarm','Param1',value1,'Param2',value2,...);
Для примера смотрите, Оптимизируют Используя Рой Частицы.
Каждая опция в этом разделе перечислена его именем поля в options. Например, Display относится к соответствующему полю options.
По умолчанию particleswarm вызывает функцию создания роя 'pswcreationuniform'. Эта функция работает можно следующим образом.
Если опция InitialSwarmMatrix существует, 'pswcreationuniform' берет первые строки SwarmSize матрицы InitialSwarmMatrix как рой. Если количество строк матрицы InitialSwarmMatrix меньше, чем SwarmSize, то 'pswcreationuniform' продолжается к следующему шагу.
'pswcreationuniform' создает достаточно частиц так, чтобы был SwarmSize всего. 'pswcreationuniform' создает частицы, которые являются случайным образом, равномерно распределены. Областью значений для любого компонента роя является -InitialSwarmSpan/2,InitialSwarmSpan/2, переключенный и масштабированный при необходимости, чтобы совпадать с любыми границами.
После создания particleswarm проверяет, что все частицы удовлетворяют любые границы, и обрезает компоненты при необходимости. Если опцией Display является 'iter', и для частицы было нужно усечение, то particleswarm уведомляет вас.
Установите пользовательскую функцию создания использование optimoptions устанавливать опцию CreationFcn на , где @customcreationcustomcreation является именем вашего файла функции создания. Пользовательская функция создания имеет этот синтаксис.
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) объясняет, как предоставить дополнительные параметры выходным функциям или функциям построения графика.
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, то вычисления сделаны векторизованным способом, и не параллельно.
Если у вас есть лицензия Parallel Computing Toolbox™, можно распределить оценку целевых функций к рою среди процессоров или ядер. Установите опцию UseParallel на true.
Параллельное вычисление, вероятно, будет быстрее, чем последовательный, когда ваша целевая функция будет в вычислительном отношении дорогой, или когда у вас есть много частиц и процессоров. В противном случае коммуникация наверху может заставить параллельное вычисление быть медленнее, чем последовательное вычисление.
Для получения дополнительной информации смотрите Параллельные вычисления.
Если ваша целевая функция может оценить все частицы целиком, можно обычно экономить время путем установки опции UseVectorized на true. Ваша целевая функция должна принять M-by-N матрица, где каждая строка представляет одну частицу, и возвратите M-by-1 вектор значений целевой функции. Эта опция работает одинаково как patternsearch и ga опции UseVectorized. Для получения дополнительной информации patternsearch смотрите, Векторизуют Функции Цели и Ограничения.
particleswarm прекращает выполнять итерации, когда любое следующее происходит.
| Остановка опции | Остановка теста | Exitflag |
|---|---|---|
MaxStallIterations и FunctionTolerance | Относительное изменение в лучшем значении целевой функции g по последним итерациям MaxStallIterations является меньше, чем FunctionTolerance. | 1 |
MaxIterations | Количество итераций достигает MaxIterations. | 0 |
OutputFcn или PlotFcn | OutputFcn или PlotFcn могут остановить итерации. | -1 |
ObjectiveLimit | Лучшее значение целевой функции g меньше чем или равно ObjectiveLimit. | -3 |
MaxStallTime | Лучшее значение целевой функции g не изменилось за прошлые секунды MaxStallTime. | -4 |
MaxTime | Функциональное время выполнения превышает секунды MaxTime. | -5 |
Кроме того, если вы устанавливаете опцию FunValCheck на 'on', и рой имеет частицы с NaN, Inf или комплексными значениями целевой функции, particleswarm останавливается и выдает ошибку.