Algorithme d'optimisation par essaim particulaire
Introduction à l'algorithme
particleswarm
est basé sur l'algorithme décrit dans Kennedy et Eberhart [1], en utilisant des modifications suggérées dans Mezura-Montes et Coello Coello [2] et dans Pedersen [3].
L'algorithme d'essaim particulaire commence par créer les particules initiales et leur attribuer des vitesses initiales.
Il évalue la fonction objectif à chaque emplacement de particule et détermine la meilleure valeur de fonction (la plus basse) et le meilleur emplacement.
Il choisit de nouvelles vitesses, en fonction de la vitesse actuelle, des meilleurs emplacements individuels des particules et des meilleurs emplacements de leurs voisines.
Il met ensuite à jour de manière itérative les emplacements des particules (le nouvel emplacement est l'ancien plus la vitesse, modifiée pour maintenir les particules dans les limites), les vitesses et les voisins.
Les itérations se poursuivent jusqu'à ce que l'algorithme atteigne un critère d'arrêt.
Voici le détail des étapes.
Initialisation
Par défaut, particleswarm
crée des particules de manière aléatoire et uniforme dans les limites. S'il y a une composante non limitée, particleswarm
crée des particules avec une distribution uniforme aléatoire de –1000 à 1000. Si vous n'avez qu'une seule limite, particleswarm
décale la création pour avoir la limite comme point de terminaison et un intervalle de création de 2000 de large. La particule i
a la position x(i)
, qui est un vecteur de ligne avec des éléments nvars
. Contrôlez la durée de l'essaim initial à l'aide de l'option InitialSwarmSpan
.
De même, particleswarm
crée des vitesses de particules initiales v
de manière aléatoire et uniforme dans la plage [-r,r]
, où r
est le vecteur des portées initiales. La plage du composant k
est min(ub(k) - lb(k),InitialSwarmSpan(k))
.
particleswarm
évalue la fonction objectif sur toutes les particules. Il enregistre la position actuelle p(i)
de chaque particule i
. Dans les itérations suivantes, p(i)
sera l'emplacement de la meilleure fonction objectif que la particule i
a trouvée. Et b
est le meilleur parmi toutes les particules : b = min(fun(p(i)))
. d
est l'emplacement tel que b = fun(d)
.
particleswarm
initialise la taille du voisinage (neighborhood) N
à minNeighborhoodSize = max(2,floor(SwarmSize*MinNeighborsFraction))
.
particleswarm
initialise l'inertie W = max(InertiaRange)
, ou si InertiaRange
est négatif, il définit W = min(InertiaRange)
.
particleswarm
initialise le compteur de décrochage c = 0
.
Pour faciliter la notation, définissez les variables y1 = SelfAdjustmentWeight
et y2 = SocialAdjustmentWeight
, où SelfAdjustmentWeight
et SocialAdjustmentWeight
sont des options.
Étapes d'itération
L'algorithme met à jour l'essaim comme suit. Pour la particule i
, qui est à la position x(i)
:
Choisissez un sous-ensemble aléatoire
S
deN
particules autres quei
.Trouvez
fbest(S)
, la meilleure fonction objectif parmi les voisins, etg(S)
, la position du voisin avec la meilleure fonction objectif.Pour les vecteurs aléatoires
u1
etu2
uniformément (0,1) distribués de longueurnvars
, mettez à jour la vitessev = W*v + y1*u1.*(p-x) + y2*u2.*(g-x)
.Cette mise à jour utilise une somme pondérée de :
La vitesse précédente
v
La différence entre la position actuelle et la meilleure position que la particule a vue
p-x
La différence entre la position actuelle et la meilleure position dans le voisinage (neighborhood) actuel
g-x
Mettez à jour la position
x = x + v
.Respectez les limites. Si un composant de
x
est en dehors d'une limite, définissez-le égal à cette limite. Pour les composants qui viennent d'être définis sur une limite, si la vitessev
de ce composant pointe en dehors de la limite, définissez ce composant de vitesse sur zéro.Évaluer la fonction objectif
f = fun(x)
.Si
f < fun(p)
, alors définissezp = x
. Cette étape garantit quep
a la meilleure position que la particule ait vue.Les étapes suivantes de l’algorithme s’appliquent aux paramètres de l’essaim entier, et non aux particules individuelles. Considérons le plus petit
f = min(f(j))
parmi les particulesj
dans l’essaim.Si
f < b
, alors définissezb = f
etd = x
. Cette étape garantit queb
a la meilleure fonction objectif dans l’essaim et qued
a le meilleur emplacement.Si, à l’étape précédente, la meilleure valeur de fonction a été abaissée, définissez
flag = true
. Sinon,flag = false
. La valeur deflag
est utilisée à l’étape suivante.Mettre à jour la valeur du voisinage (neighborhood). Si
flag = true
:Spécifiez
c = max(0,c-1)
.Définissez
N
comme étantminNeighborhoodSize
.Si
c < 2
, alors définissezW = 2*W
.Si
c > 5
, alors définissezW = W/2
.Assurez-vous que
W
est dans les limites de l'optionInertiaRange
.
Si
flag = false
:Spécifiez
c = c+1
.Spécifiez
N = min(N + minNeighborhoodSize,SwarmSize)
.
Critères d'arrêt
particleswarm
itère jusqu'à atteindre un critère d'arrêt.
Option d'arrêt | Arrêt du test | Exit Flag |
---|---|---|
MaxStallIterations et FunctionTolerance | Le changement relatif de la meilleure valeur de fonction objectif g au cours des MaxStallIterations dernières itérations est inférieur à FunctionTolerance . | 1 |
MaxIterations | Le nombre d'itérations atteint MaxIterations . | 0 |
OutputFcn ou PlotFcn | OutputFcn ou PlotFcn peuvent arrêter les itérations. | -1 |
ObjectiveLimit | La meilleure valeur de fonction objectif g est inférieure à ObjectiveLimit . | -3 |
MaxStallTime | La meilleure valeur de fonction objectif g n'a pas changé au cours des MaxStallTime dernières secondes. | -4 |
MaxTime | Le temps d'exécution de la fonction dépasse MaxTime secondes. | -5 |
Si particleswarm
s'arrête avec l'exit flag 1
, il appelle éventuellement une fonction hybride après sa sortie.
Références
[1] Kennedy, J., and R. Eberhart. "Particle Swarm Optimization." Proceedings of the IEEE International Conference on Neural Networks. Perth, Australia, 1995, pp. 1942–1945.
[2] Mezura-Montes, E., and C. A. Coello Coello. "Constraint-handling in nature-inspired numerical optimization: Past, present and future." Swarm and Evolutionary Computation. 2011, pp. 173–194.
[3] Pedersen, M. E. "Good Parameters for Particle Swarm Optimization." Luxembourg: Hvass Laboratories, 2010.