particleswarm

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

Описание

пример

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

Примечание

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

пример

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-by- nvars матрица, где pop - текущий размер населения. В этом случае fun возвращает вектор той же длины, что и pop содержащие значения функции соответствия. Убедитесь, что fun не принимает какого-либо конкретного размера для pop, с particleswarm может пройти один представитель населения даже в векторизованном вычислении.

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

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

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

Пример: 4

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

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

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

Пример: lb = [0;-Inf;4] означает x(1) ≥ 0, x(3) ≥ 4.

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

Верхние границы, заданные как вектор действительных чисел или массив типа 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

Level of 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-by- 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Указатель на функцию или cell-массив указателей на функцию. Выходные функции могут считывать итерационные данные и останавливать решатель. По умолчанию это []. Смотрите Выходную функцию и Plot Function.
PlotFcnИмя функции, указатель на функцию или cell-массив указателей на функцию. Для пользовательских функций построения графика передайте указатели на функцию. Функции построения графика могут считывать итерационные данные, строить график каждой итерации и останавливать решатель. По умолчанию это []. Доступная встроенная функция построения графика: 'pswplotbestf'. Смотрите Выходную функцию и Plot Function.
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

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

Алгоритмы

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

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

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для particleswarm.

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

Введенный в R2014b