Оптимизация роя частиц
попытки найти вектор x = particleswarm(fun,nvars)x при этом достигается локальный минимум fun. nvars - размерность (количество конструктивных переменных) fun.
Примечание
В разделе Передача дополнительных параметров (Passing Extra Parameters) объясняется, как передать дополнительные параметры целевой функции при необходимости.
Минимизируйте простую функцию двух переменных.
Определите целевую функцию.
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около-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
options - Опции для particleswarmoptimoptionsОпции для particleswarm, указанный в качестве выходного сигнала optimoptions функция.
Некоторые опции отсутствуют в optimoptions дисплей. Эти параметры выделены курсивом. Дополнительные сведения см. в разделе Параметры просмотра.
CreationFcn | Функция, создающая начальный рой. Укажите как |
Display | Уровень отображения, возвращенный в командную строку.
|
| DisplayInterval | Интервал итеративного отображения. Итеративный дисплей печатает одну строку для каждой DisplayInterval итерации. По умолчанию: 1. |
FunctionTolerance | Неотрицательный скаляр со значением по умолчанию 1e-6. Итерации заканчиваются при относительном изменении значения лучшей целевой функции за последний MaxStallIterations итерации меньше, чем options.FunctionTolerance. |
| FunValCheck | Проверьте допустимость значений целевой функции и ограничений. |
HybridFcn | Функция, продолжающая оптимизацию после
Также может быть массивом ячеек, определяющим гибридную функцию и ее опции, такие как См. раздел Когда использовать гибридную функцию. |
InertiaRange | Двухэлементный вещественный вектор с одинаковыми значениями знака в порядке возрастания. Задает нижнюю и верхнюю границы адаптивной инерции. Чтобы получить постоянную (неадаптивную) инерцию, задайте оба элемента InertiaRange к тому же значению. По умолчанию: [0.1,1.1]. См. раздел Алгоритм оптимизации роя частиц. |
InitialSwarmMatrix | Начальная популяция или частичная популяция частиц. Mоколо-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 | Дескриптор функции или массив ячеек дескрипторов функции. Функции вывода могут считывать итеративные данные и останавливать решатель. По умолчанию: []. См. раздел Функция вывода и Функция печати. |
PlotFcn | Имя функции, дескриптор функции или массив ячеек дескрипторов функции. Для пользовательских функций печати передайте дескрипторы функций. Функции печати могут считывать итеративные данные, выводить на график каждую итерацию и останавливать решатель. По умолчанию: []. Доступная встроенная функция графика: '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 остановлено.
| Относительное изменение целевого значения за последний |
| Превышено число итераций |
| Итерации останавливаются функцией вывода или функцией графика. |
| Границы противоречивы: для некоторых |
| Наилучшее значение целевой функции ниже |
| Значение лучшей целевой функции не изменилось в течение |
| Превышено время выполнения |
output - Краткое описание процесса решенияСводка процесса решения, возвращенная в виде структуры, содержащей информацию о процессе оптимизации.
| Количество итераций решателя |
| Количество оценок объективных функций. |
| Причина остановки алгоритма. |
| Флаг выхода из гибридной функции. Относится к |
| Состояние генератора случайных чисел по умолчанию непосредственно перед запуском алгоритма. |
Описание алгоритма оптимизации роя частиц см. в разделе Алгоритм оптимизации роя частиц.
Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для particleswarm.
Для параллельного выполнения установите 'UseParallel' опция для true.
options = optimoptions('solvername','UseParallel',true)
Дополнительные сведения см. в разделе Использование параллельной обработки в инструментарии глобальной оптимизации.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.