Создайте 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
на
, где @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) объясняет, как предоставить дополнительные параметры выходным функциям или функциям построения графика.
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
останавливается и выдает ошибку.