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

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

hybridflag

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

rngstate

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

Алгоритмы

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

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

Приложение

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

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

Введенный в R2014b