Salome HOME
Documentation review and update
[modules/adao.git] / doc / fr / ref_algorithm_ParticleSwarmOptimization.rst
1 ..
2    Copyright (C) 2008-2023 EDF R&D
3
4    This file is part of SALOME ADAO module.
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19
20    See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21
22    Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
23
24 .. index:: single: ParticleSwarmOptimization
25 .. index:: single: Essaim particulaire (Optimisation par)
26 .. _section_ref_algorithm_ParticleSwarmOptimization:
27
28 Algorithme de calcul "*ParticleSwarmOptimization*"
29 --------------------------------------------------
30
31 .. ------------------------------------ ..
32 .. include:: snippets/Header2Algo00.rst
33
34 .. ------------------------------------ ..
35 .. include:: snippets/Header2Algo01.rst
36
37 Cet algorithme réalise une estimation de l'état d'un système par minimisation
38 d'une fonctionnelle d'écart :math:`J` en utilisant une méthode évolutionnaire
39 d'essaim particulaire. C'est une méthode qui n'utilise pas les dérivées de la
40 fonctionnelle d'écart. Elle est basée sur l'évolution d'une population (appelée
41 "essaim") d'états (chaque individu étant appelé une "particule" ou un insecte).
42 Elle entre dans la même catégorie que les
43 :ref:`section_ref_algorithm_DerivativeFreeOptimization`,
44 :ref:`section_ref_algorithm_DifferentialEvolution` ou
45 :ref:`section_ref_algorithm_TabuSearch`.
46
47 C'est une méthode d'optimisation mono-objectif, permettant la recherche du
48 minimum global d'une fonctionnelle d'erreur :math:`J` quelconque de type
49 :math:`L^1`, :math:`L^2` ou :math:`L^{\infty}`, avec ou sans pondérations,
50 comme décrit dans la section pour :ref:`section_theory_optimization`. La
51 fonctionnelle d'erreur par défaut est celle de moindres carrés pondérés
52 augmentés, classiquement utilisée en assimilation de données.
53
54 Il existe diverses variantes de cet algorithme. On propose ici les formulations
55 stables et robustes suivantes :
56
57 .. index::
58     pair: Variant ; CanonicalPSO
59     pair: Variant ; OGCR
60     pair: Variant ; SPSO-2011
61
62 - "CanonicalPSO" (Canonical Particule Swarm Optimisation, voir [ZambranoBigiarini13]_), algorithme classique dit "canonique" d'essaim particulaire, robuste et définissant une référence des algorithmes d'essaims particulaires,
63 - "OGCR" (Simple Particule Swarm Optimisation), algorithme simplifié d'essaim particulaire sans bornes sur les insectes ou les vitesses, déconseillé car peu robuste, mais parfois beaucoup plus rapide,
64 - "SPSO-2011" (Standard Standard Particle Swarm Optimisation 2011, voir [ZambranoBigiarini13]_), algorithme de référence 2011 d'essaim particulaire, robuste, performant et défini comme une référence des algorithmes d'essaims particulaires.
65
66 Voici quelques suggestions pratiques pour une utilisation efficace de ces
67 algorithmes :
68
69 - La variante recommandée de cet algorithme est le "SPSO-2011" même si
70   l'algorithme "CanonicalPSO" reste par défaut le plus robuste des deux.
71 - Le nombre de particules ou d'insectes usuellement recommandé varie entre 40
72   et 100 selon l'algorithme, à peu près indépendamment de la dimension de
73   l'espace des états.
74 - Le nombre recommandé de générations, lors de l'évolution de la population,
75   est souvent de l'ordre de 50, mais il peut facilement varier entre 25 et 500.
76 - Le nombre maximal d'évaluation de la fonction de simulation doit usuellement
77   être limité entre quelques milliers et quelques dizaines de milliers de fois
78   la dimension de l'espace des états.
79 - La fonctionnelle d'erreur décroît usuellement par pallier (donc avec une
80   progression nulle de la valeur de fonctionnelle à chaque génération lorsque
81   l'on reste dans le palier), rendant non recommandé un arrêt sur critère de
82   décroissance de la fonction-coût. Il est normalement plus judicieux d'adapter
83   le nombre d'itérations ou de générations pour accélérer la convergence des
84   algorithmes.
85 - Si le problème est contraint, il faut définir les bornes des variables (par
86   la variable "*Bounds*"). Si le problème est totalement non contraint, il est
87   indispensable de définir des bornes d'incrément (par la variable
88   "*BoxBounds*") pour circonscrire la recherche optimale de manière utile. De
89   manière similaire, si le problème est partiellement contraint, il est
90   recommandé (mais pas indispensable) de définir des bornes d'incrément. Dans
91   le cas où ces bornes d'incréments ne sont pas définies, ce sont les bornes
92   des variables qui seront utilisées comme bornes d'incréments.
93
94 Ces conseils sont à utiliser comme des indications expérimentales, et pas comme
95 des prescriptions, car ils sont à apprécier ou à adapter selon la physique de
96 chaque problème que l'on traite.
97
98 Le décompte du nombre d'évaluations de la fonction à simuler lors de cet
99 algorithme est déterministe, à savoir le "*nombre d'itérations ou de
100 générations*" multiplié par le "*nombre d'individus de la population*". Avec
101 les valeurs par défaut, il faut entre `40x50=2000` et `100*50=5000` évaluations
102 par défaut. C'est pour cette raison que cet algorithme est usuellement
103 intéressant lorsque la dimension de l'espace des états est grande, ou que les
104 non-linéarités de la simulation rendent compliqué, ou invalide, l'évaluation du
105 gradient de la fonctionnelle par approximation numérique. Mais il est aussi
106 nécessaire que le calcul de la fonction à simuler ne soit pas trop coûteuse
107 pour éviter une temps d'optimisation rédhibitoire.
108
109 .. ------------------------------------ ..
110 .. include:: snippets/Header2Algo02.rst
111
112 .. include:: snippets/Background.rst
113
114 .. include:: snippets/BackgroundError.rst
115
116 .. include:: snippets/Observation.rst
117
118 .. include:: snippets/ObservationError.rst
119
120 .. include:: snippets/ObservationOperator.rst
121
122 .. ------------------------------------ ..
123 .. include:: snippets/Header2Algo03AdOp.rst
124
125 .. include:: snippets/BoundsWithNone.rst
126
127 .. include:: snippets/BoxBounds.rst
128
129 .. include:: snippets/CognitiveAcceleration.rst
130
131 .. include:: snippets/InertiaWeight.rst
132
133 .. include:: snippets/InitializationPoint.rst
134
135 .. include:: snippets/MaximumNumberOfFunctionEvaluations.rst
136
137 .. include:: snippets/MaximumNumberOfIterations_50.rst
138
139 .. include:: snippets/NumberOfInsects.rst
140
141 .. include:: snippets/QualityCriterion.rst
142
143 .. include:: snippets/SetSeed.rst
144
145 .. include:: snippets/SocialAcceleration.rst
146
147 StoreSupplementaryCalculations
148   .. index:: single: StoreSupplementaryCalculations
149
150   *Liste de noms*. Cette liste indique les noms des variables supplémentaires,
151   qui peuvent être disponibles au cours du déroulement ou à la fin de
152   l'algorithme, si elles sont initialement demandées par l'utilisateur. Leur
153   disponibilité implique, potentiellement, des calculs ou du stockage coûteux.
154   La valeur par défaut est donc une liste vide, aucune de ces variables n'étant
155   calculée et stockée par défaut (sauf les variables inconditionnelles). Les
156   noms possibles pour les variables supplémentaires sont dans la liste suivante
157   (la description détaillée de chaque variable nommée est donnée dans la suite
158   de cette documentation par algorithme spécifique, dans la sous-partie
159   "*Informations et variables disponibles à la fin de l'algorithme*") : [
160   "Analysis",
161   "BMA",
162   "CostFunctionJ",
163   "CostFunctionJb",
164   "CostFunctionJo",
165   "CurrentIterationNumber",
166   "CurrentState",
167   "Innovation",
168   "OMA",
169   "OMB",
170   "SimulatedObservationAtBackground",
171   "SimulatedObservationAtCurrentState",
172   "SimulatedObservationAtOptimum",
173   ].
174
175   Exemple :
176   ``{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}``
177
178 .. include:: snippets/SwarmTopology.rst
179
180 .. include:: snippets/Variant_PSO.rst
181
182 .. include:: snippets/VelocityClampingFactor.rst
183
184 .. ------------------------------------ ..
185 .. include:: snippets/Header2Algo04.rst
186
187 .. include:: snippets/Analysis.rst
188
189 .. include:: snippets/CostFunctionJ.rst
190
191 .. include:: snippets/CostFunctionJb.rst
192
193 .. include:: snippets/CostFunctionJo.rst
194
195 .. ------------------------------------ ..
196 .. include:: snippets/Header2Algo05.rst
197
198 .. include:: snippets/Analysis.rst
199
200 .. include:: snippets/BMA.rst
201
202 .. include:: snippets/CostFunctionJ.rst
203
204 .. include:: snippets/CostFunctionJb.rst
205
206 .. include:: snippets/CostFunctionJo.rst
207
208 .. include:: snippets/CurrentIterationNumber.rst
209
210 .. include:: snippets/CurrentState.rst
211
212 .. include:: snippets/Innovation.rst
213
214 .. include:: snippets/OMA.rst
215
216 .. include:: snippets/OMB.rst
217
218 .. include:: snippets/SimulatedObservationAtBackground.rst
219
220 .. include:: snippets/SimulatedObservationAtCurrentState.rst
221
222 .. include:: snippets/SimulatedObservationAtOptimum.rst
223
224 .. ------------------------------------ ..
225 .. _section_ref_algorithm_ParticleSwarmOptimization_examples:
226
227 .. include:: snippets/Header2Algo06.rst
228
229 - :ref:`section_ref_algorithm_DerivativeFreeOptimization`
230 - :ref:`section_ref_algorithm_DifferentialEvolution`
231 - :ref:`section_ref_algorithm_TabuSearch`
232
233 .. ------------------------------------ ..
234 .. include:: snippets/Header2Algo07.rst
235
236 - [WikipediaPSO]_
237 - [ZambranoBigiarini13]_