Оптимизация роя частицы
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
опции
Опции для particleswarm
optimoptions
Опции для 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.