Salome HOME
3cf57aba9e3fa18bda53f587862fdf5834275c4b
[modules/adao.git] / doc / fr / ref_algorithm_GradientTest.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: GradientTest
25 .. _section_ref_algorithm_GradientTest:
26
27 Algorithme de vérification "*GradientTest*"
28 -------------------------------------------
29
30 Description
31 +++++++++++
32
33 Cet algorithme permet de vérifier la qualité du gradient de l'opérateur, en
34 calculant un résidu dont les propriétés théoriques sont connues. Plusieurs
35 formules de résidu sont disponibles.
36
37 Dans tous les cas, on prend :math:`\mathbf{dx}_0=Normal(0,\mathbf{x})` et
38 :math:`\mathbf{dx}=\alpha*\mathbf{dx}_0`. :math:`F` est le code de calcul.
39
40 Résidu "Taylor"
41 ***************
42
43 On observe le résidu issu du développement de Taylor de la fonction :math:`F`,
44 normalisé par la valeur au point nominal :
45
46 .. math:: R(\alpha) = \frac{|| F(\mathbf{x}+\alpha*\mathbf{dx}) - F(\mathbf{x}) - \alpha * \nabla_xF(\mathbf{dx}) ||}{|| F(\mathbf{x}) ||}
47
48 Si le résidu décroit et que la décroissance se fait en :math:`\alpha^2` selon
49 :math:`\alpha`, cela signifie que le gradient est bien calculé jusqu'à la
50 précision d'arrêt de la décroissance quadratique, et que :math:`F` n'est pas
51 linéaire.
52
53 Si le résidu décroit et que la décroissance se fait en :math:`\alpha` selon
54 :math:`\alpha`, jusqu'à un certain seuil après lequel le résidu est faible et
55 constant, cela signifie que :math:`F` est linéaire et que le résidu décroit à
56 partir de l'erreur faite dans le calcul du terme :math:`\nabla_xF`.
57
58 Résidu "TaylorOnNorm"
59 *********************
60
61 On observe le résidu issu du développement de Taylor de la fonction :math:`F`,
62 rapporté au paramètre :math:`\alpha` au carré :
63
64 .. math:: R(\alpha) = \frac{|| F(\mathbf{x}+\alpha*\mathbf{dx}) - F(\mathbf{x}) - \alpha * \nabla_xF(\mathbf{dx}) ||}{\alpha^2}
65
66 C'est un résidu essentiellement similaire au critère classique de Taylor décrit
67 précédemment, mais son comportement peut différer selon les propriétés
68 numériques des calculs de ses différents termes.
69
70 Si le résidu est constant jusqu'à un certain seuil et croissant ensuite, cela
71 signifie que le gradient est bien calculé jusqu'à cette précision d'arrêt, et
72 que :math:`F` n'est pas linéaire.
73
74 Si le résidu est systématiquement croissant en partant d'une valeur faible par
75 rapport à :math:`||F(\mathbf{x})||`, cela signifie que :math:`F` est
76 (quasi-)linéaire et que le calcul du gradient est correct jusqu'au moment où le
77 résidu est de l'ordre de grandeur de :math:`||F(\mathbf{x})||`.
78
79 Résidu "Norm"
80 *************
81
82 On observe le résidu, qui est basé sur une approximation du gradient :
83
84 .. math:: R(\alpha) = \frac{|| F(\mathbf{x}+\alpha*\mathbf{dx}) - F(\mathbf{x}) ||}{\alpha}
85
86 qui doit rester constant jusqu'à ce que l'on atteigne la précision du calcul.
87
88 Commandes requises et optionnelles
89 ++++++++++++++++++++++++++++++++++
90
91 .. index:: single: AlgorithmParameters
92 .. index:: single: CheckingPoint
93 .. index:: single: ObservationOperator
94 .. index:: single: AmplitudeOfInitialDirection
95 .. index:: single: EpsilonMinimumExponent
96 .. index:: single: InitialDirection
97 .. index:: single: ResiduFormula
98 .. index:: single: SetSeed
99 .. index:: single: StoreSupplementaryCalculations
100
101 Les commandes requises générales, disponibles dans l'interface en édition, sont
102 les suivantes:
103
104   CheckingPoint
105     *Commande obligatoire*. Elle définit le vecteur utilisé comme l'état autour
106     duquel réaliser le test requis, noté :math:`\mathbf{x}` et similaire à
107     l'ébauche :math:`\mathbf{x}^b`. Sa valeur est définie comme un objet de type
108     "*Vector*".
109
110   ObservationOperator
111     *Commande obligatoire*. Elle indique l'opérateur d'observation, notée
112     précédemment :math:`H`, qui transforme les paramètres d'entrée
113     :math:`\mathbf{x}` en résultats :math:`\mathbf{y}` qui sont à comparer aux
114     observations :math:`\mathbf{y}^o`.  Sa valeur est définie comme un objet de
115     type "*Function*". Différentes formes fonctionnelles peuvent être
116     utilisées, comme décrit dans la section
117     :ref:`section_ref_operator_requirements`. Si un contrôle :math:`U` est
118     inclus dans le modèle d'observation, l'opérateur doit être appliqué à une
119     paire :math:`(X,U)`.
120
121 Les commandes optionnelles générales, disponibles dans l'interface en édition,
122 sont indiquées dans la :ref:`section_ref_checking_keywords`. De plus, les
123 paramètres de la commande "*AlgorithmParameters*" permettent d'indiquer les
124 options particulières, décrites ci-après, de l'algorithme. On se reportera à la
125 :ref:`section_ref_options_Algorithm_Parameters` pour le bon usage de cette
126 commande.
127
128 Les options de l'algorithme sont les suivantes:
129
130   AmplitudeOfInitialDirection
131     Cette clé indique la mise à l'échelle de la perturbation initiale construite
132     comme un vecteur utilisé pour la dérivée directionnelle autour du point
133     nominal de vérification. La valeur par défaut est de 1, ce qui signifie pas
134     de mise à l'échelle.
135
136     Exemple : ``{"AmplitudeOfInitialDirection":0.5}``
137
138   EpsilonMinimumExponent
139     Cette clé indique la valeur de l'exposant minimal du coefficient en
140     puissance de 10 qui doit être utilisé pour faire décroître le multiplicateur
141     de l'incrément. La valeur par défaut est de -8, et elle doit être entre 0 et
142     -20. Par exemple, la valeur par défaut conduit à calculer le résidu de la
143     formule avec un incrément fixe multiplié par 1.e0 jusqu'à 1.e-8.
144
145     Exemple : ``{"EpsilonMinimumExponent":-12}``
146
147   InitialDirection
148     Cette clé indique la direction vectorielle utilisée pour la dérivée
149     directionnelle autour du point nominal de vérification. Cela doit être un
150     vecteur. Si elle n'est pas spécifiée, la direction par défaut est une
151     perturbation par défaut autour de zéro de la même taille vectorielle que le
152     point de vérification.
153
154     Exemple : ``{"InitialDirection":[0.1,0.1,100.,3}``
155
156   ResiduFormula
157     Cette clé indique la formule de résidu qui doit être utilisée pour le test.
158     Le choix par défaut est "Taylor", et les choix possibles sont "Taylor"
159     (résidu du développement de Taylor normalisé de l'opérateur, qui doit
160     décroître comme le carré de la perturbation), "TaylorOnNorm" (résidu du
161     développement de Taylor rapporté à la perturbation de l'opérateur, qui doit
162     rester constant) et "Norm" (résidu obtenu en prenant la norme du
163     développement de Taylor à l'ordre 0, qui approxime le gradient, et qui doit
164     rester constant).
165
166     Exemple : ``{"ResiduFormula":"Taylor"}``
167
168   SetSeed
169     Cette clé permet de donner un nombre entier pour fixer la graine du
170     générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
171     par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
172     utilise ainsi l'initialisation par défaut de l'ordinateur.
173
174     Exemple : ``{"SetSeed":1000}``
175
176   StoreSupplementaryCalculations
177     Cette liste indique les noms des variables supplémentaires qui peuvent être
178     disponibles à la fin de l'algorithme. Cela implique potentiellement des
179     calculs ou du stockage coûteux. La valeur par défaut est une liste vide,
180     aucune de ces variables n'étant calculée et stockée par défaut. Les noms
181     possibles sont dans la liste suivante : ["CurrentState", "Residu",
182     "SimulatedObservationAtCurrentState"].
183
184     Exemple : ``{"StoreSupplementaryCalculations":["CurrentState"]}``
185
186 Informations et variables disponibles à la fin de l'algorithme
187 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
188
189 En sortie, après exécution de l'algorithme, on dispose d'informations et de
190 variables issues du calcul. La description des
191 :ref:`section_ref_output_variables` indique la manière de les obtenir par la
192 méthode nommée ``get`` de la variable "*ADD*" du post-processing. Les variables
193 d'entrée, mises à disposition de l'utilisateur en sortie pour faciliter
194 l'écriture des procédures de post-processing, sont décrites dans
195 l':ref:`subsection_r_o_v_Inventaire`.
196
197 Les sorties non conditionnelles de l'algorithme sont les suivantes:
198
199   Residu
200     *Liste de valeurs*. Chaque élément est la valeur du résidu particulier
201     vérifié lors d'un algorithme de vérification, selon l'ordre des tests
202     effectués.
203
204     Exemple : ``r = ADD.get("Residu")[:]``
205
206 Les sorties conditionnelles de l'algorithme sont les suivantes:
207
208   CurrentState
209     *Liste de vecteurs*. Chaque élément est un vecteur d'état courant utilisé
210     au cours du déroulement de l'algorithme d'optimisation.
211
212     Exemple : ``Xs = ADD.get("CurrentState")[:]``
213
214   SimulatedObservationAtCurrentState
215     *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
216     partir de l'état courant, c'est-à-dire dans l'espace des observations.
217
218     Exemple : ``hxs = ADD.get("SimulatedObservationAtCurrentState")[-1]``
219
220 Voir aussi
221 ++++++++++
222
223 Références vers d'autres sections :
224   - :ref:`section_ref_algorithm_FunctionTest`
225   - :ref:`section_ref_algorithm_LinearityTest`
226   - :ref:`section_ref_algorithm_TangentTest`
227   - :ref:`section_ref_algorithm_AdjointTest`