particleswarm

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

Синтаксис

x = particleswarm(fun,nvars)
x = particleswarm(fun,nvars,lb,ub)
x = particleswarm(fun,nvars,lb,ub,options)
x = particleswarm(problem)
[x,fval,exitflag,output] = particleswarm(___)

Описание

пример

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

Примечание

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

пример

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 ...'

Входные параметры

свернуть все

Целевая функция, заданная как указатель на функцию или имя функции. Запишите целевую функцию, чтобы принять вектор - строку из длины 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

Нижние границы, заданные как вектор действительных чисел или массив, удваиваются. 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. Эти опции перечислены курсивом. Для получения дополнительной информации, Опции вида на море (Optimization Toolbox).

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

Обоснуйте остановленный алгоритм.

rngstate

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

Алгоритмы

Для описания алгоритма оптимизации роя частицы см. Алгоритм Оптимизации Роя Частицы.

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

Введенный в R2014b