Оптимизация роя частицы
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) объясняет, как передать дополнительные параметры целевой функции при необходимости.
Минимизируйте простую функцию двух переменных.
Задайте целевую функцию.
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 ...'
fun — Целевая функцияЦелевая функция, заданная как указатель на функцию или имя функции. Запишите целевую функцию, чтобы принять вектор - строку из длины nvars и возвратить скалярное значение.
Когда опцией 'UseVectorized' является true, запишите fun, чтобы принять pop-by-nvars матрица, где pop является текущей численностью населения. В этом случае fun возвращает вектор та же длина как pop, содержащий значения функции фитнеса. Гарантируйте, что fun не принимает никакого конкретного размера для pop, поскольку particleswarm может передать одного члена генеральной совокупности даже в векторизованном вычислении.
Пример: fun = @(x)(x-[4,2]).^2
Типы данных: char | function_handle | string
nvars — Количество переменныхКоличество переменных, заданных как положительное целое число. Решатель передает векторы - строки из длины nvars к fun.
Пример 4
Типы данных: double
lb — Нижние границы[] (значение по умолчанию) | вектор действительных чисел или массивНижние границы, заданные как вектор действительных чисел или массив, удваиваются. lb представляет нижние границы, поэлементные в lb ≤ x ≤ ub.
Внутренне, particleswarm преобразовывает массив lb в векторный lb(:).
Пример: lb = [0;-Inf;4] означает x(1) ≥ 0, x(3) ≥ 4.
Типы данных: double
ub — Верхние границы[] (значение по умолчанию) | вектор действительных чисел или массивВерхние границы, заданные как вектор действительных чисел или массив, удваиваются. ub представляет верхние границы, поэлементные в lb ≤ x ≤ ub.
Внутренне, particleswarm преобразовывает массив ub в векторный ub(:).
Пример: ub = [Inf;4;10] означает x(2) ≤ 4, x(3) ≤ 10.
Типы данных: double
опции Опции для particleswarmoptimoptionsОпции для particleswarm, заданного как вывод функции optimoptions.
Некоторые опции отсутствуют в отображении optimoptions. Эти опции перечислены курсивом. Для получения дополнительной информации, Опции вида на море (Optimization Toolbox).
CreationFcn | Функция, которая создает начальный рой. Задайте как |
Display | Уровень отображения возвращен в командную строку.
|
| DisplayInterval | Интервал для итеративного отображения. Итеративное отображение распечатывает одну строку для каждого DisplayInterval итерации. Значением по умолчанию является 1. |
FunctionTolerance | Неотрицательный скаляр с 1e-6 по умолчанию. Итерации заканчиваются, когда относительное изменение в лучшем значении целевой функции по последним итерациям MaxStallIterations является меньше, чем options.FunctionTolerance. |
| FunValCheck | Проверяйте, допустимы ли целевая функция и ограничительные значения. |
HybridFcn | Функция, которая продолжает оптимизацию после
Может также быть массив ячеек, задающий гибридную функцию и ее опции, такие как |
InertiaRange | Двухэлементный вектор действительных чисел с теми же значениями знака в увеличивающемся порядке. Дает нижнюю и верхнюю границу адаптивной инерции. Чтобы получить постоянную (неадаптивную) инерцию, установите оба элемента InertiaRange к тому же значению. Значением по умолчанию является [0.1,1.1]. См. Алгоритм Оптимизации Роя Частицы. |
InitialSwarmMatrix | Начальная генеральная совокупность или частичная генеральная совокупность частиц. M-by-nvars матрица, где каждая строка представляет одну частицу. Если M < SwarmSize, то particleswarm создает больше частиц так, чтобы общим количеством был SwarmSize. Если M > SwarmSize, то particleswarm использует первые строки SwarmSize. |
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. Смотрите Параллельную или Векторизованную Функциональную Оценку. |
problem — Задача оптимизацииЗадача оптимизации, заданная как структура со следующими полями.
solver | 'particleswarm' |
objective | Указатель на функцию к целевой функции или имя целевой функции. |
nvars | Количество переменных в проблеме. |
lb | Вектор или массив нижних границ. |
ub | Вектор или массив верхних границ. |
options | Опции создаются optimoptions. |
rngstate | Дополнительное состояние генератора случайных чисел в начале процесса решения. |
Типы данных: struct
x РешениеРешение, возвращенное как вектор действительных чисел, который минимизирует целевую функцию, подвергающуюся любым связанным ограничениям.
fval Объективное значениеОбъективное значение, возвращенное как действительный скалярный fun(x).
exitflag Алгоритм, останавливающий условиеАлгоритм, останавливающий условие, возвращенное как целое число, идентифицирующее причину остановленный алгоритм. Следующие списки значения exitflag и соответствующих причин остановленный particleswarm.
1 | Относительное изменение в объективном значении по последним итерациям |
0 | Количество итераций превысило |
-1 | Итерации зашли в выходную функцию или функцию построения графика. |
-2 | Границы противоречивы: для некоторого |
-3 | Лучшее значение целевой функции в или ниже |
-4 | Лучшее значение целевой функции не изменилось в течение секунд |
-5 | Время выполнения превысило секунды |
вывод Сводные данные процесса решенияСводные данные процесса решения, возвращенные как структура, содержащая информацию о процессе оптимизации.
| Количество итераций решателя |
| Количество оценок целевой функции. |
| Обоснуйте остановленный алгоритм. |
| Состояние генератора случайных чисел по умолчанию незадолго до запущенного алгоритма. |
Для описания алгоритма оптимизации роя частицы см. Алгоритм Оптимизации Роя Частицы.
Чтобы запуститься параллельно, установите опцию 'UseParallel' на true.
options = optimoptions('solvername','UseParallel',true)
Для получения дополнительной информации смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.