Оптимизация роя частицы
попытки найти векторный 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- 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 отображение. Эти опции перечислены курсивом. Для получения дополнительной информации, Опции вида на море (Optimization Toolbox).
CreationFcn | Функция, которая создает начальный рой. Задайте как |
Display | Level of 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 | Указатель на функцию или 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 | Время выполнения превысило |
output — Сводные данные процесса решенияСводные данные процесса решения, возвращенные как структура, содержащая информацию о процессе оптимизации.
| Количество итераций решателя |
| Количество оценок целевой функции. |
| Обоснуйте остановленный алгоритм. |
| Состояние генератора случайных чисел по умолчанию незадолго до запущенного алгоритма. |
Для описания алгоритма оптимизации роя частицы см. Алгоритм Оптимизации Роя Частицы.
Чтобы запуститься параллельно, установите 'UseParallel' опция к true.
опции = optimoptions ('solvername', 'UseParallel', верный)
Для получения дополнительной информации смотрите, Как Использовать Параллельную обработку в Global Optimization Toolbox.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.