Contenu principal

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

particleswarm

Optimisation par essaim particulaire

Description

x = particleswarm(fun,nvars) tente de trouver un vecteur x qui atteint un minimum local de fun. nvars est la dimension (nombre de variables de conception) de fun.

Remarque

Passing Extra Parameters explique comment passer des paramètres supplémentaires à la fonction objectif, si nécessaire.

exemple

x = particleswarm(fun,nvars,lb,ub) définit un ensemble de limites inférieures et supérieures sur les variables de conception, x, de sorte qu'une solution soit trouvée dans la plage lb x ub.

exemple

x = particleswarm(fun,nvars,lb,ub,options) minimise avec les paramètres d'optimisation par défaut remplacés par des valeurs dans options. Définissez lb = [] et ub = [] si aucune limite n'existe.

exemple

x = particleswarm(problem) trouve le minimum pour problem, une structure décrite dans problem.

[x,fval,exitflag,output,points] = particleswarm(___) renvoie également les éléments suivants, en utilisant l'une des combinaisons d'arguments d'entrée dans les syntaxes précédentes :

  • fval, un scalaire qui est la valeur de la fonction objectif fun(x)

  • exitflag, une valeur qui décrit la condition de sortie

  • output, une structure qui contient des informations sur le processus d'optimisation

  • points, une structure qui contient les positions finales de l'essaim dans points.X et les valeurs de fonction objectif associées dans points.Fval

exemple

Exemples

réduire tout

Minimiser une fonction simple de deux variables.

Définissez la fonction objectif.

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

Appelez particleswarm pour minimiser la fonction.

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

Cette solution est loin du véritable minimum, comme vous le voyez dans un tracé de fonction.

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

En général, il est préférable de fixer des limites. Voir Minimiser une fonction simple avec des limites.

Minimiser une fonction simple de deux variables avec des contraintes bornées.

Définissez la fonction objectif.

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

Définissez des limites pour les variables.

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

Appelez particleswarm pour minimiser la fonction.

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

Utilisez une population plus large et une fonction hybride pour essayer d’obtenir une meilleure solution.

Spécifiez la fonction objectif et les limites.

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

Spécifiez les options.

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

Appelez particleswarm pour minimiser la fonction.

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

Renvoyez les arguments de sortie facultatifs pour examiner le processus de solution plus en détail.

Définissez le problème.

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

Appelez particleswarm avec toutes les sorties pour minimiser la fonction et obtenir des informations sur le processus de résolution.

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]

Arguments d'entrée

réduire tout

Fonction objectif, spécifiée comme un handle de fonction ou un nom de fonction. Écrivez la fonction objectif pour accepter un vecteur de ligne de longueur nvars et renvoyer une valeur scalaire.

Lorsque l'option 'UseVectorized' est true, écrivez fun pour accepter une matrice pop par nvars, où pop est la taille de la population actuelle. Dans ce cas, fun renvoie un vecteur de la même longueur que pop contenant les valeurs de la fonction fitness. Assurez-vous que fun ne prend pas de taille particulière pour pop, puisque particleswarm peut transmettre un seul membre d'une population même dans un calcul vectorisé.

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

Types de données : char | function_handle | string

Nombre de variables, spécifié sous la forme d'un entier positif. Le solveur passe des vecteurs de lignes de longueur nvars à fun.

Exemple : 4

Types de données : double

Bornes inférieures, spécifiées sous la forme d'un vecteur réel ou d'un tableau de doubles. lb représente les bornes inférieures élément par élément dans lb x ub.

En interne, particleswarm convertit un tableau lb en vecteur lb(:).

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

Types de données : double

Limites supérieures, spécifiées sous la forme d'un vecteur réel ou d'un tableau de doubles. ub représente les limites supérieures élément par élément dans lb x ub.

En interne, particleswarm convertit un tableau ub en vecteur ub(:).

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

Types de données : double

Options pour particleswarm, spécifiées comme sortie de la fonction optimoptions.

Certaines options sont absentes de l'affichage optimoptions. Ces options sont répertoriées en italique. Pour plus de détails, voir View Optimization Options.

CreationFcn

Fonction qui crée l'essaim initial. Spécifiez comme 'pswcreationuniform' ou un handle de fonction. La valeur par défaut est 'pswcreationuniform'. Voir Swarm Creation.

Display

Niveau d'affichage renvoyé à la ligne de commande.

  • 'off' ou 'none' n'affiche aucune sortie.

  • 'final' affiche uniquement la sortie finale (par défaut).

  • 'iter' donne un affichage itératif.

DisplayIntervalIntervalle pour l'affichage itératif. L'affichage itératif imprime une ligne pour chaque DisplayInterval itérations. La valeur par défaut est 1.
FunctionToleranceScalaire non négatif avec 1e-6 par défaut. Les itérations se terminent lorsque le changement relatif de la valeur de la meilleure fonction objectif au cours des MaxStallIterations dernières itérations est inférieur à options.FunctionTolerance.
FunValCheck

Vérifiez si les valeurs de la fonction objectif et des contraintes sont valides. 'on' affiche une erreur lorsque la fonction objectif ou les contraintes renvoient une valeur complexe, Inf ou NaN. La valeur par défaut, 'off', n'affiche aucune erreur.

HybridFcn

Fonction qui continue l'optimisation après la fin de particleswarm. Spécifier comme un nom ou un handle de fonction. Valeurs possibles :

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

Peut également être un cell array spécifiant la fonction hybride et ses options, telles que {@fmincon,fminconopts}. La valeur par défaut est []. Voir Hybrid Function.

Voir Quand utiliser une fonction hybride.

InertiaRangeVecteur réel à deux éléments avec des valeurs de même signe dans l'ordre croissant. Donne la limite inférieure et supérieure de l'inertie adaptative. Pour obtenir une inertie constante (non adaptative), définissez les deux éléments de InertiaRange sur la même valeur. La valeur par défaut est [0.1,1.1]. Voir Algorithme d'optimisation par essaim particulaire.
InitialPoints

Population initiale ou population partielle de particules, spécifiée comme une matrice ou une structure.

  • Une matrice a une taille de M-par-nvars. Chaque ligne représente une particule. Si M < SwarmSize, alors particleswarm crée plus de particules de sorte que le nombre total est SwarmSize. Si M > SwarmSize, alors particleswarm utilise les SwarmSize premières lignes.

  • Une structure doit avoir le champ X, qui représente la matrice des points initiaux.

  • Si la structure comporte plusieurs champs, la structure doit inclure le champ Fval, qui contient un vecteur de valeurs de fonction objectif pour les points InitialPoints.X.

InitialSwarmSpan

Plage initiale de positions de particules créées par @pswcreationuniform. Peut être un scalaire positif ou un vecteur avec nvars éléments, où nvars est le nombre de variables. La plage pour tout composant de particule est -InitialSwarmSpan/2,InitialSwarmSpan/2, décalée et mise à l'échelle si nécessaire pour correspondre à toutes les limites. La valeur par défaut est 2000.

InitialSwarmSpan affecte également la plage des vitesses initiales des particules. Voir Initialisation.

MaxIterationsNombre maximal d'itérations nécessaires à particleswarm. La valeur par défaut est 200*nvars, où nvars est le nombre de variables.
MaxStallIterationsEntier positif avec la valeur par défaut 20. Les itérations se terminent lorsque le changement relatif de la valeur de la meilleure fonction objectif au cours des MaxStallIterations dernières itérations est inférieur à options.FunctionTolerance.
MaxStallTimeNombre maximal de secondes sans amélioration de la meilleure valeur de fonction objectif connue. Scalaire positif avec Inf par défaut.
MaxTimeDurée maximale en secondes pendant laquelle particleswarm s'exécute. La valeur par défaut est Inf.
MinNeighborsFractionTaille minimale du voisinage (neighborhood) adaptatif, un scalaire de 0 à 1. La valeur par défaut est 0.25. Voir Algorithme d'optimisation par essaim particulaire.
ObjectiveLimitValeur objective minimale, critère d'arrêt. Scalaire, avec -Inf par défaut.
OutputFcnHandle de fonction ou cell array de handles de fonction. Les fonctions de sortie peuvent lire des données itératives et arrêter le solveur. La valeur par défaut est []. Voir Output Function and Plot Function.
PlotFcnNom de fonction, handle de fonction ou cell array de handles de fonction. Pour les fonctions de tracé personnalisées, transmettez les handles de fonction. Les fonctions de tracé peuvent lire des données itératives, tracer chaque itération et arrêter le solveur. La valeur par défaut est []. Fonction de tracé intégrée disponible : 'pswplotbestf'. Voir Output Function and Plot Function.
SelfAdjustmentWeightPondération de la meilleure position de chaque particule lors du réglage de la vitesse. Scalaire fini avec 1.49 par défaut. Voir Algorithme d'optimisation par essaim particulaire.
SocialAdjustmentWeightPondération de la meilleure position du voisinage (neighborhood) lors du réglage de la vitesse. Scalaire fini avec 1.49 par défaut. Voir Algorithme d'optimisation par essaim particulaire.
SwarmSizeNombre de particules dans l'essaim, un entier supérieur à 1. La valeur par défaut est min(100,10*nvars), où nvars est le nombre de variables.
UseParallelCalculer la fonction objectif en parallèle lorsque true. La valeur par défaut est false. Voir Parallel or Vectorized Function Evaluation.
UseVectorizedCalculer la fonction objectif de manière vectorisée lorsque true. La valeur par défaut est false. Voir Parallel or Vectorized Function Evaluation.

Problème d'optimisation, spécifié sous forme de structure avec les champs suivants.

solver'particleswarm'
objectiveHandle de fonction vers la fonction objectif, ou nom de la fonction objectif.
nvarsNombre de variables dans le problème.
lbVecteur ou tableau de bornes inférieures.
ubVecteur ou tableau de bornes supérieures.
optionsOptions créées par optimoptions.
rngstateÉtat facultatif du générateur de nombres aléatoires au début du processus de résolution.

Types de données : struct

Arguments de sortie

réduire tout

Solution, renvoyée sous la forme d'un vecteur réel qui minimise la fonction objectif sous réserve de toutes les contraintes bornées.

Valeur objective, renvoyée sous forme de scalaire réel fun(x).

Condition d'arrêt de l'algorithme, renvoyée sous forme d'entier identifiant la raison pour laquelle l'algorithme s'est arrêté. La liste suivante répertorie les valeurs de exitflag et les raisons correspondantes pour lesquelles particleswarm s'est arrêté.

1

Le changement relatif de la valeur objective au cours des options.MaxStallIterations dernières itérations est inférieur à options.FunctionTolerance.

0

Nombre d'itérations dépassé options.MaxIterations.

-1

Itérations arrêtées par la fonction de sortie ou la fonction de tracé.

-2

Les limites sont incohérentes : pour certains i, lb(i) > ub(i).

-3

La meilleure valeur de fonction objectif est inférieure à options.ObjectiveLimit.

-4

La valeur de la meilleure fonction objectif n'a pas changé en options.MaxStallTime secondes.

-5

Le temps d'exécution a dépassé options.MaxTime secondes.

Résumé du processus de solution, renvoyé sous forme de structure contenant des informations sur le processus d'optimisation.

iterations

Nombre d'itérations du solveur

funccount

Nombre d'évaluations de fonctions objectif.

message

Raison pour laquelle l'algorithme s'est arrêté.

hybridflag

Exit flag de la fonction hybride. Concerne les options HybridFcn.

rngstate

État du générateur de nombres aléatoires par défaut juste avant le démarrage de l'algorithme.

Positions finales de l'essaim et valeurs de fonction objectif, renvoyées sous forme de structure avec ces champs :

  • X — Positions de l’essaim final, renvoyées sous forme de matrice. Chaque ligne de la matrice représente un point.

  • Fval — Valeurs de la fonction objectif de l’essaim final. Pour chaque i, un index d'un membre de l'essaim final, points.Fval(i) = fun(points.X(i)).

Pour continuer une optimisation, vous pouvez passer points comme option InitialPoints. Cependant, cette approche n’est pas la même que l’exécution d’une optimisation sur une période plus longue depuis le début, car de nombreux aspects de l’algorithme ne sont pas identiques lorsque l’optimisation redémarre à partir d’une population finale. Voir Algorithme d'optimisation par essaim particulaire.

Types de données : struct

Limites

  • La tâche Optimize basée sur les problèmes du Live Editor ne supporte actuellement pas la spécification de plusieurs points initiaux ou valeurs de fonction objectif initiales. Pour spécifier les points initiaux, utilisez la tâche basée sur le solveur ou utilisez la ligne de commande.

Algorithmes

Pour une description de l'algorithme d'optimisation par essaim particulaire, voir Algorithme d'optimisation par essaim particulaire.

Fonctionnalités alternatives

Application

La tâche Optimize du Live Editor fournit une interface visuelle pour particleswarm.

Capacités étendues

développer tout

Historique des versions

Introduit dans R2014b

développer tout