Создайте 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
- 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'
— Решатель достиг останавливающегося критерия. Ваша выходная функция или функция построения графика могут использовать это состояние, чтобы вымыться, такие как закрытие любых файлов, которые это открыло.
Передача Дополнительных Параметров (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
- N
матрица, где каждая строка представляет одну частицу и возвращает M
- 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
остановки и выдают ошибку.