Этот пример показывает, как оптимизировать использование решателя particleswarm
.
Целевая функция в этом примере является пятой функцией Де Йонга, которая включена с программным обеспечением 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
является глобальным решением.