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