В этом примере показано, как оптимизировать с помощью particleswarm решатель.
Целевой функцией в этом примере является пятая функция De Jong, которая включена в программное обеспечение Global Optimization Toolbox.
dejong5fcn

Эта функция имеет 25 локальных минимумов.
Попытайтесь найти минимум функции с помощью particleswarm по умолчанию настройки.
fun = @dejong5fcn; nvars = 2; rng default % For reproducibility [x,fval,exitflag] = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2
-31.9521 -16.0176
fval = 5.9288
exitflag = 1
Является ли решение x глобальный оптимум? На данной точке неясно. Глядя на график функций, показывает, что функция имеет локальные минимумы для компонентов в области значений [-50,50]. Поэтому ограничение области значений переменных на [-50,50] помогает решателю найти глобальный минимум.
lb = [-50;-50]; ub = -lb; [x,fval,exitflag] = 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
-16.0079 -31.9697
fval = 1.9920
exitflag = 1
Это выглядит многообещающе: новое решение имеет меньшие fval чем предыдущий. Но есть ли x действительно глобальное решение? Попробуйте минимизировать снова с большим количеством частиц, чтобы лучше искать область.
options = optimoptions('particleswarm','SwarmSize',100); [x,fval,exitflag] = 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
-31.9781 -31.9784
fval = 0.9980
exitflag = 1
Это выглядит еще более многообещающе. Но является ли этот ответ глобальным решением и насколько он точен? Перезапустите решатель с гибридной функцией. particleswarm вызывает гибридную функцию после particleswarm завершает итерации.
options.HybridFcn = @fmincon; [x,fval,exitflag] = 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
-31.9783 -31.9784
fval = 0.9980
exitflag = 1
particleswarm найдено по существу то же решение, что и раньше. Это дает вам некоторое доверие в том, что particleswarm сообщает локальный минимум и окончательный x является глобальным решением.