Salome HOME
Documentation update with features and review corrections
[modules/adao.git] / doc / fr / ref_algorithm_ParticleSwarmOptimization.rst
1 ..
2    Copyright (C) 2008-2024 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/Header2Algo01.rst
33
34 Cet algorithme réalise une estimation de l'état d'un système par minimisation
35 sans gradient d'une fonctionnelle d'écart :math:`J`, en utilisant une méthode
36 évolutionnaire d'essaim particulaire. C'est une méthode qui n'utilise pas les
37 dérivées de la fonctionnelle d'écart. Elle entre dans la même catégorie que les
38 :ref:`section_ref_algorithm_DerivativeFreeOptimization`,
39 :ref:`section_ref_algorithm_DifferentialEvolution` ou
40 :ref:`section_ref_algorithm_TabuSearch`.
41
42 C'est une méthode d'optimisation mono-objectif, permettant la recherche du
43 minimum global d'une fonctionnelle d'erreur :math:`J` quelconque de type
44 :math:`L^1`, :math:`L^2` ou :math:`L^{\infty}`, avec ou sans pondérations,
45 comme décrit dans la section pour :ref:`section_theory_optimization`. La
46 fonctionnelle d'erreur par défaut est celle de moindres carrés pondérés
47 augmentés, classiquement utilisée en assimilation de données.
48
49 Elle est basée sur l'évolution d'une population (appelée "essaim") d'états
50 (chaque individu étant appelé une "particule" ou un "insecte"). Il existe
51 diverses variantes de cet algorithme. On propose ici les formulations stables
52 et robustes suivantes :
53
54 .. index::
55     pair: Variant ; CanonicalPSO
56     pair: Variant ; OGCR
57     pair: Variant ; SPSO-2011
58     pair: Variant ; AIS PSO
59     pair: Variant ; SIS PSO
60     pair: Variant ; PSIS PSO
61     pair: Variant ; APSO
62     pair: Variant ; SPSO-2011-SIS
63     pair: Variant ; SPSO-2011-PSIS
64
65 - "CanonicalPSO" (Canonical Particule Swarm Optimisation, voir
66   [ZambranoBigiarini13]_), algorithme classique dit "canonique" d'essaim
67   particulaire, robuste et définissant une référence des algorithmes d'essaims
68   particulaires,
69 - "OGCR" (Simple Particule Swarm Optimisation), algorithme simplifié d'essaim
70   particulaire sans bornes sur les insectes ou les vitesses, déconseillé car
71   peu robuste, mais parfois beaucoup plus rapide,
72 - "SPSO-2011" ou "SPSO-2011-AIS" (Standard Particle Swarm Optimisation 2011,
73   voir [ZambranoBigiarini13]_), algorithme de référence 2011 d'essaim
74   particulaire, robuste, performant et défini comme une référence des
75   algorithmes d'essaims particulaires. Cet algorithme est parfois appelé
76   ":math:`\omega`-PSO" ou "Inertia PSO" car il intègre une contribution dite
77   d'inertie, ou encore appelé "AIS" (pour "Asynchronous Iteration Strategy") ou
78   "APSO" (pour "Advanced Particle Swarm Optimisation") car il intègre la mise à
79   jour évolutive des meilleurs éléments, conduisant à une convergence
80   intrinsèquement améliorée de l'algorithme,
81 - "SPSO-2011-SIS" (Standard Particle Swarm Optimisation 2011 with Synchronous
82   Iteration Strategy), très similaire à l'algorithme de référence 2011 et avec
83   une mise à jour synchrone, appelée "SIS", des particules,
84 - "SPSO-2011-PSIS" (Standard Particle Swarm Optimisation 2011 with Parallel
85   Synchronous Iteration Strategy), similaire à l'algorithme "SPSO-2011-SIS"
86   avec mise à jour synchrone et parallélisation, appelée "PSIS", des
87   particules.
88
89 Voici quelques suggestions pratiques pour une utilisation efficace de ces
90 algorithmes :
91
92 - La variante recommandée de cet algorithme est le "SPSO-2011" même si
93   l'algorithme "CanonicalPSO" reste par défaut le plus robuste. Dans le cas où
94   l'évaluation de l'état peut être réalisé en parallèle, on peut utiliser
95   l'algorithme "SPSO-2011-PSIS" même si sa convergence est parfois un peu moins
96   performante.
97 - Le nombre de particules ou d'insectes usuellement recommandé varie entre 40
98   et 100 selon l'algorithme, à peu près indépendamment de la dimension de
99   l'espace des états. En général, les meilleurs performances sont obtenues pour
100   des populations de 70 à 500 particules. Même si la valeur par défaut de ce
101   paramètre de base provient d'une expérience étendue sur ces algorithmes, il
102   est recommandé de l'adapter à la difficulté des problèmes traités.
103 - Le nombre recommandé de générations, lors de l'évolution de la population,
104   est souvent de l'ordre de 50, mais il peut facilement varier entre 25 et 500.
105 - Le nombre maximal d'évaluation de la fonction de simulation doit usuellement
106   être limité entre quelques milliers et quelques dizaines de milliers de fois
107   la dimension de l'espace des états.
108 - La fonctionnelle d'erreur décroît usuellement par pallier (donc avec une
109   progression nulle de la valeur de fonctionnelle à chaque génération lorsque
110   l'on reste dans le palier), rendant *non recommandé* un arrêt sur critère de
111   décroissance de la fonction-coût. Il est normalement plus judicieux d'adapter
112   le nombre d'itérations ou de générations pour accélérer la convergence des
113   algorithmes.
114 - Si le problème est contraint, il faut définir les bornes des variables (par
115   la variable "*Bounds*"). Si le problème est totalement non contraint, il est
116   indispensable de définir des bornes d'incrément (par la variable
117   "*BoxBounds*") pour circonscrire la recherche optimale de manière utile. De
118   manière similaire, si le problème est partiellement contraint, il est
119   recommandé (mais pas indispensable) de définir des bornes d'incrément. Dans
120   le cas où ces bornes d'incréments ne sont pas définies, ce sont les bornes
121   des variables qui seront utilisées comme bornes d'incréments.
122
123 Ces conseils sont à utiliser comme des indications expérimentales, et pas comme
124 des prescriptions, car ils sont à apprécier ou à adapter selon la physique de
125 chaque problème que l'on traite.
126
127 Le décompte du nombre d'évaluations de la fonction à simuler lors de cet
128 algorithme est déterministe, à savoir le "*nombre d'itérations ou de
129 générations*" multiplié par le "*nombre d'individus de la population*". Avec
130 les valeurs par défaut, il faut entre `40x50=2000` et `100*50=5000` évaluations
131 par défaut. C'est pour cette raison que cet algorithme est usuellement
132 intéressant lorsque la dimension de l'espace des états est grande, ou que les
133 non-linéarités de la simulation rendent compliqué, ou invalide, l'évaluation du
134 gradient de la fonctionnelle par approximation numérique. Mais il est aussi
135 nécessaire que le calcul de la fonction à simuler ne soit pas trop coûteux
136 pour éviter une durée d'optimisation rédhibitoire.
137
138 .. ------------------------------------ ..
139 .. include:: snippets/Header2Algo12.rst
140
141 .. include:: snippets/FeaturePropNonLocalOptimization.rst
142
143 .. include:: snippets/FeaturePropDerivativeFree.rst
144
145 .. include:: snippets/FeaturePropParallelAlgorithm.rst
146
147 .. ------------------------------------ ..
148 .. include:: snippets/Header2Algo02.rst
149
150 .. include:: snippets/Background.rst
151
152 .. include:: snippets/BackgroundError.rst
153
154 .. include:: snippets/Observation.rst
155
156 .. include:: snippets/ObservationError.rst
157
158 .. include:: snippets/ObservationOperator.rst
159
160 .. ------------------------------------ ..
161 .. include:: snippets/Header2Algo03AdOp.rst
162
163 .. include:: snippets/BoundsWithNone.rst
164
165 .. include:: snippets/BoxBounds.rst
166
167 .. include:: snippets/CognitiveAcceleration.rst
168
169 .. include:: snippets/InertiaWeight.rst
170
171 .. include:: snippets/InitializationPoint.rst
172
173 .. include:: snippets/MaximumNumberOfFunctionEvaluations.rst
174
175 .. include:: snippets/MaximumNumberOfIterations_50.rst
176
177 .. include:: snippets/NumberOfInsects.rst
178
179 .. include:: snippets/QualityCriterion.rst
180
181 .. include:: snippets/SetSeed.rst
182
183 .. include:: snippets/SocialAcceleration.rst
184
185 StoreSupplementaryCalculations
186   .. index:: single: StoreSupplementaryCalculations
187
188   *Liste de noms*. Cette liste indique les noms des variables supplémentaires,
189   qui peuvent être disponibles au cours du déroulement ou à la fin de
190   l'algorithme, si elles sont initialement demandées par l'utilisateur. Leur
191   disponibilité implique, potentiellement, des calculs ou du stockage coûteux.
192   La valeur par défaut est donc une liste vide, aucune de ces variables n'étant
193   calculée et stockée par défaut (sauf les variables inconditionnelles). Les
194   noms possibles pour les variables supplémentaires sont dans la liste suivante
195   (la description détaillée de chaque variable nommée est donnée dans la suite
196   de cette documentation par algorithme spécifique, dans la sous-partie
197   "*Informations et variables disponibles à la fin de l'algorithme*") : [
198   "Analysis",
199   "BMA",
200   "CostFunctionJ",
201   "CostFunctionJb",
202   "CostFunctionJo",
203   "CurrentIterationNumber",
204   "CurrentState",
205   "Innovation",
206   "InternalCostFunctionJ",
207   "InternalCostFunctionJb",
208   "InternalCostFunctionJo",
209   "InternalStates",
210   "OMA",
211   "OMB",
212   "SimulatedObservationAtBackground",
213   "SimulatedObservationAtCurrentState",
214   "SimulatedObservationAtOptimum",
215   ].
216
217   Exemple :
218   ``{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}``
219
220 .. include:: snippets/SwarmTopology.rst
221
222 .. include:: snippets/Variant_PSO.rst
223
224 .. include:: snippets/VelocityClampingFactor.rst
225
226 .. ------------------------------------ ..
227 .. include:: snippets/Header2Algo04.rst
228
229 .. include:: snippets/Analysis.rst
230
231 .. include:: snippets/CostFunctionJ.rst
232
233 .. include:: snippets/CostFunctionJb.rst
234
235 .. include:: snippets/CostFunctionJo.rst
236
237 .. ------------------------------------ ..
238 .. include:: snippets/Header2Algo05.rst
239
240 .. include:: snippets/Analysis.rst
241
242 .. include:: snippets/BMA.rst
243
244 .. include:: snippets/CostFunctionJ.rst
245
246 .. include:: snippets/CostFunctionJb.rst
247
248 .. include:: snippets/CostFunctionJo.rst
249
250 .. include:: snippets/CurrentIterationNumber.rst
251
252 .. include:: snippets/CurrentState.rst
253
254 .. include:: snippets/Innovation.rst
255
256 .. include:: snippets/InternalCostFunctionJ.rst
257
258 .. include:: snippets/InternalCostFunctionJb.rst
259
260 .. include:: snippets/InternalCostFunctionJo.rst
261
262 .. include:: snippets/InternalStates.rst
263
264 .. include:: snippets/OMA.rst
265
266 .. include:: snippets/OMB.rst
267
268 .. include:: snippets/SimulatedObservationAtBackground.rst
269
270 .. include:: snippets/SimulatedObservationAtCurrentState.rst
271
272 .. include:: snippets/SimulatedObservationAtOptimum.rst
273
274 .. ------------------------------------ ..
275 .. _section_ref_algorithm_ParticleSwarmOptimization_examples:
276
277 .. include:: snippets/Header2Algo09.rst
278
279 .. include:: scripts/simple_ParticleSwarmOptimization1.rst
280
281 .. literalinclude:: scripts/simple_ParticleSwarmOptimization1.py
282
283 .. include:: snippets/Header2Algo10.rst
284
285 .. literalinclude:: scripts/simple_ParticleSwarmOptimization1.res
286     :language: none
287
288 .. include:: snippets/Header2Algo11.rst
289
290 .. _simple_ParticleSwarmOptimization1:
291 .. image:: scripts/simple_ParticleSwarmOptimization1.png
292   :align: center
293   :width: 90%
294
295 .. ------------------------------------ ..
296 .. include:: snippets/Header2Algo06.rst
297
298 - :ref:`section_ref_algorithm_DerivativeFreeOptimization`
299 - :ref:`section_ref_algorithm_DifferentialEvolution`
300 - :ref:`section_ref_algorithm_TabuSearch`
301
302 .. ------------------------------------ ..
303 .. include:: snippets/Header2Algo07.rst
304
305 - [WikipediaPSO]_
306 - [ZambranoBigiarini13]_