-.. _section_reference:
-
-================================================================================
-Description de référence des commandes et mots-clés ADAO
-================================================================================
-
-Cette section présente la description de référence des commandes et mots-clés
-ADAO disponibles à travers l'interface graphique (GUI) ou à travers des scripts.
-Chaque commande ou mot-clé à définir par l'interface graphique (GUI) a des
-propriétés particulières. La première propriété est d'être *requise*,
-*optionnelle* ou simplement utile, décrivant un type d'entrée. La seconde
-propriété est d'être une variable "ouverte" avec un type fixé mais avec
-n'importe quelle valeur autorisée par le type, ou une variable "fermée", limitée
-à des valeurs spécifiées. L'éditeur graphique EFICAS disposant de capacités
-intrinsèques de validation, les propriétés des commandes ou mots-clés données à
-l'aide de l'interface graphique sont automatiquement correctes.
-
-Les notations mathématiques utilisées ci-dessous sont expliquées dans la section
-:ref:`section_theory`.
-
-Des exemples sur l'usage de ces commandes sont disponibles dans la section
-:ref:`section_examples` et dans les fichiers d'exemple installés avec le module
-ADAO.
-
-Liste des types d'entrées possibles
------------------------------------
-
-.. index:: single: Dict
-.. index:: single: Function
-.. index:: single: Matrix
-.. index:: single: ScalarSparseMatrix
-.. index:: single: DiagonalSparseMatrix
-.. index:: single: String
-.. index:: single: Script
-.. index:: single: Vector
-
-Chaque variable ADAO présente un pseudo-type qui aide à la remplir et à la
-valider. Les différents pseudo-types sont:
-
-**Dict**
- Cela indique une variable qui doit être remplie avec un dictionnaire Python
- ``{"clé":"valeur"...}``, usuellement donné soit par une chaîne de caractères
- soit par un fichier script.
-
-**Function**
- Cela indique une variable qui doit être donnée comme une fonction Python,
- usuellement donnée soit par une chaîne de caractères soit par un fichier
- script.
-
-**Matrix**
- Cela indique une variable qui doit être donnée comme une matrice,
- usuellement donnée soit par une chaîne de caractères soit par un fichier
- script.
-
-**ScalarSparseMatrix**
- Cela indique une variable qui doit être donnée comme un nombre unique (qui
- sera utilisé pour multiplier une matrice identité), usuellement donné soit
- par une chaîne de caractères soit par un fichier script.
-
-**DiagonalSparseMatrix**
- Cela indique une variable qui doit , (qui sera
- utilisé pour remplacer la diagonale d'une matrice identité), usuellement
- donné soit par une chaîne de caractères soit par un fichier script.
-
-**Script**
- Cela indique un script donné comme un fichier externe. Il peut être désigné
- par un nom de fichier avec chemin complet ou seulement par un nom de fichier
- sans le chemin. Si le fichier est donné uniquement par un nom sans chemin,
- et si un répertoire d'étude est aussi indiqué, le fichier est recherché dans
- le répertoire d'étude donné.
-
-**String**
- Cela indique une chaîne de caractères fournissant une représentation
- littérale d'une matrice, d'un vecteur ou d'une collection de vecteurs, comme
- par exemple "1 2 ; 3 4" ou "[[1,2],[3,4]]" pour une matrice carrée de taille
- 2x2.
-
-**Vector**
- Cela indique une variable qui doit être remplie comme un vecteur,
- usuellement donné soit par une chaîne de caractères soit par un fichier
- script.
-
-**VectorSerie**
- Cela indique une variable qui doit être remplie comme une liste de vecteurs,
- usuellement donnée soit par une chaîne de caractères soit par un fichier
- script.
-
-Lorsqu'une commande ou un mot-clé peut être rempli par un nom de fichier script,
-ce script doit présenter une variable ou une méthode que porte le même nom que
-la variable à remplir. En d'autres mots, lorsque l'on importe le script dans un
-noeud Python de YACS, il doit créer une variable du bon nom dans l'espace de
-nommage courant du noeud.
-
-Description de référence pour les cas de calcul ADAO
-----------------------------------------------------
-
-Liste des commandes et mots-clés pour un cas de calcul ADAO
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ASSIMILATION_STUDY
-.. index:: single: Algorithm
-.. index:: single: AlgorithmParameters
-.. index:: single: Background
-.. index:: single: BackgroundError
-.. index:: single: ControlInput
-.. index:: single: Debug
-.. index:: single: EvolutionError
-.. index:: single: EvolutionModel
-.. index:: single: InputVariables
-.. index:: single: Observation
-.. index:: single: ObservationError
-.. index:: single: ObservationOperator
-.. index:: single: Observers
-.. index:: single: OutputVariables
-.. index:: single: Study_name
-.. index:: single: Study_repertory
-.. index:: single: UserDataInit
-.. index:: single: UserPostAnalysis
-
-La première série de commandes est liée à la description d'un cas de calcul, qui
-est une procédure d'*Assimilation de Données* ou d'*Optimisation*. Les termes
-sont classés par ordre alphabétique, sauf le premier, qui décrit le choix entre
-le calcul ou la vérification. Les différentes commandes sont les suivantes:
-
-**ASSIMILATION_STUDY**
- *Commande obligatoire*. C'est la commande générale qui décrit le cas
- d'assimilation de données ou d'optimisation. Elle contient hiérarchiquement
- toutes les autres commandes.
-
-**Algorithm**
- *Commande obligatoire*. C'est une chaîne de caractère qui indique l'algorithme
- d'assimilation de données ou d'optimisation choisi. Les choix sont limités
- et disponibles à travers l'interface graphique. Il existe par exemple le
- "3DVAR", le "Blue"... Voir plus loin la liste des algorithmes et des
- paramètres associés dans la sous-section `Commandes optionnelles et requises
- pour les algorithmes de calcul`_.
-
-**AlgorithmParameters**
- *Commande optionnelle*. Elle permet d'ajouter des paramètres optionnels pour
- contrôler l'algorithme d'assimilation de données ou d'optimisation. Sa
- valeur est définie comme un objet de type "*Dict*". Voir plus loin la liste
- des algorithmes et des paramètres associés dans la sous-section `Commandes
- optionnelles et requises pour les algorithmes de calcul`_.
-
-**Background**
- *Commande obligatoire*. Elle définit le vecteur d'ébauche ou
- d'initialisation, noté précédemment :math:`\mathbf{x}^b`. Sa valeur est
- définie comme un objet de type "*Vector*".
-
-**BackgroundError**
- *Commande obligatoire*. Elle définit la matrice de covariance des erreurs
- d'ébauche, notée précédemment :math:`\mathbf{B}`. Sa valeur est définie
- comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
- type "*DiagonalSparseMatrix*".
-
-**ControlInput**
- *Commande optionnelle*. Elle indique le vecteur de contrôle utilisé pour
- forcer le modèle d'évolution à chaque pas, usuellement noté
- :math:`\mathbf{U}`. Sa valeur est définie comme un objet de type "*Vector*"
- ou de type *VectorSerie*. Lorsqu'il n'y a pas de contrôle, sa valeur doit
- être une chaîne vide ''.
-
-**Debug**
- *Commande optionnelle*. Elle définit le niveau de sorties et d'informations
- intermédiaires de débogage. Les choix sont limités entre 0 (pour False) and
- 1 (pour True).
-
-**EvolutionError**
- *Commande optionnelle*. Elle définit la matrice de covariance des erreurs
- d'évolution, usuellement notée :math:`\mathbf{Q}`. Sa valeur est définie
- comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
- type "*DiagonalSparseMatrix*".
-
-**EvolutionModel**
- *Commande optionnelle*. Elle indique l'opérateur d'évolution du modèle,
- usuellement noté :math:`M`, qui décrit un pas élémentaire d'évolution. Sa
- valeur est définie comme un objet de type "*Function*". Différentes formes
- fonctionnelles peuvent être utilisées, comme décrit dans la sous-section
- suivante `Exigences pour les fonctions décrivant un opérateur`_. Si un
- contrôle :math:`U` est inclus dans le modèle d'évolution, l'opérateur doit
- être appliqué à une paire :math:`(X,U)`.
-
-**InputVariables**
- *Commande optionnelle*. Elle permet d'indiquer le nom et la taille des
- variables physiques qui sont rassemblées dans le vecteur d'état. Cette
- information est destinée à être utilisée dans le traitement algorithmique
- interne des données.
-
-**Observation**
- *Commande obligatoire*. Elle définit le vecteur d'observation utilisé en
- assimilation de données ou en optimisation, et noté précédemment
- :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de type "*Vector*"
- ou de type *VectorSerie*".
-
-**ObservationError**
- *Commande obligatoire*. Elle définit la matrice de covariance des erreurs
- d'ébauche, notée précédemment :math:`\mathbf{R}`. Sa valeur est définie
- comme un objet de type "*Matrix*", de type "*ScalarSparseMatrix*", ou de
- type "*DiagonalSparseMatrix*".
-
-**ObservationOperator**
- *Commande obligatoire*. Elle indique l'opérateur d'observation, notée
- précédemment :math:`H`, qui transforme les paramètres d'entrée
- :math:`\mathbf{x}` en résultats :math:`\mathbf{y}` qui sont à comparer aux
- observations :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de
- type "*Function*". Différentes formes fonctionnelles peuvent être utilisées,
- comme décrit dans la sous-section suivante `Exigences pour les fonctions
- décrivant un opérateur`_. Si un contrôle :math:`U` est inclus dans le modèle
- d'observation, l'opérateur doit être appliqué à une paire :math:`(X,U)`.
-
-**Observers**
- *Commande optionnelle*. Elle permet de définir des observateurs internes,
- qui sont des fonctions liées à une variable particulière, qui sont exécutées
- chaque fois que cette variable est modifiée. C'est une manière pratique de
- suivre des variables d'intérêt durant le processus d'assimilation de données
- ou d'optimisation, en l'affichant ou en la traçant, etc. Des exemples
- courants (squelettes) sont fournis pour aider l'utilisateur ou pour
- faciliter l'élaboration d'un cas.
-
-**OutputVariables**
- *Commande optionnelle*. Elle permet d'indiquer le nom et la taille des
- variables physiques qui sont rassemblées dans le vecteur d'observation.
- Cette information est destinée à être utilisée dans le traitement
- algorithmique interne des données.
-
-**Study_name**
- *Commande obligatoire*. C'est une chaîne de caractères quelconque pour
- décrire l'étude ADAO par un nom ou une déclaration.
-
-**Study_repertory**
- *Commande optionnelle*. S'il existe, ce répertoire est utilisé comme base
- pour les calculs, et il est utilisé pour trouver les fichiers de script,
- donnés par nom sans répertoire, qui peuvent être utilisés pour définir
- certaines variables.
-
-**UserDataInit**
- *Commande optionnelle*. Elle permet d'initialiser certains paramètres ou
- certaines données automatiquement avant le traitement de données d'entrée
- pour l'assimilation de données ou l'optimisation. Pour cela, elle indique un
- nom de fichier de script à exécuter avant d'entrer dans l'initialisation des
- variables choisies.
-
-**UserPostAnalysis**
- *Commande optionnelle*. Elle permet de traiter des paramètres ou des
- résultats après le déroulement de l'algorithme d'assimilation de données ou
- d'optimisation. Sa valeur est définie comme un fichier script ou une chaîne
- de caractères, permettant de produire directement du code de post-processing
- dans un cas ADAO. Des exemples courants (squelettes) sont fournis pour aider
- l'utilisateur ou pour faciliter l'élaboration d'un cas.
-
-Commandes optionnelles et requises pour les algorithmes de calcul
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: 3DVAR
-.. index:: single: Blue
-.. index:: single: ExtendedBlue
-.. index:: single: EnsembleBlue
-.. index:: single: KalmanFilter
-.. index:: single: ExtendedKalmanFilter
-.. index:: single: UnscentedKalmanFilter
-.. index:: single: LinearLeastSquares
-.. index:: single: NonLinearLeastSquares
-.. index:: single: ParticleSwarmOptimization
-.. index:: single: QuantileRegression
-
-.. index:: single: AlgorithmParameters
-.. index:: single: Bounds
-.. index:: single: CostDecrementTolerance
-.. index:: single: GradientNormTolerance
-.. index:: single: GroupRecallRate
-.. index:: single: MaximumNumberOfSteps
-.. index:: single: Minimizer
-.. index:: single: NumberOfInsects
-.. index:: single: ProjectedGradientTolerance
-.. index:: single: QualityCriterion
-.. index:: single: Quantile
-.. index:: single: SetSeed
-.. index:: single: StoreInternalVariables
-.. index:: single: StoreSupplementaryCalculations
-.. index:: single: SwarmVelocity
-
-Chaque algorithme peut être contrôlé en utilisant des options génériques ou
-particulières, données à travers la commande optionnelle "*AlgorithmParameters*"
-dans un fichier script ou une chaîne de caractères, à la manière de l'exemple
-qui suit dans un fichier::
-
- AlgorithmParameters = {
- "Minimizer" : "LBFGSB",
- "MaximumNumberOfSteps" : 25,
- "StoreSupplementaryCalculations" : ["APosterioriCovariance","OMA"],
- }
-
-Pour donner les valeurs de la commande "*AlgorithmParameters*" par une chaîne de
-caractères, on doit utiliser des guillemets simples pour fournir une définition
-standard de dictionnaire, comme par exemple::
-
- '{"Minimizer":"LBFGSB","MaximumNumberOfSteps":25}'
-
-Cette section décrit les options disponibles algorithme par algorithme. De plus,
-pour chaque algorithme, les commandes/mots-clés obligatoires sont indiqués. Si
-une option est spécifiée par l'utilisateur pour un algorithme qui ne la supporte
-pas, cette option est simplement laissée inutilisée et ne bloque pas le
-traitement. La signification des acronymes ou des noms particuliers peut être
-trouvée dans l':ref:`genindex` ou dans le :ref:`section_glossary`.
-
-**"Blue"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "OMA", "OMB",
- "Innovation", "SigmaBck2", "SigmaObs2", "MahalanobisConsistency"].
-
-**"ExtendedBlue"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "OMA", "OMB",
- "Innovation", "SigmaBck2", "SigmaObs2", "MahalanobisConsistency"].
-
-**"LinearLeastSquares"**
-
- *Commandes obligatoires*
- *"Observation", "ObservationError",
- "ObservationOperator"*
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["OMA"].
-
-**"3DVAR"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- Minimizer
- Cette clé permet de changer le minimiseur pour l'optimiseur. Le choix par
- défaut est "LBFGSB", et les choix possibles sont "LBFGSB" (minimisation non
- linéaire sous contraintes, voir [Byrd95]_, [Morales11]_ et [Zhu97]_), "TNC"
- (minimisation non linéaire sous contraintes), "CG" (minimisation non
- linéaire sans contraintes), "BFGS" (minimisation non linéaire sans
- contraintes), "NCG" (minimisation de type gradient conjugué de Newton). On
- conseille de conserver la valeur par défaut.
-
- Bounds
- Cette clé permet de définir des bornes supérieure et inférieure pour
- chaque variable d'état optimisée. Les bornes peuvent être données par une
- liste de liste de paires de bornes inférieure/supérieure pour chaque
- variable, avec une valeur ``None`` chaque fois qu'il n'y a pas de borne. Les
- bornes peuvent toujours être spécifiées, mais seuls les optimiseurs sous
- contraintes les prennent en compte.
-
- MaximumNumberOfSteps
- Cette clé indique le nombre maximum d'itérations possibles en optimisation
- itérative. Le défaut est 15000, qui est très similaire à une absence de
- limite sur les itérations. Il est ainsi recommandé d'adapter ce paramètre
- aux besoins pour des problèmes réels. Pour certains optimiseurs, le nombre
- de pas effectif d'arrêt peut être légèrement différent de la limite à cause
- d'exigences de contrôle interne de l'algorithme.
-
- CostDecrementTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque la fonction coût décroît moins que cette
- tolérance au dernier pas. Le défaut est de 1.e-7, et il est recommandé
- de l'adapter aux besoins pour des problèmes réels.
-
- ProjectedGradientTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque toutes les composantes du gradient projeté
- sont en-dessous de cette limite. C'est utilisé uniquement par les
- optimiseurs sous contraintes. Le défaut est -1, qui désigne le défaut
- interne de chaque optimiseur (usuellement 1.e-5), et il n'est pas recommandé
- de le changer.
-
- GradientNormTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque la norme du gradient est en dessous de cette
- limite. C'est utilisé uniquement par les optimiseurs sans contraintes. Le
- défaut est 1.e-5 et il n'est pas recommandé de le changer.
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "OMA", "OMB",
- "Innovation", "SigmaObs2", "MahalanobisConsistency"].
-
-**"NonLinearLeastSquares"**
-
- *Commandes obligatoires*
- *"Background",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- Minimizer
- Cette clé permet de changer le minimiseur pour l'optimiseur. Le choix par
- défaut est "LBFGSB", et les choix possibles sont "LBFGSB" (minimisation non
- linéaire sous contraintes, voir [Byrd95]_, [Morales11]_ et [Zhu97]_), "TNC"
- (minimisation non linéaire sous contraintes), "CG" (minimisation non
- linéaire sans contraintes), "BFGS" (minimisation non linéaire sans
- contraintes), "NCG" (minimisation de type gradient conjugué de Newton). On
- conseille de conserver la valeur par défaut.
-
- Bounds
- Cette clé permet de définir des bornes supérieure et inférieure pour
- chaque variable d'état optimisée. Les bornes peuvent être données par une
- liste de liste de paires de bornes inférieure/supérieure pour chaque
- variable, avec une valeur ``None`` chaque fois qu'il n'y a pas de borne. Les
- bornes peuvent toujours être spécifiées, mais seuls les optimiseurs sous
- contraintes les prennent en compte.
-
- MaximumNumberOfSteps
- Cette clé indique le nombre maximum d'itérations possibles en optimisation
- itérative. Le défaut est 15000, qui est très similaire à une absence de
- limite sur les itérations. Il est ainsi recommandé d'adapter ce paramètre
- aux besoins pour des problèmes réels. Pour certains optimiseurs, le nombre
- de pas effectif d'arrêt peut être légèrement différent de la limite à cause
- d'exigences de contrôle interne de l'algorithme.
-
- CostDecrementTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque la fonction coût décroît moins que cette
- tolérance au dernier pas. Le défaut est de 1.e-7, et il est recommandé
- de l'adapter aux besoins pour des problèmes réels.
-
- ProjectedGradientTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque toutes les composantes du gradient projeté
- sont en-dessous de cette limite. C'est utilisé uniquement par les
- optimiseurs sous contraintes. Le défaut est -1, qui désigne le défaut
- interne de chaque optimiseur (usuellement 1.e-5), et il n'est pas recommandé
- de le changer.
-
- GradientNormTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque la norme du gradient est en dessous de cette
- limite. C'est utilisé uniquement par les optimiseurs sans contraintes. Le
- défaut est 1.e-5 et il n'est pas recommandé de le changer.
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "OMA", "OMB",
- "Innovation", "SigmaObs2", "MahalanobisConsistency"].
-
-**"EnsembleBlue"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- SetSeed
- Cette clé permet de donner un nombre entier pour fixer la graine du
- générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
- par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
- utilise ainsi l'initialisation de l'ordinateur.
-
-**"KalmanFilter"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- EstimationOf
- Cette clé permet de choisir le type d'estimation à réaliser. Cela peut être
- soit une estimation de l'état, avec la valeur "State", ou une estimation de
- paramètres, avec la valeur "Parameters". Le choix par défaut est "State".
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "Innovation"].
-
-**"ExtendedKalmanFilter"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- Bounds
- Cette clé permet de définir des bornes supérieure et inférieure pour chaque
- variable d'état optimisée. Les bornes peuvent être données par une liste de
- liste de paires de bornes inférieure/supérieure pour chaque variable, avec
- une valeur extrême chaque fois qu'il n'y a pas de borne. Les bornes peuvent
- toujours être spécifiées, mais seuls les optimiseurs sous contraintes les
- prennent en compte.
-
- ConstrainedBy
- Cette clé permet de définir la méthode pour prendre en compte les bornes. Les
- méthodes possibles sont dans la liste suivante : ["EstimateProjection"].
-
- EstimationOf
- Cette clé permet de choisir le type d'estimation à réaliser. Cela peut être
- soit une estimation de l'état, avec la valeur "State", ou une estimation de
- paramètres, avec la valeur "Parameters". Le choix par défaut est "State".
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "Innovation"].
-
-**"UnscentedKalmanFilter"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- Bounds
- Cette clé permet de définir des bornes supérieure et inférieure pour chaque
- variable d'état optimisée. Les bornes peuvent être données par une liste de
- liste de paires de bornes inférieure/supérieure pour chaque variable, avec
- une valeur extrême chaque fois qu'il n'y a pas de borne. Les bornes peuvent
- toujours être spécifiées, mais seuls les optimiseurs sous contraintes les
- prennent en compte.
-
- ConstrainedBy
- Cette clé permet de définir la méthode pour prendre en compte les bornes. Les
- méthodes possibles sont dans la liste suivante : ["EstimateProjection"].
-
- EstimationOf
- Cette clé permet de choisir le type d'estimation à réaliser. Cela peut être
- soit une estimation de l'état, avec la valeur "State", ou une estimation de
- paramètres, avec la valeur "Parameters". Le choix par défaut est "State".
-
- Alpha, Beta, Kappa, Reconditioner
- Ces clés sont des paramètres de mise à l'échelle interne. "Alpha" requiert
- une valeur comprise entre 1.e-4 et 1. "Beta" a une valeur optimale de 2 pour
- une distribution *a priori* gaussienne. "Kappa" requiert une valeur entière,
- dont la bonne valeur par défaut est obtenue en la mettant à 0.
- "Reconditioner" requiert une valeur comprise entre 1.e-3 et 10, son défaut
- étant 1.
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["APosterioriCovariance", "BMA", "Innovation"].
-
-**"ParticleSwarmOptimization"**
-
- *Commandes obligatoires*
- *"Background", "BackgroundError",
- "Observation", "ObservationError",
- "ObservationOperator"*
-
- MaximumNumberOfSteps
- Cette clé indique le nombre maximum d'itérations possibles en optimisation
- itérative. Le défaut est 50, qui est une limite arbitraire. Il est ainsi
- recommandé d'adapter ce paramètre aux besoins pour des problèmes réels.
-
- NumberOfInsects
- Cette clé indique le nombre d'insectes ou de particules dans l'essaim. La
- valeur par défaut est 100, qui est une valeur par défaut usuelle pour cet
- algorithme.
-
- SwarmVelocity
- Cette clé indique la part de la vitesse d'insecte qui est imposée par
- l'essaim. C'est une valeur réelle positive. Le défaut est de 1.
+..
+ Copyright (C) 2008-2021 EDF R&D
- GroupRecallRate
- Cette clé indique le taux de rappel vers le meilleur insecte de l'essaim.
- C'est une valeur réelle comprise entre 0 et 1. Le défaut est de 0.5.
+ This file is part of SALOME ADAO module.
- QualityCriterion
- Cette clé indique le critère de qualité, qui est minimisé pour trouver
- l'estimation optimale de l'état. Le défaut est le critère usuel de
- l'assimilation de données nommé "DA", qui est le critère de moindres carrés
- pondérés augmentés. Les critères possibles sont dans la liste suivante, dans
- laquelle les noms équivalents sont indiqués par "=" :
- ["AugmentedPonderatedLeastSquares"="APLS"="DA",
- "PonderatedLeastSquares"="PLS", "LeastSquares"="LS"="L2",
- "AbsoluteValue"="L1", "MaximumError"="ME"]
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
- SetSeed
- Cette clé permet de donner un nombre entier pour fixer la graine du
- générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
- par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
- utilise ainsi l'initialisation par défaut de l'ordinateur.
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["BMA", "OMA", "OMB", "Innovation"].
+ See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-**"QuantileRegression"**
+ Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
- *Commandes obligatoires*
- *"Background",
- "Observation",
- "ObservationOperator"*
-
- Quantile
- Cette clé permet de définir la valeur réelle du quantile recherché, entre 0
- et 1. La valeur par défaut est 0.5, correspondant à la médiane.
-
- Minimizer
- Cette clé permet de choisir l'optimiseur pour l'optimisation. Le choix par
- défaut et le seul disponible est "MMQR" (Majorize-Minimize for Quantile
- Regression).
-
- MaximumNumberOfSteps
- Cette clé indique le nombre maximum d'itérations possibles en optimisation
- itérative. Le défaut est 15000, qui est très similaire à une absence de
- limite sur les itérations. Il est ainsi recommandé d'adapter ce paramètre
- aux besoins pour des problèmes réels.
-
- CostDecrementTolerance
- Cette clé indique une valeur limite, conduisant à arrêter le processus
- itératif d'optimisation lorsque la fonction coût décroît moins que cette
- tolérance au dernier pas. Le défaut est de 1.e-6, et il est recommandé de
- l'adapter aux besoins pour des problèmes réels.
-
- StoreInternalVariables
- Cette clé booléenne permet de stocker les variables internes par défaut,
- principalement l'état courant lors d'un processus itératif. Attention, cela
- peut être un choix numériquement coûteux dans certains cas de calculs. La
- valeur par défaut est "False".
-
- StoreSupplementaryCalculations
- Cette liste indique les noms des variables supplémentaires qui peuvent être
- disponibles à la fin de l'algorithme. Cela implique potentiellement des
- calculs coûteux. La valeur par défaut est une liste vide, aucune de ces
- variables n'étant calculée et stockée par défaut. Les noms possibles sont
- dans la liste suivante : ["BMA", "OMA", "OMB", "Innovation"].
-
-Description de référence pour les cas de vérification ADAO
-----------------------------------------------------------
-
-Liste des commandes et mots-clés pour un cas de vérification ADAO
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: CHECKING_STUDY
-.. index:: single: Algorithm
-.. index:: single: AlgorithmParameters
-.. index:: single: CheckingPoint
-.. index:: single: Debug
-.. index:: single: ObservationOperator
-.. index:: single: Study_name
-.. index:: single: Study_repertory
-.. index:: single: UserDataInit
-
-Le second jeu de commandes est liée à la description d'un cas de vérification,
-qui est une procédure pour vérifier les propriétés requises ailleurs sur
-l'information par un cas de calcul. Les termes sont classés par ordre
-alphabétique, sauf le premier, qui décrit le choix entre le calcul ou la
-vérification. Les différentes commandes sont les suivantes:
-
-**CHECKING_STUDY**
- *Commande obligatoire*. C'est la commande générale qui décrit le cas de
- vérification. Elle contient hiérarchiquement toutes les autres commandes.
-
-**Algorithm**
- *Commande obligatoire*. C'est une chaîne de caractère qui indique
- l'algorithme de test choisi. Les choix sont limités et disponibles à travers
- l'interface graphique. Il existe par exemple "FunctionTest",
- "AdjointTest"... Voir plus loin la liste des algorithmes et des paramètres
- associés dans la sous-section `Commandes optionnelles et requises pour les
- algorithmes de vérification`_.
-
-**AlgorithmParameters**
- *Commande optionnelle*. Elle permet d'ajouter des paramètres optionnels pour
- contrôler l'algorithme d'assimilation de données ou d'optimisation. Sa
- valeur est définie comme un objet de type "*Dict*". Voir plus loin la liste
- des algorithmes et des paramètres associés dans la sous-section `Commandes
- optionnelles et requises pour les algorithmes de vérification`_.
-
-**CheckingPoint**
- *Commande obligatoire*. Elle définit le vecteur utilisé comme l'état autour
- duquel réaliser le test requis, noté :math:`\mathbf{x}` et similaire à
- l'ébauche :math:`\mathbf{x}^b`. Sa valeur est définie comme un objet de type
- "*Vector*".
-
-**Debug**
- *Commande optionnelle*. Elle définit le niveau de sorties et d'informations
- intermédiaires de débogage. Les choix sont limités entre 0 (pour False) et
- 1 (pour True).
-
-**ObservationOperator**
- *Commande obligatoire*. Elle indique l'opérateur d'observation, notée
- précédemment :math:`H`, qui transforme les paramètres d'entrée
- :math:`\mathbf{x}` en résultats :math:`\mathbf{y}` qui sont à comparer aux
- observations :math:`\mathbf{y}^o`. Sa valeur est définie comme un objet de
- type "*Function*". Différentes formes fonctionnelles peuvent être utilisées,
- comme décrit dans la sous-section suivante `Exigences pour les fonctions
- décrivant un opérateur`_. Si un contrôle :math:`U` est inclus dans le modèle
- d'observation, l'opérateur doit être appliqué à une paire :math:`(X,U)`.
-
-**Observers**
- *Commande optionnelle*. Elle permet de définir des observateurs internes,
- qui sont des fonctions liées à une variable particulière, qui sont exécutées
- chaque fois que cette variable est modifiée. C'est une manière pratique de
- suivre des variables d'intérêt durant le processus d'assimilation de données
- ou d'optimisation, en l'affichant ou en la traçant, etc. Des exemples
- courants (squelettes) sont fournis pour aider l'utilisateur ou pour
- faciliter l'élaboration d'un cas.
-
-**Study_name**
- *Commande obligatoire*. C'est une chaîne de caractères quelconque pour
- décrire l'étude ADAO par un nom ou une déclaration.
-
-**Study_repertory**
- *Commande optionnelle*. S'il existe, ce répertoire est utilisé comme base
- pour les calculs, et il est utilisé pour trouver les fichiers de script,
- donnés par nom sans répertoire, qui peuvent être utilisés pour définir
- certaines variables.
-
-**UserDataInit**
- *Commande optionnelle*. Elle permet d'initialiser certains paramètres ou
- certaines données automatiquement avant le traitement de données d'entrée
- pour l'assimilation de données ou l'optimisation. Pour cela, elle indique un
- nom de fichier de script à exécuter avant d'entrer dans l'initialisation des
- variables choisies.
-
-Commandes optionnelles et requises pour les algorithmes de vérification
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: AdjointTest
-.. index:: single: FunctionTest
-.. index:: single: GradientTest
-.. index:: single: LinearityTest
-.. index:: single: ObserverTest
-.. index:: single: TangentTest
-
-.. index:: single: AlgorithmParameters
-.. index:: single: AmplitudeOfInitialDirection
-.. index:: single: EpsilonMinimumExponent
-.. index:: single: InitialDirection
-.. index:: single: ResiduFormula
-.. index:: single: SetSeed
-
-On rappelle que chaque algorithme peut être contrôlé en utilisant des options
-génériques ou particulières, données à travers la commande optionnelle
-"*AlgorithmParameters*", à la manière de l'exemple qui suit dans un fichier::
-
- AlgorithmParameters = {
- "AmplitudeOfInitialDirection" : 1,
- "EpsilonMinimumExponent" : -8,
- }
-
-Si une option est spécifiée par l'utilisateur pour un algorithme qui ne la
-supporte pas, cette option est simplement laissée inutilisée et ne bloque pas le
-traitement. La signification des acronymes ou des noms particuliers peut être
-trouvée dans l':ref:`genindex` ou dans le :ref:`section_glossary`. De plus, pour
-chaque algorithme, les commandes/mots-clés sont donnés, décrits dans `Liste des
-commandes et mots-clés pour un cas de vérification ADAO`_.
-
-**"AdjointTest"**
-
- *Commandes obligatoires*
- *"CheckingPoint",
- "ObservationOperator"*
-
- AmplitudeOfInitialDirection
- Cette clé indique la mise à l'échelle de la perturbation initiale construite
- comme un vecteur utilisé pour la dérivée directionnelle autour du point
- nominal de vérification. La valeur par défaut est de 1, ce qui signifie pas
- de mise à l'échelle.
-
- EpsilonMinimumExponent
- Cette clé indique la valeur de l'exposant minimal du coefficient en
- puissance de 10 qui doit être utilisé pour faire décroître le multiplicateur
- de l'incrément. La valeur par défaut est de -8, et elle doit être entre 0 et
- -20. Par exemple, la valeur par défaut conduit à calculer le résidu de la
- formule avec un incrément fixe multiplié par 1.e0 jusqu'à 1.e-8.
-
- InitialDirection
- Cette clé indique la direction vectorielle utilisée pour la dérivée
- directionnelle autour du point nominal de vérification. Cela doit être un
- vecteur. Si elle n'est pas spécifiée, la direction par défaut est une
- perturbation par défaut autour de zéro de la même taille vectorielle que le
- point de vérification.
-
- SetSeed
- Cette clé permet de donner un nombre entier pour fixer la graine du
- générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
- par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
- utilise ainsi l'initialisation par défaut de l'ordinateur.
-
-**"FunctionTest"**
-
- *Commandes obligatoires*
- *"CheckingPoint",
- "ObservationOperator"*
-
- NumberOfPrintedDigits
- Cette clé indique le nombre de décimales de précision pour les affichages de
- valeurs réelles. La valeur par défaut est de 5, avec un minimum de 0.
-
- NumberOfRepetition
- Cette clé indique le nombre de fois où répéter l'évaluation de la fonction.
- La valeur vaut 1.
-
- SetDebug
- Cette clé requiert l'activation, ou pas, du mode de débogage durant
- l'évaluation de la fonction. La valeur par défaut est "True", les choix sont
- "True" ou "False".
-
-**"GradientTest"**
-
- *Commandes obligatoires*
- *"CheckingPoint",
- "ObservationOperator"*
-
- AmplitudeOfInitialDirection
- Cette clé indique la mise à l'échelle de la perturbation initiale construite
- comme un vecteur utilisé pour la dérivée directionnelle autour du point
- nominal de vérification. La valeur par défaut est de 1, ce qui signifie pas
- de mise à l'échelle.
-
- EpsilonMinimumExponent
- Cette clé indique la valeur de l'exposant minimal du coefficient en
- puissance de 10 qui doit être utilisé pour faire décroître le multiplicateur
- de l'incrément. La valeur par défaut est de -8, et elle doit être entre 0 et
- -20. Par exemple, la valeur par défaut conduit à calculer le résidu de la
- formule avec un incrément fixe multiplié par 1.e0 jusqu'à 1.e-8.
-
- InitialDirection
- Cette clé indique la direction vectorielle utilisée pour la dérivée
- directionnelle autour du point nominal de vérification. Cela doit être un
- vecteur. Si elle n'est pas spécifiée, la direction par défaut est une
- perturbation par défaut autour de zéro de la même taille vectorielle que le
- point de vérification.
-
- ResiduFormula
- Cette clé indique la formule de résidu qui doit être utilisée pour le test.
- Le choix par défaut est "Taylor", et les choix possibles sont "Taylor"
- (résidu du développement de Taylor de l'opérateur, qui doit décroître comme
- le carré de la perturbation) et "Norm" (résidu obtenu en prenant la norme du
- développement de Taylor à l'ordre 0, qui approxime le gradient, et qui doit
- rester constant).
-
- SetSeed
- Cette clé permet de donner un nombre entier pour fixer la graine du
- générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
- par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
- utilise ainsi l'initialisation par défaut de l'ordinateur.
-
-**"LinearityTest"**
-
- *Commandes obligatoires*
- *"CheckingPoint",
- "ObservationOperator"*
-
- AmplitudeOfInitialDirection
- Cette clé indique la mise à l'échelle de la perturbation initiale construite
- comme un vecteur utilisé pour la dérivée directionnelle autour du point
- nominal de vérification. La valeur par défaut est de 1, ce qui signifie pas
- de mise à l'échelle.
-
- EpsilonMinimumExponent
- Cette clé indique la valeur de l'exposant minimal du coefficient en
- puissance de 10 qui doit être utilisé pour faire décroître le multiplicateur
- de l'incrément. La valeur par défaut est de -8, et elle doit être entre 0 et
- -20. Par exemple, la valeur par défaut conduit à calculer le résidu de la
- formule avec un incrément fixe multiplié par 1.e0 jusqu'à 1.e-8.
-
- InitialDirection
- Cette clé indique la direction vectorielle utilisée pour la dérivée
- directionnelle autour du point nominal de vérification. Cela doit être un
- vecteur. Si elle n'est pas spécifiée, la direction par défaut est une
- perturbation par défaut autour de zero de la même taille vectorielle que le
- point de vérification.
-
- ResiduFormula
- Cette clé indique la formule de résidu qui doit être utilisée pour le test.
- Le choix par défaut est "CenteredDL", et les choix possibles sont
- "CenteredDL" (résidu de la différence entre la fonction au point nominal et
- ses valeurs avec des incréments positif et négatif, qui doit rester très
- faible), "Taylor" (résidu du développement de Taylor de l'opérateur
- normalisé par sa valeur nominal, qui doit rester très faible),
- "NominalTaylor" (résidu de l'approximation à l'ordre 1 de l'opérateur,
- normalisé au point nominal, qui doit rester proche de 1), et
- "NominalTaylorRMS" (résidu de l'approximation à l'ordre 1 de l'opérateur,
- normalisé par l'écart quadratique moyen (RMS) au point nominal, qui doit
- rester proche de 0).
-
- SetSeed
- Cette clé permet de donner un nombre entier pour fixer la graine du
- générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
- par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
- utilise ainsi l'initialisation par défaut de l'ordinateur.
-
-**"ObserverTest"**
-
- *Commandes obligatoires*
- *"Observers"*
-
- *Astuce pour cette commande :*
- Comme les commandes *"CheckingPoint"* et *"ObservationOperator"* sont
- requises pour TOUS les algorithmes de vérification dans l'interface, vous
- devez fournir une valeur, malgré le fait que ces commandes ne sont pas
- requises pour *"ObserverTest"*, et ne seront pas utilisées. La manière la
- plus simple est de donner "1" comme un STRING pour les deux,
- l'*"ObservationOperator"* devant être de type *Matrix*.
-
-**"TangentTest"**
-
- *Commandes obligatoires*
- *"CheckingPoint",
- "ObservationOperator"*
-
- AmplitudeOfInitialDirection
- Cette clé indique la mise à l'échelle de la perturbation initiale construite
- comme un vecteur utilisé pour la dérivée directionnelle autour du point
- nominal de vérification. La valeur par défaut est de 1, ce qui signifie pas
- de mise à l'échelle.
-
- EpsilonMinimumExponent
- Cette clé indique la valeur de l'exposant minimal du coefficient en
- puissance de 10 qui doit être utilisé pour faire décroître le multiplicateur
- de l'incrément. La valeur par défaut est de -8, et elle doit être entre 0 et
- -20. Par exemple, la valeur par défaut conduit à calculer le résidu de la
- formule avec un incrément fixe multiplié par 1.e0 jusqu'à 1.e-8.
-
- InitialDirection
- Cette clé indique la direction vectorielle utilisée pour la dérivée
- directionnelle autour du point nominal de vérification. Cela doit être un
- vecteur. Si elle n'est pas spécifiée, la direction par défaut est une
- perturbation par défaut autour de zero de la même taille vectorielle que le
- point de vérification.
-
- SetSeed
- Cette clé permet de donner un nombre entier pour fixer la graine du
- générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
- par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
- utilise ainsi l'initialisation par défaut de l'ordinateur.
-
-Exigences pour les fonctions décrivant un opérateur
----------------------------------------------------
-
-Les opérateurs d'observation et d'évolution sont nécessaires pour mettre en
-oeuvre les procédures d'assimilation de données ou d'optimisation. Ils
-comprennent la simulation physique par des calculs numériques, mais aussi le
-filtrage et de restriction pour comparer la simulation à l'observation.
-L'opérateur d'évolution est ici considéré dans sa forme incrémentale, qui
-représente la transition entre deux états successifs, et il est alors similaire
-à l'opérateur d'observation.
-
-Schématiquement, un opérateur doit donner une solution étant donné les
-paramètres d'entrée. Une partie des paramètres d'entrée peut être modifiée au
-cours de la procédure d'optimisation. Ainsi, la représentation mathématique d'un
-tel processus est une fonction. Il a été brièvement décrit dans la section
-:ref:`section_theory` et il est généralisée ici par la relation:
-
-.. math:: \mathbf{y} = O( \mathbf{x} )
-
-entre les pseudo-observations :math:`\mathbf{y}` et les paramètres
-:math:`\mathbf{x}` en utilisant l'opérateur d'observation ou d'évolution
-:math:`O`. La même représentation fonctionnelle peut être utilisée pour le
-modèle linéaire tangent :math:`\mathbf{O}` de :math:`O` et son adjoint
-:math:`\mathbf{O}^*`, qui sont aussi requis par certains algorithmes
-d'assimilation de données ou d'optimisation.
-
-En entrée et en sortie de ces opérateurs, les variables :math:`\mathbf{x}` et
-:math:`\mathbf{y}` ou leurs incréments sont mathématiquement des vecteurs, et
-ils sont donc passés comme des vecteurs non-orientés (de type liste ou vecteur
-Numpy) ou orientés (de type matrice Numpy).
-
-Ensuite, **pour décrire complètement un opérateur, l'utilisateur n'a qu'à
-fournir une fonction qui réalise uniquement l'opération fonctionnelle de manière
-complète**.
-
-Cette fonction est généralement donnée comme un script qui peut être exécuté
-dans un noeud YACS. Ce script peut aussi, sans différences, lancer des codes
-externes ou utiliser des appels et des méthodes internes SALOME. Si l'algorithme
-nécessite les 3 aspects de l'opérateur (forme directe, forme tangente et forme
-adjointe), l'utilisateur doit donner les 3 fonctions ou les approximer.
-
-Il existe 3 méthodes effectives pour l'utilisateur de fournir une représentation
-fonctionnelle de l'opérateur. Ces méthodes sont choisies dans le champ "*FROM*"
-de chaque opérateur ayant une valeur "*Function*" comme "*INPUT_TYPE*", comme le
-montre la figure suivante:
-
- .. eficas_operator_function:
- .. image:: images/eficas_operator_function.png
- :align: center
- :width: 100%
- .. centered::
- **Choisir une représentation fonctionnelle de l'opérateur**
-
-Première forme fonctionnelle : utiliser "*ScriptWithOneFunction*"
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScriptWithOneFunction
-.. index:: single: DirectOperator
-.. index:: single: DifferentialIncrement
-.. index:: single: CenteredFiniteDifference
-
-La première consiste à ne fournir qu'une seule fonction potentiellement non
-linéaire, et d'approximer les opérateurs tangent et adjoint. Ceci est fait en
-utilisant le mot-clé "*ScriptWithOneFunction*" pour la description de
-l'opérateur choisi dans l'interface graphique ADAO. L'utilisateur doit fournir
-la fonction dans un script, avec un nom obligatoire "*DirectOperator*". Par
-exemple, le script peut suivre le modèle suivant::
-
- def DirectOperator( X ):
- """ Opérateur direct de simulation non-linéaire """
- ...
- ...
- ...
- return Y=O(X)
-
-Dans ce cas, l'utilisateur doit aussi fournir une valeur pour l'incrément
-différentiel (ou conserver la valeur par défaut), en utilisant dans l'interface
-graphique (GUI) le mot-clé "*DifferentialIncrement*", qui a une valeur par
-défaut de 1%. Ce coefficient est utilisé dans l'approximation différences finies
-pour construire les opérateurs tangent et adjoint. L'ordre de l'approximation
-différences finies peut aussi être choisi à travers l'interface, en utilisant le
-mot-clé "*CenteredFiniteDifference*", avec 0 pour un schéma non centré du
-premier ordre (qui est la valeur par défaut), et avec 1 pour un schéma centré du
-second ordre (qui coûte numériquement deux fois plus cher que le premier ordre).
-
-Cette première forme de définition de l'opérateur permet aisément de tester la
-forme fonctionnelle avant son usage dans un cas ADAO, réduisant notablement la
-complexité de l'implémentation de l'opérateur.
-
-**Avertissement important :** le nom "*DirectOperator*" est obligatoire, et le
-type de l'argument X peut être une liste, un vecteur ou une matrice Numpy.
-L'utilisateur doit traiter ces cas dans sa fonction.
-
-Seconde forme fonctionnelle : utiliser "*ScriptWithFunctions*"
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScriptWithFunctions
-.. index:: single: DirectOperator
-.. index:: single: TangentOperator
-.. index:: single: AdjointOperator
-
-**En général, il est recommandé d'utiliser la première forme fonctionnelle
-plutôt que la seconde. Un petit accroissement de performances n'est pas une
-bonne raison pour utiliser l'implémentation détaillée de cette seconde forme
-fonctionnelle.**
-
-La seconde consiste à fournir directement les trois opérateurs liés :math:`O`,
-:math:`\mathbf{O}` et :math:`\mathbf{O}^*`. C'est effectué en utilisant le
-mot-clé "*ScriptWithFunctions*" pour la description de l'opérateur choisi dans
-l'interface graphique (GUI) d'ADAO. L'utilisateur doit fournir trois fonctions
-dans un script, avec trois noms obligatoires "*DirectOperator*",
-"*TangentOperator*" et "*AdjointOperator*". Par exemple, le script peut suivre
-le squelette suivant::
-
- def DirectOperator( X ):
- """ Opérateur direct de simulation non-linéaire """
- ...
- ...
- ...
- return quelque chose comme Y
-
- def TangentOperator( (X, dX) ):
- """ Opérateur linéaire tangent, autour de X, appliqué à dX """
- ...
- ...
- ...
- return quelque chose comme Y
-
- def AdjointOperator( (X, Y) ):
- """ Opérateur adjoint, autour de X, appliqué à Y """
- ...
- ...
- ...
- return quelque chose comme X
-
-Un nouvelle fois, cette seconde définition d'opérateur permet aisément de tester
-les formes fonctionnelles avant de les utiliser dans le cas ADAO, réduisant la
-complexité de l'implémentation de l'opérateur.
-
-Pour certains algorithmes, il faut que les fonctions tangente et adjointe puisse
-renvoyer les matrices équivalentes à l'opérateur linéaire. Dans ce cas, lorsque,
-respectivement, les arguments ``dX`` ou ``Y`` valent ``None``, l'utilisateur
-doit renvoyer la matrice associée.
-
-**Avertissement important :** les noms "*DirectOperator*", "*TangentOperator*"
-et "*AdjointOperator*" sont obligatoires, et le type des arguments ``X``,
-``Y``, ``dX`` peut être une liste, un vecteur ou une matrice Numpy.
-L'utilisateur doit traiter ces cas dans ses fonctions.
-
-Troisième forme fonctionnelle : utiliser "*ScriptWithSwitch*"
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: ScriptWithSwitch
-.. index:: single: DirectOperator
-.. index:: single: TangentOperator
-.. index:: single: AdjointOperator
-
-**Il est recommandé de ne pas utiliser cette troisième forme fonctionnelle sans
-une solide raison numérique ou physique. Un accroissement de performances n'est
-pas une bonne raison pour utiliser la complexité de cette troisième forme
-fonctionnelle. Seule une impossibilité à utiliser les première ou seconde formes
-justifie l'usage de la troisième.**
-
-La troisième forme donne de plus grandes possibilités de contrôle de l'exécution
-des trois fonctions représentant l'opérateur, permettant un usage et un contrôle
-avancés sur chaque exécution du code de simulation. C'est réalisable en
-utilisant le mot-clé "*ScriptWithSwitch*" pour la description de l'opérateur à
-travers l'interface graphique (GUI) d'ADAO. L'utilisateur doit fournir un script
-unique aiguillant, selon un contrôle, l'exécution des formes directe, tangente
-et adjointe du code de simulation. L'utilisateur peut alors, par exemple,
-utiliser des approximations pour les codes tangent et adjoint, ou introduire une
-plus grande complexité du traitement des arguments des fonctions. Mais cette
-démarche sera plus difficile à implémenter et à déboguer.
-
-Toutefois, si vous souhaitez utiliser cette troisième forme, on recommande de se
-baser sur le modèle suivant pour le script d'aiguillage. Il nécessite un fichier
-script ou un code externe nommé ici "*Physical_simulation_functions.py*",
-contenant trois fonctions nommées "*DirectOperator*", "*TangentOperator*" and
-"*AdjointOperator*" comme précédemment. Voici le squelette d'aiguillage::
-
- import Physical_simulation_functions
- import numpy, logging
- #
- method = ""
- for param in computation["specificParameters"]:
- if param["name"] == "method":
- method = param["value"]
- if method not in ["Direct", "Tangent", "Adjoint"]:
- raise ValueError("No valid computation method is given")
- logging.info("Found method is \'%s\'"%method)
- #
- logging.info("Loading operator functions")
- Function = Physical_simulation_functions.DirectOperator
- Tangent = Physical_simulation_functions.TangentOperator
- Adjoint = Physical_simulation_functions.AdjointOperator
- #
- logging.info("Executing the possible computations")
- data = []
- if method == "Direct":
- logging.info("Direct computation")
- Xcurrent = computation["inputValues"][0][0][0]
- data = Function(numpy.matrix( Xcurrent ).T)
- if method == "Tangent":
- logging.info("Tangent computation")
- Xcurrent = computation["inputValues"][0][0][0]
- dXcurrent = computation["inputValues"][0][0][1]
- data = Tangent(numpy.matrix(Xcurrent).T, numpy.matrix(dXcurrent).T)
- if method == "Adjoint":
- logging.info("Adjoint computation")
- Xcurrent = computation["inputValues"][0][0][0]
- Ycurrent = computation["inputValues"][0][0][1]
- data = Adjoint((numpy.matrix(Xcurrent).T, numpy.matrix(Ycurrent).T))
- #
- logging.info("Formatting the output")
- it = numpy.ravel(data)
- outputValues = [[[[]]]]
- for val in it:
- outputValues[0][0][0].append(val)
- #
- result = {}
- result["outputValues"] = outputValues
- result["specificOutputInfos"] = []
- result["returnCode"] = 0
- result["errorMessage"] = ""
-
-Toutes les modifications envisageables peuvent être faites à partir de cette
-hypothèse de squelette.
-
-Cas spécial d'un opérateur d'évolution avec contrôle
-++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-Dans certains cas, l'opérateur d'évolution ou d'observation doit être contrôlé
-par un contrôle d'entrée externe, qui est donné *a priori*. Dans ce cas, la
-forme générique du modèle incrémental est légèrement modifié comme suit:
-
-.. math:: \mathbf{y} = O( \mathbf{x}, \mathbf{u})
-
-où :math:`\mathbf{u}` est le contrôle sur l'incrément d'état. Dans ce cas,
-l'opérateur direct doit être appliqué à une paire de variables :math:`(X,U)`.
-Schématiquement, l'opérateur doit être constuit comme suit::
-
- def DirectOperator( (X, U) ):
- """ Opérateur direct de simulation non-linéaire """
- ...
- ...
- ...
- return quelque chose comme X(n+1) (évolution) ou Y(n+1) (observation)
-
-Les opérateurs tangent et adjoint ont la même signature que précédemment, en
-notant que les dérivées doivent être faites seulement partiellement par rapport
-à :math:`\mathbf{x}`. Dans un tel cas de contrôle explicite, seule la deuxième
-forme fonctionnelle (en utilisant "*ScriptWithFunctions*") et la troisième forme
-fonctionnelle (en utilisant "*ScriptWithSwitch*") peuvent être utilisées.
-
-Exigences pour décrire les matrices de covariance
--------------------------------------------------
-
-De multiples matrices de covariance sont nécessaires pour mettre en oeuvre des
-procédures d'assimilation de données ou d'optimisation. Les principales sont la
-matrice de covariance des erreurs d'ébauche, notée :math:`\mathbf{B}`, et la
-matrice de covariance des erreurs d'observation, notée :math:`\mathbf{R}`. Une
-telle matrice doit être une matrice carré symétrique semi-définie positive.
-
-Il y a 3 méthodes pratiques pour l'utilisateur pour fournir une matrice de
-covariance. Ces méthodes sont choisies à l'aide du mot-clé "*INPUT_TYPE*" de
-chaque matrice de covariance, comme montré dans la figure qui suit :
-
- .. eficas_covariance_matrix:
- .. image:: images/eficas_covariance_matrix.png
- :align: center
- :width: 100%
- .. centered::
- **Choisir la représentation d'une matrice de covariance**
-
-Première forme matricielle : utiliser la représentation "*Matrix*"
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-.. index:: single: Matrix
-.. index:: single: BackgroundError
-.. index:: single: EvolutionError
-.. index:: single: ObservationError
-
-La première forme est le défaut et la plus générale. La matrice de covariance
-:math:`\mathbf{M}` doit être entièrement spécifiée. Même si la matrice est
-symétrique par nature, la totalité de la matrice :math:`\mathbf{M}` doit être
-donnée.
-
-.. math:: \mathbf{M} = \begin{pmatrix}
- m_{11} & m_{12} & \cdots & m_{1n} \\
- m_{21} & m_{22} & \cdots & m_{2n} \\
- \vdots & \vdots & \vdots & \vdots \\
- m_{n1} & \cdots & m_{nn-1} & m_{nn}
- \end{pmatrix}
+.. _section_reference:
+================================================================================
+**[DocR]** Description de référence des commandes et mots-clés ADAO
+================================================================================
-Cela peut être réalisé soit par un vecteur ou une matrice Numpy, soit par une
-liste de listes de valeurs (c'est-à-dire une liste de lignes). Par exemple, une
-matrice simple diagonale unitaire de covariances des erreurs d'ébauche
-:math:`\mathbf{B}` peut être décrite dans un fichier de script Python par::
+Les sections suivantes présentent la description de référence des commandes et
+mots-clés ADAO disponibles à travers l'interface textuelle (TUI), graphique
+(GUI) ou à travers des scripts. Les deux premières sections communes présentent
+les :ref:`section_reference_entry` et les
+:ref:`section_reference_special_entry`. Ensuite, on décrit successivement les
+:ref:`section_reference_assimilation` et les :ref:`section_reference_checking`.
- BackgroundError = [[1, 0 ... 0], [0, 1 ... 0] ... [0, 0 ... 1]]
+Chaque commande ou mot-clé à définir par la TUI ou la GUI a des propriétés
+particulières. La première propriété est d'être *requise*, *optionnelle* ou
+simplement utile, décrivant un type d'entrée. La seconde propriété est d'être
+une variable "ouverte" avec un type fixé mais avec n'importe quelle valeur
+autorisée par le type, ou une variable "fermée", limitée à des valeurs
+spécifiées. L'éditeur graphique GUI intégré disposant de capacités intrinsèques
+de validation, les propriétés des commandes ou mots-clés données à l'aide de
+l'interface graphique sont automatiquement correctes.
-ou::
+.. _section_reference_entry:
- BackgroundError = numpy.eye(...)
+========================================================================================
+**[DocR]** Entrées et sorties générales
+========================================================================================
-Seconde forme matricielle : utiliser la représentation "*ScalarSparseMatrix*"
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+Cette section décrit de manière générale les différentes possibilités de types
+d'entrées et de variables de sortie que l'on peut utiliser. Les notations
+mathématiques utilisées sont expliquées dans la section :ref:`section_theory`.
-.. index:: single: ScalarSparseMatrix
-.. index:: single: BackgroundError
-.. index:: single: EvolutionError
-.. index:: single: ObservationError
+.. toctree::
+ :maxdepth: 1
-Au contraire, la seconde forme matricielle est une méthode très simplifiée pour
-définir une matrice. La matrice de covariance :math:`\mathbf{M}` est supposée
-être un multiple positif de la matrice identité. Cette matrice peut alors être
-spécifiée de manière unique par le multiplicateur :math:`m`:
+ ref_entry_types
+ ref_options_AlgorithmParameters
+ ref_output_variables
-.. math:: \mathbf{M} = m \times \begin{pmatrix}
- 1 & 0 & \cdots & 0 \\
- 0 & 1 & \cdots & 0 \\
- \vdots & \vdots & \vdots & \vdots \\
- 0 & \cdots & 0 & 1
- \end{pmatrix}
+.. _section_reference_special_entry:
-Le multiplicateur :math:`m` doit être un nombre réel ou entier positif (s'il
-est négatif, ce qui est impossible car une matrice de covariance est positive,
-il est convertit en nombre positif). Par exemple, une simple matrice diagonale
-unitaire de covariances des erreurs d'ébauche :math:`\mathbf{B}` peut être
-décrite dans un fichier de script Python par::
+========================================================================================
+**[DocR]** Entrées spéciales : fonctions, matrices, "*observer*"
+========================================================================================
- BackgroundError = 1.
+Cette section décrit les entrées spéciales, comme les formes fonctionnelles ou
+matricielles, que l'on peut utiliser. Les notations mathématiques utilisées
+sont expliquées dans la section :ref:`section_theory`.
-ou, mieux, par un "*String*" directement dans le cas ADAO.
+.. toctree::
+ :maxdepth: 1
-Troisième forme matricielle : utiliser la représentation "*DiagonalSparseMatrix*"
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ ref_operator_requirements
+ ref_covariance_requirements
+ ref_observers_requirements
-.. index:: single: DiagonalSparseMatrix
-.. index:: single: BackgroundError
-.. index:: single: EvolutionError
-.. index:: single: ObservationError
+.. _section_reference_assimilation:
-La troisième forme est aussi une méthode simplifiée pour fournir la matrice,
-mais un peu plus puissante que la seconde. La matrice de covariance
-:math:`\mathbf{M}` est toujours considérée comme diagonale, mais l'utilisateur
-doit spécifier toutes les valeurs positives situées sur la diagonale. La matrice
-peut alors être définie uniquement par un vecteur :math:`\mathbf{V}` qui se
-retrouve ensuite sur la diagonale:
+============================================================================================
+**[DocR]** Cas d'assimilation de données ou d'optimisation
+============================================================================================
-.. math:: \mathbf{M} = \begin{pmatrix}
- v_{1} & 0 & \cdots & 0 \\
- 0 & v_{2} & \cdots & 0 \\
- \vdots & \vdots & \vdots & \vdots \\
- 0 & \cdots & 0 & v_{n}
- \end{pmatrix}
+Cette section décrit les choix algorithmiques pour utiliser des méthodes
+d'assimilation de données, des méthodes d'optimisation ou des méthodes avec
+réduction, disponibles dans ADAO, détaillant leurs caractéristiques
+d'utilisation et leurs options.
-Cela peut être réalisé soit par vecteur ou une matrice Numpy, soit par
-une liste, soit par une liste de listes de valeurs positives (dans tous les cas,
-si certaines valeurs sont négatives, elles sont converties en valeurs
-positives). Par exemple, un matrice simple diagonale unitaire des covariances
-des erreurs d'ébauche :math:`\mathbf{B}` peut être décrite dans un fichier de
-script Python par::
+Des exemples sur l'usage de ces commandes sont disponibles dans la section
+:ref:`section_tutorials_in_salome`, dans la section
+:ref:`section_tutorials_in_python` et dans les fichiers d'exemple installés
+avec ADAO. Les notations mathématiques utilisées sont expliquées dans la
+section :ref:`section_theory`.
+
+.. toctree::
+ :maxdepth: 1
+
+ ref_algorithm_3DVAR
+ ref_algorithm_4DVAR
+ ref_algorithm_Blue
+ ref_algorithm_DerivativeFreeOptimization
+ ref_algorithm_DifferentialEvolution
+ ref_algorithm_EnsembleBlue
+ ref_algorithm_EnsembleKalmanFilter
+ ref_algorithm_ExtendedBlue
+ ref_algorithm_ExtendedKalmanFilter
+ ref_algorithm_KalmanFilter
+ ref_algorithm_LinearLeastSquares
+ ref_algorithm_NonLinearLeastSquares
+ ref_algorithm_ParticleSwarmOptimization
+ ref_algorithm_QuantileRegression
+ ref_algorithm_TabuSearch
+ ref_algorithm_UnscentedKalmanFilter
+ ref_assimilation_keywords
+
+.. _section_reference_checking:
- BackgroundError = [1, 1 ... 1]
+================================================================================
+**[DocR]** Cas de vérification
+================================================================================
-ou::
+Cette section décrit les algorithmes de vérification disponibles dans ADAO,
+détaillant leurs caractéristiques d'utilisation et leurs options.
- BackgroundError = numpy.ones(...)
+Des exemples sur l'usage de ces commandes sont disponibles dans la section
+:ref:`section_tutorials_in_salome`, dans la section
+:ref:`section_tutorials_in_python` et dans les fichiers d'exemple installés
+avec ADAO. Les notations mathématiques utilisées sont expliquées dans la
+section :ref:`section_theory`.
+
+.. toctree::
+ :maxdepth: 1
+
+ ref_algorithm_AdjointTest
+ ref_algorithm_FunctionTest
+ ref_algorithm_GradientTest
+ ref_algorithm_InputValuesTest
+ ref_algorithm_LinearityTest
+ ref_algorithm_LocalSensitivityTest
+ ref_algorithm_ObserverTest
+ ref_algorithm_ParallelFunctionTest
+ ref_algorithm_SamplingTest
+ ref_algorithm_TangentTest
+ ref_checking_keywords