exponenta event banner

particleswarm

Оптимизация роя частиц

Описание

пример

x = particleswarm(fun,nvars) попытки найти вектор x при этом достигается локальный минимум fun. nvars - размерность (количество конструктивных переменных) fun.

Примечание

В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как передать дополнительные параметры целевой функции при необходимости.

пример

x = particleswarm(fun,nvars,lb,ub) определяет набор нижних и верхних границ для конструктивных переменных, x, так что решение находится в диапазоне lb  x  ub.

пример

x = particleswarm(fun,nvars,lb,ub,options) минимизирует с параметрами оптимизации по умолчанию, замененными значениями в options. Набор lb = [] и ub = [] если не существует границ.

x = particleswarm(problem) находит минимальное значение для problem, структура, описанная в problem.

пример

[x,fval,exitflag,output] = particleswarm(___), для любых входных аргументов, описанных выше, возвращает:

  • Скаляр fval, которое является значением целевой функции fun(x)

  • Стоимость exitflag описание условия выхода

  • Структура output содержит информацию о процессе оптимизации

Примеры

свернуть все

Минимизируйте простую функцию двух переменных.

Определите целевую функцию.

fun = @(x)x(1)*exp(-norm(x)^2);

Звонить particleswarm для минимизации функции.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.

x =

  629.4474  311.4814

Это решение далеко от истинного минимума, как видно на графике функции.

fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))

Обычно лучше всего устанавливать границы. См. раздел Минимизация простой функции с границами.

Минимизируйте простую функцию двух переменных с ограничивающими ограничениями.

Определите целевую функцию.

fun = @(x)x(1)*exp(-norm(x)^2);

Установите границы для переменных.

lb = [-10,-15];
ub = [15,20];

Звонить particleswarm для минимизации функции.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

Используйте большую популяцию и гибридную функцию, чтобы попытаться получить лучшее решение.

Укажите целевую функцию и границы.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];

Задайте параметры.

options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

Звонить particleswarm для минимизации функции.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

Для более подробного анализа процесса решения вернитесь к дополнительным аргументам вывода.

Определите проблему.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);

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

rng default  % For reproducibility
nvars = 2;
[x,fval,exitflag,output] = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

fval = -0.4289
exitflag = 1
output = struct with fields:
      rngstate: [1x1 struct]
    iterations: 43
     funccount: 2203
       message: 'Optimization ended: relative change in the objective value ...'
    hybridflag: 1

Входные аргументы

свернуть все

Целевая функция, указанная как дескриптор функции или имя функции. Запишите целевую функцию, чтобы принять вектор строки длины nvars и возвращает скалярное значение.

Когда 'UseVectorized' опция - true, написать fun чтобы принять popоколо-nvars матрица, где pop - текущий размер населения. В этом случае fun возвращает вектор той же длины, что и pop содержащий значения функции пригодности. Убедитесь, что fun не принимает какой-либо конкретный размер для pop, так как particleswarm может передавать одного члена населения даже в векторизованном расчете.

Пример: fun = @(x)(x-[4,2]).^2

Типы данных: char | function_handle | string

Число переменных, указанное как положительное целое число. Решатель пропускает векторы строк длины nvars кому fun.

Пример: 4

Типы данных: double

Нижние границы, определяемые как действительный вектор или массив двойников. lb представляет нижние границы по элементам в lb  x  ub.

Внутри, particleswarm преобразует массив lb к вектору lb(:).

Пример: lb = [0;-Inf;4] средства x(1) ≥ 0, x(3) ≥ 4.

Типы данных: double

Верхние границы, определяемые как действительный вектор или массив двойников. ub представляет верхние границы по элементам в lb  x  ub.

Внутри, particleswarm преобразует массив ub к вектору ub(:).

Пример: ub = [Inf;4;10] средства x(2) ≤ 4, x(3) ≤ 10.

Типы данных: double

Опции для particleswarm, указанный в качестве выходного сигнала optimoptions функция.

Некоторые опции отсутствуют в optimoptions дисплей. Эти параметры выделены курсивом. Дополнительные сведения см. в разделе Параметры просмотра.

CreationFcn

Функция, создающая начальный рой. Укажите как 'pswcreationuniform' или дескриптор функции. По умолчанию: 'pswcreationuniform'. Смотрите раздел Создание роя.

Display

Уровень отображения, возвращенный в командную строку.

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

  • 'final' отображает только окончательный вывод (по умолчанию).

  • 'iter' обеспечивает итеративное отображение.

DisplayIntervalИнтервал итеративного отображения. Итеративный дисплей печатает одну строку для каждой DisplayInterval итерации. По умолчанию: 1.
FunctionToleranceНеотрицательный скаляр со значением по умолчанию 1e-6. Итерации заканчиваются при относительном изменении значения лучшей целевой функции за последний MaxStallIterations итерации меньше, чем options.FunctionTolerance.
FunValCheck

Проверьте допустимость значений целевой функции и ограничений. 'on' отображает ошибку, когда целевая функция или ограничения возвращают сложное значение, Inf, или NaN. Значение по умолчанию, 'off', не отображает ошибки.

HybridFcn

Функция, продолжающая оптимизацию после particleswarm завершается. Укажите в качестве имени или дескриптора функции. Возможные значения:

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

Также может быть массивом ячеек, определяющим гибридную функцию и ее опции, такие как {@fmincon,fminconopts}. По умолчанию: []. См. раздел Гибридная функция.

См. раздел Когда использовать гибридную функцию.

InertiaRangeДвухэлементный вещественный вектор с одинаковыми значениями знака в порядке возрастания. Задает нижнюю и верхнюю границы адаптивной инерции. Чтобы получить постоянную (неадаптивную) инерцию, задайте оба элемента InertiaRange к тому же значению. По умолчанию: [0.1,1.1]. См. раздел Алгоритм оптимизации роя частиц.
InitialSwarmMatrixНачальная популяция или частичная популяция частиц. Mоколо-nvars матрица, где каждая строка представляет одну частицу. Если M < SwarmSize, то particleswarm создает больше частиц, так что общее число SwarmSize. Если M > SwarmSize, то particleswarm использует первый SwarmSize строк.
InitialSwarmSpan

Начальный диапазон положений частиц, которые @pswcreationuniform создает. Может быть положительным скаляром или вектором с nvars элементы, где nvars - количество переменных. Диапазон для любого компонента частиц составляет -InitialSwarmSpan/2,InitialSwarmSpan/2, сдвигается и масштабируется при необходимости для соответствия каким-либо границам. По умолчанию: 2000.

InitialSwarmSpan также влияет на диапазон начальных скоростей частиц. См. раздел Инициализация.

MaxIterationsМаксимальное количество итераций particleswarm принимает. По умолчанию: 200*nvars, где nvars - количество переменных.
MaxStallIterationsПоложительное целое число со значением по умолчанию 20. Итерации заканчиваются при относительном изменении значения лучшей целевой функции за последний MaxStallIterations итерации меньше, чем options.FunctionTolerance.
MaxStallTimeМаксимальное количество секунд без улучшения наиболее известного значения целевой функции. Положительный скаляр со значением по умолчанию Inf.
MaxTimeМаксимальное время в секундах, particleswarm бежит. По умолчанию: Inf.
MinNeighborsFractionМинимальный размер адаптивной окрестности, скаляр от 0 кому 1. По умолчанию: 0.25. См. раздел Алгоритм оптимизации роя частиц.
ObjectiveLimitМинимальное объективное значение, критерий остановки. Скаляр, по умолчанию -Inf.
OutputFcnДескриптор функции или массив ячеек дескрипторов функции. Функции вывода могут считывать итеративные данные и останавливать решатель. По умолчанию: []. См. раздел Функция вывода и Функция печати.
PlotFcnИмя функции, дескриптор функции или массив ячеек дескрипторов функции. Для пользовательских функций печати передайте дескрипторы функций. Функции печати могут считывать итеративные данные, выводить на график каждую итерацию и останавливать решатель. По умолчанию: []. Доступная встроенная функция графика: 'pswplotbestf'. См. раздел Функция вывода и Функция печати.
SelfAdjustmentWeightВзвешивание наилучшего положения каждой частицы при регулировке скорости. Конечный скаляр со значением по умолчанию 1.49. См. раздел Алгоритм оптимизации роя частиц.
SocialAdjustmentWeightВзвешивание наилучшего положения района при регулировке скорости. Конечный скаляр со значением по умолчанию 1.49. См. раздел Алгоритм оптимизации роя частиц.
SwarmSizeКоличество частиц в рое, целое число больше 1. По умолчанию: min(100,10*nvars), где nvars - количество переменных.
UseParallelВычислять целевую функцию параллельно, когда true. По умолчанию: false. См. раздел Оценка параллельной или векторизованной функции.
UseVectorizedВычислить целевую функцию векторизированным образом, когда true. По умолчанию: false. См. раздел Оценка параллельной или векторизованной функции.

Задача оптимизации, заданная как структура со следующими полями.

solver'particleswarm'
objectiveДескриптор функции для целевой функции или имени целевой функции.
nvarsЧисло переменных в проблеме.
lbВектор или массив нижних границ.
ubВектор или массив верхних границ.
optionsПараметры, созданные optimoptions.
rngstateНеобязательное состояние генератора случайных чисел в начале процесса решения.

Типы данных: struct

Выходные аргументы

свернуть все

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

Объективное значение, возвращаемое как действительный скаляр fun(x).

Условие остановки алгоритма, возвращаемое как целое число, определяющее причину остановки алгоритма. Ниже перечислены значения exitflag и соответствующие причины particleswarm остановлено.

1

Относительное изменение целевого значения за последний options.MaxStallIterations итерации меньше, чем options.FunctionTolerance.

0

Превышено число итераций options.MaxIterations.

-1

Итерации останавливаются функцией вывода или функцией графика.

-2

Границы противоречивы: для некоторых i, lb(i) > ub(i).

-3

Наилучшее значение целевой функции ниже options.ObjectiveLimit.

-4

Значение лучшей целевой функции не изменилось в течение options.MaxStallTime секунд.

-5

Превышено время выполнения options.MaxTime секунд.

Сводка процесса решения, возвращенная в виде структуры, содержащей информацию о процессе оптимизации.

iterations

Количество итераций решателя

funccount

Количество оценок объективных функций.

message

Причина остановки алгоритма.

hybridflag

Флаг выхода из гибридной функции. Относится к HybridFcn options.

rngstate

Состояние генератора случайных чисел по умолчанию непосредственно перед запуском алгоритма.

Алгоритмы

Описание алгоритма оптимизации роя частиц см. в разделе Алгоритм оптимизации роя частиц.

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для particleswarm.

Расширенные возможности

Представлен в R2014b