2 Copyright (C) 2008-2015 EDF R&D
4 This file is part of SALOME ADAO module.
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.
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.
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
20 See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
24 .. index:: single: ParticleSwarmOptimization
25 .. _section_ref_algorithm_ParticleSwarmOptimization:
27 Algorithme de calcul "*ParticleSwarmOptimization*"
28 --------------------------------------------------
33 Cet algorithme réalise une estimation de l'état d'un système dynamique par
34 minimisation d'une fonctionnelle d'écart :math:`J` en utilisant un essaim
35 particulaire. C'est une méthode qui n'utilise pas les dérivées de la
36 fonctionnelle d'écart. Elle entre dans la même catégorie que
37 l':ref:`section_ref_algorithm_DerivativeFreeOptimization`.
39 C'est une méthode d'optimisation permettant la recherche du minimum global d'une
40 fonctionnelle d'erreur :math:`J` quelconque de type :math:`L^1`, :math:`L^2` ou
41 :math:`L^{\infty}`, avec ou sans pondérations. La fonctionnelle d'erreur par
42 défaut est celle de moindres carrés pondérés augmentés, classiquement utilisée
43 en assimilation de données.
45 Commandes requises et optionnelles
46 ++++++++++++++++++++++++++++++++++
48 .. index:: single: AlgorithmParameters
49 .. index:: single: Background
50 .. index:: single: BackgroundError
51 .. index:: single: Observation
52 .. index:: single: ObservationError
53 .. index:: single: ObservationOperator
54 .. index:: single: MaximumNumberOfSteps
55 .. index:: single: NumberOfInsects
56 .. index:: single: SwarmVelocity
57 .. index:: single: GroupRecallRate
58 .. index:: single: QualityCriterion
59 .. index:: single: BoxBounds
60 .. index:: single: SetSeed
61 .. index:: single: StoreSupplementaryCalculations
63 Les commandes requises générales, disponibles dans l'interface en édition, sont
67 *Commande obligatoire*. Elle définit le vecteur d'ébauche ou
68 d'initialisation, noté précédemment :math:`\mathbf{x}^b`. Sa valeur est
69 définie comme un objet de type "*Vector*" ou de type "*VectorSerie*".
72 *Commande obligatoire*. Elle définit la matrice de covariance des erreurs
73 d'ébauche, notée précédemment :math:`\mathbf{B}`. Sa valeur est définie
74 comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
75 type "*DiagonalSparseMatrix*".
78 *Commande obligatoire*. Elle définit le vecteur d'observation utilisé en
79 assimilation de données ou en optimisation, et noté précédemment
80 :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de type "*Vector*"
81 ou de type "*VectorSerie*".
84 *Commande obligatoire*. Elle définit la matrice de covariance des erreurs
85 d'ébauche, notée précédemment :math:`\mathbf{R}`. Sa valeur est définie
86 comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
87 type "*DiagonalSparseMatrix*".
90 *Commande obligatoire*. Elle indique l'opérateur d'observation, noté
91 précédemment :math:`H`, qui transforme les paramètres d'entrée
92 :math:`\mathbf{x}` en résultats :math:`\mathbf{y}` qui sont à comparer aux
93 observations :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de
94 type "*Function*" ou de type "*Matrix*". Dans le cas du type "*Function*",
95 différentes formes fonctionnelles peuvent être utilisées, comme décrit dans
96 la section :ref:`section_ref_operator_requirements`. Si un contrôle
97 :math:`U` est inclus dans le modèle d'observation, l'opérateur doit être
98 appliqué à une paire :math:`(X,U)`.
100 Les commandes optionnelles générales, disponibles dans l'interface en édition,
101 sont indiquées dans la :ref:`section_ref_assimilation_keywords`. De plus, les
102 paramètres de la commande "*AlgorithmParameters*" permettent d'indiquer les
103 options particulières, décrites ci-après, de l'algorithme. On se reportera à la
104 :ref:`section_ref_options_Algorithm_Parameters` pour le bon usage de cette
107 Les options de l'algorithme sont les suivantes:
110 Cette clé indique le nombre maximum d'itérations possibles en optimisation
111 itérative. Le défaut est 50, qui est une limite arbitraire. Il est ainsi
112 recommandé d'adapter ce paramètre aux besoins pour des problèmes réels.
114 Exemple : ``{"MaximumNumberOfSteps":100}``
117 Cette clé indique le nombre d'insectes ou de particules dans l'essaim. La
118 valeur par défaut est 100, qui est une valeur par défaut usuelle pour cet
121 Exemple : ``{"NumberOfInsects":100}``
124 Cette clé indique la part de la vitesse d'insecte qui est imposée par
125 l'essaim. C'est une valeur réelle positive. Le défaut est de 1.
127 Exemple : ``{"SwarmVelocity":1.}``
130 Cette clé indique le taux de rappel vers le meilleur insecte de l'essaim.
131 C'est une valeur réelle comprise entre 0 et 1. Le défaut est de 0.5.
133 Exemple : ``{"GroupRecallRate":0.5}``
136 Cette clé indique le critère de qualité, qui est minimisé pour trouver
137 l'estimation optimale de l'état. Le défaut est le critère usuel de
138 l'assimilation de données nommé "DA", qui est le critère de moindres carrés
139 pondérés augmentés. Les critères possibles sont dans la liste suivante, dans
140 laquelle les noms équivalents sont indiqués par un signe "=" :
141 ["AugmentedWeightedLeastSquares"="AWLS"="DA", "WeightedLeastSquares"="WLS",
142 "LeastSquares"="LS"="L2", "AbsoluteValue"="L1", "MaximumError"="ME"].
144 Exemple : ``{"QualityCriterion":"DA"}``
147 Cette clé permet de définir des bornes supérieure et inférieure pour chaque
148 incrément de variable d'état optimisée (et non pas chaque variable d'état
149 elle-même). Les bornes doivent être données par une liste de liste de paires
150 de bornes inférieure/supérieure pour chaque incrément de variable, avec une
151 valeur extrême chaque fois qu'il n'y a pas de borne (``None`` n'est pas une
152 valeur autorisée lorsqu'il n'y a pas de borne). Cette clé est requise et il
153 n'y a pas de valeurs par défaut.
155 Exemple : ``{"BoxBounds":[[-0.5,0.5], [0.01,2.], [0.,1.e99], [-1.e99,1.e99]]}``
158 Cette clé permet de donner un nombre entier pour fixer la graine du
159 générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
160 par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
161 utilise ainsi l'initialisation par défaut de l'ordinateur.
163 Exemple : ``{"SetSeed":1000}``
165 StoreSupplementaryCalculations
166 Cette liste indique les noms des variables supplémentaires qui peuvent être
167 disponibles à la fin de l'algorithme. Cela implique potentiellement des
168 calculs ou du stockage coûteux. La valeur par défaut est une liste vide,
169 aucune de ces variables n'étant calculée et stockée par défaut. Les noms
170 possibles sont dans la liste suivante : ["BMA", "CostFunctionJ",
171 "CurrentState", "OMA", "OMB", "Innovation",
172 "SimulatedObservationAtBackground", "SimulatedObservationAtCurrentState",
173 "SimulatedObservationAtOptimum"].
175 Exemple : ``{"StoreSupplementaryCalculations":["BMA", "Innovation"]}``
177 Informations et variables disponibles à la fin de l'algorithme
178 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
180 En sortie, après exécution de l'algorithme, on dispose d'informations et de
181 variables issues du calcul. La description des
182 :ref:`section_ref_output_variables` indique la manière de les obtenir par la
183 méthode nommée ``get`` de la variable "*ADD*" du post-processing. Les variables
184 d'entrée, mises à disposition de l'utilisateur en sortie pour faciliter
185 l'écriture des procédures de post-processing, sont décrites dans
186 l':ref:`subsection_r_o_v_Inventaire`.
188 Les sorties non conditionnelles de l'algorithme sont les suivantes:
191 *Liste de vecteurs*. Chaque élément est un état optimal :math:`\mathbf{x}*`
192 en optimisation ou une analyse :math:`\mathbf{x}^a` en assimilation de
195 Exemple : ``Xa = ADD.get("Analysis")[-1]``
198 *Liste de valeurs*. Chaque élément est une valeur de fonctionnelle d'écart
201 Exemple : ``J = ADD.get("CostFunctionJ")[:]``
204 *Liste de valeurs*. Chaque élément est une valeur de fonctionnelle d'écart
205 :math:`J^b`, c'est-à-dire de la partie écart à l'ébauche.
207 Exemple : ``Jb = ADD.get("CostFunctionJb")[:]``
210 *Liste de valeurs*. Chaque élément est une valeur de fonctionnelle d'écart
211 :math:`J^o`, c'est-à-dire de la partie écart à l'observation.
213 Exemple : ``Jo = ADD.get("CostFunctionJo")[:]``
215 Les sorties conditionnelles de l'algorithme sont les suivantes:
218 *Liste de vecteurs*. Chaque élément est un vecteur d'écart entre
219 l'ébauche et l'état optimal.
221 Exemple : ``bma = ADD.get("BMA")[-1]``
224 *Liste de vecteurs*. Chaque élément est un vecteur d'état courant utilisé
225 au cours du déroulement de l'algorithme d'optimisation.
227 Exemple : ``Xs = ADD.get("CurrentState")[:]``
230 *Liste de vecteurs*. Chaque élément est un vecteur d'innovation, qui est
231 en statique l'écart de l'optimum à l'ébauche, et en dynamique l'incrément
234 Exemple : ``d = ADD.get("Innovation")[-1]``
237 *Liste de vecteurs*. Chaque élément est un vecteur d'écart entre
238 l'observation et l'état optimal dans l'espace des observations.
240 Exemple : ``oma = ADD.get("OMA")[-1]``
243 *Liste de vecteurs*. Chaque élément est un vecteur d'écart entre
244 l'observation et l'état d'ébauche dans l'espace des observations.
246 Exemple : ``omb = ADD.get("OMB")[-1]``
248 SimulatedObservationAtBackground
249 *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
250 partir de l'ébauche :math:`\mathbf{x}^b`.
252 Exemple : ``hxb = ADD.get("SimulatedObservationAtBackground")[-1]``
254 SimulatedObservationAtCurrentState
255 *Liste de vecteurs*. Chaque élément est un vecteur observé à l'état courant,
256 c'est-à-dire dans l'espace des observations.
258 Exemple : ``Ys = ADD.get("SimulatedObservationAtCurrentState")[-1]``
260 SimulatedObservationAtOptimum
261 *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
262 partir de l'analyse ou de l'état optimal :math:`\mathbf{x}^a`.
264 Exemple : ``hxa = ADD.get("SimulatedObservationAtOptimum")[-1]``
269 Références vers d'autres sections :
270 - :ref:`section_ref_algorithm_DerivativeFreeOptimization`
272 Références bibliographiques :