Оптимизация роя частицы
попытки найти векторный 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
— Нижние границы[]
(значение по умолчанию) | вектор действительных чисел или массивНижние границы в виде вектора действительных чисел или массива типа 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
отображение. Эти опции перечислены курсивом. Для получения дополнительной информации, Опции вида на море (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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.