Main Content

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

particleswarm

Optimización de enjambre de partículas

Descripción

x = particleswarm(fun,nvars) intenta encontrar un vector x que logre un mínimo local de fun. nvars es la dimensión (número de variables de diseño) de fun.

Nota

Pasar parámetros adicionales explica cómo pasar parámetros adicionales a la función objetivo, si es necesario.

ejemplo

x = particleswarm(fun,nvars,lb,ub) define un conjunto de límites inferior y superior en las variables de diseño, x, de modo que se encuentre una solución en el rango lb x ub.

ejemplo

x = particleswarm(fun,nvars,lb,ub,options) se minimiza con los parámetros de optimización predeterminados reemplazados por valores en options. Establezca lb = [] y ub = [], si no existen límites.

ejemplo

x = particleswarm(problem) encuentra el mínimo para problem, una estructura descrita en problem.

[x,fval,exitflag,output,points] = particleswarm(___) también devuelve lo siguiente, utilizando cualquiera de las combinaciones de argumentos de entrada en las sintaxis anteriores:

  • fval, un escalar que es el valor de la función objetivo fun(x)

  • exitflag, un valor que describe la condición de salida

  • output, una estructura que contiene información sobre el proceso de optimización

  • points, una estructura que contiene las posiciones finales del enjambre en points.X y los valores de la función objetivo asociada en points.Fval

ejemplo

Ejemplos

contraer todo

Minimizar una función simple de dos variables.

Defina la función objetivo.

fun = @(x)x(1)*exp(-norm(x)^2);

Llama a particleswarm para minimizar la función.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.

x =

  629.4474  311.4814

Esta solución está lejos del mínimo real, como se ve en el gráfico de funciones.

fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))

Generalmente lo mejor es establecer límites. Consulte Minimizar una función simple con límites.

Minimizar una función simple de dos variables con restricciones de cota.

Defina la función objetivo.

fun = @(x)x(1)*exp(-norm(x)^2);

Establezca límites a las variables.

lb = [-10,-15];
ub = [15,20];

Llama a particleswarm para minimizar la función.

rng default  % For reproducibility
nvars = 2;
x = 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

   -0.7071   -0.0000

Utilice una población más grande y una función híbrida para intentar obtener una mejor solución.

Especifique la función objetivo y los límites.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];

Especifique las opciones.

options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

Llama a particleswarm para minimizar la función.

rng default  % For reproducibility
nvars = 2;
x = 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

   -0.7071   -0.0000

Devuelve los argumentos de salida opcionales para examinar el proceso de solución con más detalle.

Definir el problema.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);

Llame a particleswarm con todas las salidas para minimizar la función y obtener información sobre el proceso de solución.

rng default  % For reproducibility
nvars = 2;
[x,fval,exitflag,output,points] = 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

   -0.7071   -0.0000

fval = 
-0.4289
exitflag = 
1
output = struct with fields:
      rngstate: [1x1 struct]
    iterations: 43
     funccount: 2203
       message: 'Optimization ended: relative change in the objective value ...'
    hybridflag: 1

points = struct with fields:
       X: [50x2 double]
    Fval: [50x1 double]

Argumentos de entrada

contraer todo

Función objetivo, especificada como un identificador de función o un nombre de función. Escriba la función objetivo para aceptar un vector de fila de longitud nvars y devolver un valor escalar.

Cuando la opción 'UseVectorized' es true, escriba fun para aceptar una matriz pop por nvars, donde pop es el tamaño de la población actual. En este caso, fun devuelve un vector de la misma longitud que pop que contiene los valores de la función de aptitud. Asegúrese de que fun no asuma ningún tamaño particular para pop, ya que particleswarm puede pasar un solo miembro de una población incluso en un cálculo vectorizado.

Ejemplo: fun = @(x)(x-[4,2]).^2

Tipos de datos: char | function_handle | string

Número de variables, especificado como un entero positivo. El solucionador pasa vectores de fila de longitud nvars a fun.

Ejemplo: 4

Tipos de datos: double

Límites inferiores, especificados como un vector real o un arreglo de dobles. lb representa los límites inferiores elemento por elemento en lb x ub.

Internamente, particleswarm convierte un arreglo lb en el vector lb(:).

Ejemplo: lb = [0;-Inf;4] significa x(1) ≥ 0, x(3) ≥ 4.

Tipos de datos: double

Límites superiores, especificados como un vector real o un arreglo de dobles. ub representa los límites superiores elemento por elemento en lb x ub.

Internamente, particleswarm convierte un arreglo ub en el vector ub(:).

Ejemplo: ub = [Inf;4;10] significa x(2) ≤ 4, x(3) ≤ 10.

Tipos de datos: double

Opciones para particleswarm, especificadas como la salida de la función optimoptions.

Algunas opciones no aparecen en la visualización optimoptions. Estas opciones aparecen en cursiva. Para obtener más detalles, consulte Consultar las opciones de optimización.

CreationFcn

Función que crea el enjambre inicial. Especifique como 'pswcreationuniform' o un identificador de función. La opción predeterminada es 'pswcreationuniform'. Consulte Swarm Creation.

Display

Nivel de visualización devuelto a la línea de comandos.

  • 'off' o 'none' no muestran salida alguna.

  • 'final' solo muestra la salida final (valor predeterminado).

  • 'iter' proporciona la visualización iterativa.

DisplayIntervalIntervalo para visualización iterativa. La visualización iterativa imprime una línea por cada DisplayInterval iteraciones. La opción predeterminada es 1.
FunctionToleranceEscalar no negativo con valor predeterminado 1e-6. Las iteraciones finalizan cuando el cambio relativo en el mejor valor de la función objetivo durante las últimas MaxStallIterations iteraciones es menor que options.FunctionTolerance.
FunValCheck

Comprueba si los valores de la función objetivo y de las restricciones son válidos. 'on' muestra un error cuando la función objetivo o las restricciones devuelven un valor complejo, Inf o NaN. La opción predeterminada, 'off', no muestra ningún error.

HybridFcn

Función que continúa la optimización después de que particleswarm finaliza. Especifique como un nombre o un identificador de función. Valores posibles:

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

También puede ser un arreglo de celdas que especifica la función híbrida y sus opciones, como {@fmincon,fminconopts}. La opción predeterminada es []. Consulte Hybrid Function.

Consulte Cuándo utilizar una función híbrida.

InertiaRangeVector real de dos elementos con los mismos valores de signo en orden creciente. Proporciona el límite inferior y superior de la inercia adaptativa. Para obtener una inercia constante (no adaptativa), establezca ambos elementos de InertiaRange en el mismo valor. La opción predeterminada es [0.1,1.1]. Consulte Algoritmo de optimización de enjambre de partículas.
InitialPoints

Población inicial o población parcial de partículas, especificada como una matriz o una estructura.

  • Una matriz tiene tamaño M-por-nvars . Cada fila representa una partícula. Si M < SwarmSize, entonces particleswarm crea más partículas de modo que el número total es SwarmSize. Si M > SwarmSize, entonces particleswarm utiliza las primeras SwarmSize filas.

  • Una estructura debe tener el campo X, que representa la matriz de puntos iniciales.

  • Si la estructura tiene más de un campo, la estructura debe incluir el campo Fval, que contiene un vector de valores de función objetivo para los puntos InitialPoints.X.

InitialSwarmSpan

Rango inicial de posiciones de partículas que crea @pswcreationuniform. Puede ser un escalar positivo o un vector con nvars elementos, donde nvars es el número de variables. El rango de cualquier componente de partícula es -InitialSwarmSpan/2,InitialSwarmSpan/2, desplazado y escalado si es necesario para que coincida con cualquier límite. La opción predeterminada es 2000.

InitialSwarmSpan también afecta el rango de velocidades iniciales de las partículas. Consulte Inicialización.

MaxIterationsNúmero máximo de iteraciones que toma particleswarm. El valor predeterminado es 200*nvars, donde nvars es el número de variables.
MaxStallIterationsEntero positivo con valor predeterminado 20. Las iteraciones finalizan cuando el cambio relativo en el mejor valor de la función objetivo durante las últimas MaxStallIterations iteraciones es menor que options.FunctionTolerance.
MaxStallTimeNúmero máximo de segundos sin una mejora en el mejor valor conocido de la función objetivo. Escalar positivo con valor predeterminado Inf.
MaxTimeTiempo máximo en segundos que particleswarm se ejecuta. La opción predeterminada es Inf.
MinNeighborsFractionTamaño mínimo de vecindario adaptativo, un escalar de 0 a 1. La opción predeterminada es 0.25. Consulte Algoritmo de optimización de enjambre de partículas.
ObjectiveLimitValor objetivo mínimo, criterio de detención. Escalar, con valor predeterminado -Inf.
OutputFcnIdentificador de función o arreglo de celdas de identificadores de función. Las funciones de salida pueden leer datos iterativos y detener el solucionador. La opción predeterminada es []. Consulte Output Function and Plot Function.
PlotFcnNombre de función, identificador de función o arreglo de celdas de identificadores de función. Para funciones de gráfica personalizadas, pase identificadores de función. Las funciones de representación pueden leer datos iterativos, representar cada iteración y detener el solucionador. La opción predeterminada es []. Función de trazado incorporada disponible: 'pswplotbestf'. Consulte Output Function and Plot Function.
SelfAdjustmentWeightPonderación de la mejor posición de cada partícula al ajustar la velocidad. Escalar finito con valor predeterminado 1.49. Consulte Algoritmo de optimización de enjambre de partículas.
SocialAdjustmentWeightPonderación de la mejor posición del barrio al ajustar la velocidad. Escalar finito con valor predeterminado 1.49. Consulte Algoritmo de optimización de enjambre de partículas.
SwarmSizeNúmero de partículas en el enjambre, un número entero mayor que 1. El valor predeterminado es min(100,10*nvars), donde nvars es el número de variables.
UseParallelCalcular la función objetivo en paralelo cuando true . La opción predeterminada es false. Consulte Parallel or Vectorized Function Evaluation.
UseVectorizedCalcular la función objetivo de forma vectorizada cuando true . La opción predeterminada es false. Consulte Parallel or Vectorized Function Evaluation.

Problema de optimización, especificado como una estructura con los siguientes campos.

solver'particleswarm'
objectiveIdentificador de la función objetivo, o nombre de la función objetivo.
nvarsNúmero de variables en el problema.
lbVector o arreglo de límites inferiores.
ubVector o arreglo de límites superiores.
optionsOpciones creadas por optimoptions .
rngstateEstado opcional del generador de números aleatorios al inicio del proceso de solución.

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un vector real que minimiza la función objetivo sujeta a cualquier restricción límite.

Valor objetivo, devuelto como el escalar real fun(x).

Condición de detención de algoritmo, devuelta como un entero que identifica la razón por la que el algoritmo se detuvo. A continuación, se enumeran los valores de exitflag y las razones correspondientes por las que particleswarm se detuvo.

1

El cambio relativo en el valor objetivo a lo largo de las últimas options.MaxStallIterations iteraciones es inferior a options.FunctionTolerance.

0

El número de iteraciones ha sobrepasado options.MaxIterations.

-1

Iteraciones detenidas por una función de salida o una función de gráfica.

-2

Los límites son inconsistentes: para algunos i, lb(i) > ub(i).

-3

El mejor valor de la función objetivo está por debajo de options.ObjectiveLimit.

-4

El mejor valor de la función objetivo no ha cambiado en un intervalo de options.MaxStallTime.

-5

El tiempo de ejecución ha sobrepasado options.MaxTime segundos.

Resumen de un proceso de resolución, devuelto como una estructura que contiene información sobre el proceso de optimización.

iterations

Número de iteraciones del solucionador

funccount

Número de evaluaciones de la función objetivo.

message

Razón por la cual el algoritmo se detuvo.

hybridflag

Indicador de salida de la función híbrida. Se relaciona con HybridFcn options .

rngstate

Estado del generador de números aleatorios predeterminado justo antes de que comenzara el algoritmo.

Posiciones finales del enjambre y valores de la función objetivo, devueltos como una estructura con estos campos:

  • X — Posiciones del enjambre final, devueltas como una matriz. Cada fila de la matriz representa un punto.

  • Fval — Valores de la función objetivo del enjambre final. Para cada i, un índice de un miembro del enjambre final, points.Fval(i) = fun(points.X(i)).

Para continuar con la optimización, puede pasar points como la opción InitialPoints. Sin embargo, este enfoque no es lo mismo que ejecutar una optimización durante más tiempo desde el principio, porque muchos aspectos del algoritmo no son idénticos cuando la optimización se reinicia desde una población final. Consulte Algoritmo de optimización de enjambre de partículas.

Tipos de datos: struct

Limitaciones

  • La tarea de Live Editor Optimizar basada en problemas actualmente no admite la especificación de múltiples puntos iniciales o valores de función objetivo iniciales. Para especificar puntos iniciales, utilice la tarea basada en solucionador o utilice la línea de comando.

Algoritmos

Para obtener una descripción del algoritmo de optimización del enjambre de partículas, consulte Algoritmo de optimización de enjambre de partículas.

Funcionalidad alternativa

App

La tarea Optimize de Live Editor proporciona una interfaz visual para particleswarm.

Capacidades ampliadas

Historial de versiones

Introducido en R2014b

expandir todo