Salome HOME
Documentation and source minor corrections for observers
[modules/adao.git] / doc / fr / ref_algorithm_DerivativeFreeOptimization.rst
1 ..
2    Copyright (C) 2008-2015 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: DerivativeFreeOptimization
25 .. _section_ref_algorithm_DerivativeFreeOptimization:
26
27 Algorithme de calcul "*DerivativeFreeOptimization*"
28 ----------------------------------------------------
29
30 .. warning::
31
32   dans sa présente version, cet algorithme est expérimental, et reste donc
33   susceptible de changements dans les prochaines versions.
34
35 Description
36 +++++++++++
37
38 Cet algorithme réalise une estimation d'état d'un système dynamique par
39 minimisation d'une fonctionnelle d'écart :math:`J` sans gradient. C'est une
40 méthode qui n'utilise pas les dérivées de la fonctionnelle d'écart. Elle entre
41 dans la même catégorie que
42 l':ref:`section_ref_algorithm_ParticleSwarmOptimization`.
43
44 C'est une méthode d'optimisation permettant la recherche du minimum global d'une
45 fonctionnelle d'erreur :math:`J` quelconque de type :math:`L^1`, :math:`L^2` ou
46 :math:`L^{\infty}`, avec ou sans pondérations. La fonctionnelle d'erreur par
47 défaut est celle de moindres carrés pondérés augmentés, classiquement utilisée
48 en assimilation de données.
49
50 Commandes requises et optionnelles
51 ++++++++++++++++++++++++++++++++++
52
53 .. index:: single: AlgorithmParameters
54 .. index:: single: Background
55 .. index:: single: BackgroundError
56 .. index:: single: Observation
57 .. index:: single: ObservationError
58 .. index:: single: ObservationOperator
59 .. index:: single: Minimizer
60 .. index:: single: MaximumNumberOfSteps
61 .. index:: single: MaximumNumberOfFunctionEvaluations
62 .. index:: single: StateVariationTolerance
63 .. index:: single: CostDecrementTolerance
64 .. index:: single: QualityCriterion
65 .. index:: single: StoreSupplementaryCalculations
66
67 Les commandes requises générales, disponibles dans l'interface en édition, sont
68 les suivantes:
69
70   Background
71     *Commande obligatoire*. Elle définit le vecteur d'ébauche ou
72     d'initialisation, noté précédemment :math:`\mathbf{x}^b`. Sa valeur est
73     définie comme un objet de type "*Vector*" ou de type "*VectorSerie*".
74
75   BackgroundError
76     *Commande obligatoire*. Elle définit la matrice de covariance des erreurs
77     d'ébauche, notée précédemment :math:`\mathbf{B}`. Sa valeur est définie
78     comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
79     type "*DiagonalSparseMatrix*".
80
81   Observation
82     *Commande obligatoire*. Elle définit le vecteur d'observation utilisé en
83     assimilation de données ou en optimisation, et noté précédemment
84     :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de type "*Vector*"
85     ou de type "*VectorSerie*".
86
87   ObservationError
88     *Commande obligatoire*. Elle définit la matrice de covariance des erreurs
89     d'ébauche, notée précédemment :math:`\mathbf{R}`. Sa valeur est définie
90     comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
91     type "*DiagonalSparseMatrix*".
92
93   ObservationOperator
94     *Commande obligatoire*. Elle indique l'opérateur d'observation, noté
95     précédemment :math:`H`, qui transforme les paramètres d'entrée
96     :math:`\mathbf{x}` en résultats :math:`\mathbf{y}` qui sont à comparer aux
97     observations :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de
98     type "*Function*" ou de type "*Matrix*". Dans le cas du type "*Function*",
99     différentes formes fonctionnelles peuvent être utilisées, comme décrit dans
100     la section :ref:`section_ref_operator_requirements`. Si un contrôle
101     :math:`U` est inclus dans le modèle d'observation, l'opérateur doit être
102     appliqué à une paire :math:`(X,U)`.
103
104 Les commandes optionnelles générales, disponibles dans l'interface en édition,
105 sont indiquées dans la :ref:`section_ref_assimilation_keywords`. De plus, les
106 paramètres de la commande "*AlgorithmParameters*" permettent d'indiquer les
107 options particulières, décrites ci-après, de l'algorithme. On se reportera à la
108 :ref:`section_ref_options_Algorithm_Parameters` pour le bon usage de cette
109 commande.
110
111 Les options de l'algorithme sont les suivantes:
112
113   Minimizer
114     Cette clé permet de changer le minimiseur pour l'optimiseur. Le choix par
115     défaut est "POWELL", et les choix possibles sont "POWELL" (minimisation sans
116     contrainte de type Powell modifiée, voir [Powell]_), "SIMPLEX" (minimisation
117     sans contrainte de type simplexe ou Nelder-Mead, voir [Nelder]_). Il est
118     conseillé de conserver la valeur par défaut.
119
120     Exemple : ``{"Minimizer":"POWELL"}``
121
122   MaximumNumberOfSteps
123     Cette clé indique le nombre maximum d'itérations possibles en optimisation
124     itérative. Le défaut est 15000, qui est une limite arbitraire. Il est ainsi
125     fortement recommandé d'adapter ce paramètre aux besoins pour des problèmes
126     réels. Pour certains optimiseurs, le nombre de pas effectif d'arrêt peut
127     être légèrement différent de la limite à cause d'exigences de contrôle
128     interne de l'algorithme.
129
130     Exemple : ``{"MaximumNumberOfSteps":50}``
131
132   MaximumNumberOfFunctionEvaluations
133     Cette clé indique le nombre maximum d'évaluations possibles de la
134     fonctionnelle à optimiser. Le défaut est 15000, qui est une limite
135     arbitraire. Le calcul peut dépasser ce nombre lorsqu'il doit finir une
136     boucle externe d'optimisation. Il est fortement recommandé d'adapter ce
137     paramètre aux besoins pour des problèmes réels.
138
139     Exemple : ``{"MaximumNumberOfFunctionEvaluations":50}``
140
141   StateVariationTolerance
142     Cette clé indique la variation relative maximale de l'état lors pour l'arrêt
143     par convergence sur l'état. Le défaut est de 1.e-4, et il est recommandé
144     de l'adapter aux besoins pour des problèmes réels.
145
146     Exemple : ``{"StateVariationTolerance":1.e-4}``
147
148   CostDecrementTolerance
149     Cette clé indique une valeur limite, conduisant à arrêter le processus
150     itératif d'optimisation lorsque la fonction coût décroît moins que cette
151     tolérance au dernier pas. Le défaut est de 1.e-7, et il est recommandé
152     de l'adapter aux besoins pour des problèmes réels.
153
154     Exemple : ``{"CostDecrementTolerance":1.e-7}``
155
156   QualityCriterion
157     Cette clé indique le critère de qualité, qui est minimisé pour trouver
158     l'estimation optimale de l'état. Le défaut est le critère usuel de
159     l'assimilation de données nommé "DA", qui est le critère de moindres carrés
160     pondérés augmentés. Les critères possibles sont dans la liste suivante, dans
161     laquelle les noms équivalents sont indiqués par un signe "=" :
162     ["AugmentedWeightedLeastSquares"="AWLS"="DA", "WeightedLeastSquares"="WLS",
163     "LeastSquares"="LS"="L2", "AbsoluteValue"="L1",  "MaximumError"="ME"].
164
165     Exemple : ``{"QualityCriterion":"DA"}``
166
167   StoreSupplementaryCalculations
168     Cette liste indique les noms des variables supplémentaires qui peuvent être
169     disponibles à la fin de l'algorithme. Cela implique potentiellement des
170     calculs ou du stockage coûteux. La valeur par défaut est une liste vide,
171     aucune de ces variables n'étant calculée et stockée par défaut. Les noms
172     possibles sont dans la liste suivante : ["CurrentState", "CostFunctionJ",
173     "CostFunctionJAtCurrentOptimum", "CurrentOptimum", "IndexOfOptimum",
174     "InnovationAtCurrentState", "BMA", "OMA", "OMB",
175     "SimulatedObservationAtBackground", "SimulatedObservationAtCurrentOptimum",
176     "SimulatedObservationAtCurrentState", "SimulatedObservationAtOptimum"].
177
178     Exemple : ``{"StoreSupplementaryCalculations":["BMA", "Innovation"]}``
179
180 Informations et variables disponibles à la fin de l'algorithme
181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
182
183 En sortie, après exécution de l'algorithme, on dispose d'informations et de
184 variables issues du calcul. La description des
185 :ref:`section_ref_output_variables` indique la manière de les obtenir par la
186 méthode nommée ``get`` de la variable "*ADD*" du post-processing. Les variables
187 d'entrée, mises à disposition de l'utilisateur en sortie pour faciliter
188 l'écriture des procédures de post-processing, sont décrites dans
189 l':ref:`subsection_r_o_v_Inventaire`.
190
191 Les sorties non conditionnelles de l'algorithme sont les suivantes:
192
193   Analysis
194     *Liste de vecteurs*. Chaque élément est un état optimal :math:`\mathbf{x}*`
195     en optimisation ou une analyse :math:`\mathbf{x}^a` en assimilation de
196     données.
197
198     Exemple : ``Xa = ADD.get("Analysis")[-1]``
199
200   CostFunctionJ
201     *Liste de valeurs*. Chaque élément est une valeur de fonctionnelle d'écart
202     :math:`J`.
203
204     Exemple : ``J = ADD.get("CostFunctionJ")[:]``
205
206   CostFunctionJb
207     *Liste de valeurs*. Chaque élément est une valeur de fonctionnelle d'écart
208     :math:`J^b`, c'est-à-dire de la partie écart à l'ébauche.
209
210     Exemple : ``Jb = ADD.get("CostFunctionJb")[:]``
211
212   CostFunctionJo
213     *Liste de valeurs*. Chaque élément est une valeur de fonctionnelle d'écart
214     :math:`J^o`, c'est-à-dire de la partie écart à l'observation.
215
216     Exemple : ``Jo = ADD.get("CostFunctionJo")[:]``
217
218   CurrentState
219     *Liste de vecteurs*. Chaque élément est un vecteur d'état courant utilisé
220     au cours du déroulement de l'algorithme d'optimisation.
221
222     Exemple : ``Xs = ADD.get("CurrentState")[:]``
223
224 Les sorties conditionnelles de l'algorithme sont les suivantes:
225
226   SimulatedObservationAtBackground
227     *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
228     partir de l'ébauche :math:`\mathbf{x}^b`.
229
230     Exemple : ``hxb = ADD.get("SimulatedObservationAtBackground")[-1]``
231
232   SimulatedObservationAtCurrentState
233     *Liste de vecteurs*. Chaque élément est un vecteur observé à l'état courant,
234     c'est-à-dire dans l'espace des observations.
235
236     Exemple : ``Ys = ADD.get("SimulatedObservationAtCurrentState")[-1]``
237
238   SimulatedObservationAtOptimum
239     *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
240     partir de l'analyse ou de l'état optimal :math:`\mathbf{x}^a`.
241
242     Exemple : ``hxa = ADD.get("SimulatedObservationAtOptimum")[-1]``
243
244 Voir aussi
245 ++++++++++
246
247 Références vers d'autres sections :
248   - :ref:`section_ref_algorithm_ParticleSwarmOptimization`
249
250 Références bibliographiques :
251   - [Nelder]_
252   - [Powell]_