exponenta event banner

Оптимизация с использованием роя частиц

В этом примере показано, как оптимизировать использование particleswarm решатель.

Целевой функцией в этом примере является пятая функция Де Йонга, которая входит в состав программного обеспечения Global Optimization Toolbox.

dejong5fcn

Figure contains an axes. The axes contains 2 objects of type surface, contour.

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

Связанные темы