Оптимизация роя частиц
пытается найти вектор x
= particleswarm(fun
,nvars
)x
который достигает локального минимума fun
. nvars
- размерность (количество конструктивных переменных) fun
.
Примечание
Передача дополнительных параметров объясняет, как передать дополнительные параметры целевой функции, если это необходимо.
Минимизируйте простую функцию из двух переменных.
Определите целевую функцию.
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
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
- Нижние границы[]
(по умолчанию) | вектор действительных чисел или массивНижние границы, заданные как вектор действительных чисел или массив типа double. lb
представляет нижние границы поэлементно в lb
≤ x
≤ ub
.
Внутренне, particleswarm
преобразует массив lb
в векторную lb(:)
.
Пример: lb = [0;-Inf;4]
означает x(1) ≥ 0
, x(3) ≥ 4
.
Типы данных: double
ub
- Верхние границы[]
(по умолчанию) | вектор действительных чисел или массивВерхние границы, заданные как вектор действительных чисел или массив типа double. ub
представляет верхние границы поэлементно в lb
≤ x
≤ ub
.
Внутренне, particleswarm
преобразует массив ub
в векторную ub(:)
.
Пример: ub = [Inf;4;10]
означает x(2) ≤ 4
, x(3) ≤ 10
.
Типы данных: double
options
- Опции для particleswarm
optimoptions
Опции для particleswarm
, заданный как выход optimoptions
функция.
Некоторые опции отсутствуют в optimoptions
отображение. Эти опции указаны курсивом. Для получения дополнительной информации см. раздел «Опции представления».
CreationFcn | Функция, которая создает начальный рой. Задайте следующим |
Display | Level of 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-массив указателей на функцию. Выходные функции могут считывать итерационные данные и останавливать решатель. По умолчанию это [] . Смотрите Выходную функцию и 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 . См. Параллельное или векторизованное вычисление функции. |
problem
- Задача оптимизацииЗадача оптимизации, заданная как структура со следующими полями.
solver | 'particleswarm' |
objective | Указатель на функцию для целевой функции или имя целевой функции. |
nvars | Количество переменных в задаче. |
lb | Вектор или массив нижних границ. |
ub | Вектор или массив верхних границ. |
options | Опции, созданные optimoptions . |
rngstate | Необязательное состояние генератора случайных чисел в начале процесса решения. |
Типы данных: struct
x
- РешениеРешение, возвращенное как вектор действительных чисел, который минимизирует целевую функцию, удовлетворяющую любым связанным ограничениям.
fval
- Целевое значениеЦелевое значение, возвращенное как действительный скаляр fun(x)
.
exitflag
- Условие остановки алгоритмаУсловие остановки алгоритма, возвращаемое как целое число, идентифицирующее причину остановки алгоритма. Ниже списки значения exitflag
и соответствующие причины particleswarm
остановлен.
| Относительное изменение целевого значения за последнее |
| Превышено количество итераций |
| Итерации, остановленные выходной функцией или функцией построения графика. |
| Границы противоречивы: для некоторых |
| Лучшее значение целевой функции ниже |
| Лучшее значение целевой функции не изменилось в |
| Превышено время выполнения |
output
- сводные данные процессов решенияСводные данные процесса решения, возвращенная как структура, содержащая информацию о процессе оптимизации.
| Количество итераций решателя |
| Количество целевых вычислений функции. |
| Причина остановки алгоритма. |
| Выходной флаг из гибридной функции. Относится к |
| Состояние генератора случайных чисел по умолчанию непосредственно перед запуском алгоритма. |
Описание алгоритма оптимизации роя частиц смотрите в Алгоритме оптимизации роя частиц.
Задача Optimize Live Editor обеспечивает визуальный интерфейс для particleswarm
.
Чтобы запустить параллельно, установите 'UseParallel'
опция для true
.
опции = optimoptions (
'solvername
',' UseParallel ', true)
Для получения дополнительной информации см. раздел «Как использовать параллельную обработку в Global Optimization Toolbox».
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.