Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Optimizar una función usando particleswarm, basado en problemas

Este ejemplo muestra cómo minimizar una función utilizando un enjambre de partículas en el enfoque basado en problemas cuando el objetivo es un archivo de función, posiblemente de contenido desconocido (una función de "caja negra"). La función para minimizar, dejong5fcn(x), se incluye cuando ejecuta este ejemplo.

dejong5fcn

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

Cree una variable de optimización x en 2D. La función dejong5fcn espera que la variable sea un vector de fila, así que especifique x como un vector de fila de 2 elementos.

x = optimvar("x",1,2);

Para utilizar dejong5fcn como función objetivo, convierta la función en una expresión de optimización utilizando fcn2optimexpr.

fun = fcn2optimexpr(@dejong5fcn,x);

Cree un problema de optimización con la función objetivo fun.

prob = optimproblem("Objective",fun);

Establezca límites variables de –50 a 50 en todos los componentes. Cuando se especifican límites escalares, el software expande los límites a todas las variables.

x.LowerBound = -50;
x.UpperBound = 50;

Resuelva el problema, especificando el solucionador particleswarm.

rng default % For reproducibility
[sol,fval] = solve(prob,"Solver","particleswarm")
Solving problem using particleswarm.
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
sol = struct with fields:
    x: [-31.9751 -31.9719]

fval = 
0.9980

Consulte también

| |

Temas