particleswarm
Optimización de enjambre de partículas
Sintaxis
Descripción
intenta encontrar un vector x
= particleswarm(fun
,nvars
)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.
[
también devuelve lo siguiente, utilizando cualquiera de las combinaciones de argumentos de entrada en las sintaxis anteriores:x
,fval
,exitflag
,output
,points
] = particleswarm(___)
fval
, un escalar que es el valor de la función objetivofun(x)
exitflag
, un valor que describe la condición de salidaoutput
, una estructura que contiene información sobre el proceso de optimizaciónpoints
, una estructura que contiene las posiciones finales del enjambre enpoints.X
y los valores de la función objetivo asociada enpoints.Fval
Ejemplos
Minimizar una función simple
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 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
Minimizar el uso de opciones no predeterminadas
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
Examinar el proceso de resolución
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
fun
— Función objetivo
identificador de función | nombre de función
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
nvars
— Número de variables
entero positivo
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
lb
— Límites inferiores
[]
(predeterminado) | vector o arreglo real
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
ub
— Límites superiores
[]
(predeterminado) | vector o arreglo real
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
options
— Opciones para particleswarm
opciones creadas utilizando optimoptions
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 |
Display | Nivel de visualización devuelto a la línea de comandos.
|
DisplayInterval | Intervalo para visualización iterativa. La visualización iterativa imprime una línea por cada DisplayInterval iteraciones. La opción predeterminada es 1 . |
FunctionTolerance | Escalar 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. |
HybridFcn | Función que continúa la optimización después de que
También puede ser un arreglo de celdas que especifica la función híbrida y sus opciones, como Consulte Cuándo utilizar una función híbrida. |
InertiaRange | Vector 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.
|
InitialSwarmSpan | Rango inicial de posiciones de partículas que crea
|
MaxIterations | Número máximo de iteraciones que toma particleswarm . El valor predeterminado es 200*nvars , donde nvars es el número de variables. |
MaxStallIterations | Entero 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 . |
MaxStallTime | Número máximo de segundos sin una mejora en el mejor valor conocido de la función objetivo. Escalar positivo con valor predeterminado Inf . |
MaxTime | Tiempo máximo en segundos que particleswarm se ejecuta. La opción predeterminada es Inf . |
MinNeighborsFraction | Tamañ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. |
ObjectiveLimit | Valor objetivo mínimo, criterio de detención. Escalar, con valor predeterminado -Inf . |
OutputFcn | Identificador 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. |
PlotFcn | Nombre 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. |
SelfAdjustmentWeight | Ponderació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. |
SocialAdjustmentWeight | Ponderació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. |
SwarmSize | Nú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. |
UseParallel | Calcular la función objetivo en paralelo cuando true . La opción predeterminada es false . Consulte Parallel or Vectorized Function Evaluation. |
UseVectorized | Calcular la función objetivo de forma vectorizada cuando true . La opción predeterminada es false . Consulte Parallel or Vectorized Function Evaluation. |
problem
— Problema de optimización
estructura
Problema de optimización, especificado como una estructura con los siguientes campos.
solver | 'particleswarm' |
objective | Identificador de la función objetivo, o nombre de la función objetivo. |
nvars | Número de variables en el problema. |
lb | Vector o arreglo de límites inferiores. |
ub | Vector o arreglo de límites superiores. |
options | Opciones creadas por optimoptions . |
rngstate | Estado opcional del generador de números aleatorios al inicio del proceso de solución. |
Tipos de datos: struct
Argumentos de salida
x
— Solución
vector real
Solución, devuelta como un vector real que minimiza la función objetivo sujeta a cualquier restricción límite.
fval
— Valor objetivo
escalar real
Valor objetivo, devuelto como el escalar real fun(x)
.
exitflag
— Condición de detención de algoritmo
valor entero
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.
| El cambio relativo en el valor objetivo a lo largo de las últimas |
| El número de iteraciones ha sobrepasado |
| Iteraciones detenidas por una función de salida o una función de gráfica. |
| Los límites son inconsistentes: para algunos |
| El mejor valor de la función objetivo está por debajo de |
| El mejor valor de la función objetivo no ha cambiado en un intervalo de |
| El tiempo de ejecución ha sobrepasado |
output
— Resumen de un proceso de resolución
estructura
Resumen de un proceso de resolución, devuelto como una estructura que contiene información sobre el proceso de optimización.
| Número de iteraciones del solucionador |
| Número de evaluaciones de la función objetivo. |
| Razón por la cual el algoritmo se detuvo. |
| Indicador de salida de la función híbrida. Se relaciona con |
| Estado del generador de números aleatorios predeterminado justo antes de que comenzara el algoritmo. |
points
— Posiciones finales del enjambre y valores de la función objetivo
estructura
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 cadai
, 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
Soporte paralelo automático
Acelere código mediante la ejecución automática de cálculo paralelo mediante Parallel Computing Toolbox™.
Para ejecutar en paralelo, establezca la opción 'UseParallel'
en true
.
options = optimoptions('
solvername
','UseParallel',true)
Para obtener más información, consulte Cómo utilizar el procesamiento paralelo en Global Optimization Toolbox.
Historial de versiones
Introducido en R2014bR2023b: Especificar y obtener puntos iniciales particleswarm
, posiciones finales y valores de la función objetivo
particleswarm
ahora puede devolver la salida points
, una estructura que contiene las posiciones finales y los valores de la función objetivo asociada del enjambre. Ahora puede proporcionar las posiciones y los valores de la función objetivo para el enjambre inicial utilizando la opción InitialPoints
. Aún puedes proporcionar las posiciones iniciales del enjambre utilizando la opción InitialSwarmMatrix
o la opción InitialSwarm
. En estos casos, particleswarm
pasa la matriz de enjambre inicial como la opción InitialPoints
.
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)