Оптимизируйте Используя рой частицы

Этот пример показывает, как оптимизировать использование решателя 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 является глобальным решением.

Похожие темы