Optimisation par essaims particulaires

L'optimisation par essaims particulaires (OEP ou PSO en anglais) est une métaheuristique d'optimisation, inventée par Russel Eberhart (ingénieur en électricité) et James Kennedy (socio-psychologue) en 1995.

Algorithme modifier

Cet algorithme s'inspire à l'origine du monde du vivant. Il s'appuie notamment sur un modèle développé par Craig Reynolds à la fin des années 1980, permettant de simuler le déplacement d'un groupe d'oiseaux. Une autre source d'inspiration, revendiquée par les auteurs, James Kennedy et Russel Eberhart, est la socio-psychologie[1].

Cette méthode d'optimisation se base sur la collaboration des individus entre eux. Elle a d'ailleurs des similarités avec les algorithmes de colonies de fourmis, qui s'appuient eux aussi sur le concept d'auto-organisation. Cette idée veut qu'un groupe d'individus peu intelligents peut posséder une organisation globale complexe.

Ainsi, grâce à des règles de déplacement très simples (dans l'espace des solutions), les particules peuvent converger progressivement vers un minimum global. Cette métaheuristique semble cependant mieux fonctionner pour des espaces en variables continues.

Au départ de l'algorithme chaque particule est donc positionnée (aléatoirement ou non) dans l'espace de recherche du problème. Chaque itération fait bouger les particules en fonction de trois composantes :

 
Evolution par iteration
  1. Sa vitesse actuelle   ;
  2. Sa meilleure solution   ;
  3. La meilleure solution obtenue dans son voisinage  .

Cela donne l'équation de mouvement suivante :

  •  .
  •  .


Avec :

  sa position actuelle
  inertie
  tiré aléatoirement dans [0,φ1]
  tiré aléatoirement dans [0,φ2]

Pseudo-code modifier

Algorithme : Optimisation par Essaims Particulaires (PSO)

Entrée : Fonction objectif f(X), Nombre de particules N, Nombre maximum d'itérations MaxIter

Sortie : Meilleure solution Pg et sa valeur f(Pg)

1. Initialisation :
   1.1. Pour chaque particule i = 1 à N :
        - Initialiser la position Xi aléatoirement dans l'espace de recherche
        - Initialiser la vitesse Vi à zéro ou à une petite valeur aléatoire
        - Définir la meilleure solution personnelle Pi à Xi
   1.2. Évaluer la fonction de fitness de chaque particule en utilisant f(Xi)
   1.3. Définir la meilleure solution globale Pg à la position de la meilleure particule

2. Pour chaque itération k = 1 à MaxIter :
   2.1. Pour chaque particule i = 1 à N :
        - Générer b1 et b2, nombres aléatoires dans [0,φ1] et [0,φ2] respectivement
        - Mettre à jour la vitesse Vi selon l'équation :
          Vi(k+1) = ω*Vi(k) + b1*(Pi - Xi(k)) + b2*(Pg - Xi(k))
        - Mettre à jour la position Xi selon l'équation :
          Xi(k+1) = Xi(k) + Vi(k+1)
        - Évaluer la fonction de fitness de la nouvelle position en utilisant f(Xi(k+1))
        - Si f(Xi(k+1)) est meilleure que f(Pi) :
            - Mettre à jour Pi à Xi(k+1)
        - Si f(Xi(k+1)) est meilleure que f(Pg) :
            - Mettre à jour Pg à Xi(k+1)
   2.2. Ajuster éventuellement ω, φ1, et φ2 dynamiquement basé sur le numéro d'itération ou d'autres critères

3. Après avoir complété toutes les itérations, retourner Pg et f(Pg) comme la meilleure solution trouvée.

Notes et références modifier

Notes modifier

Références modifier

  1. J. Kennedy et R. Eberhart, « Particle swarm optimization », , IEEE International Conference on Neural Networks, 1995. Proceedings, vol. 4,‎ , p. 1942–1948 vol.4 (DOI 10.1109/icnn.1995.488968, lire en ligne, consulté le )

Annexes modifier

Bibliographie modifier

Articles connexes modifier

Liens externes modifier