14.13. Algorithme de vérification « SamplingTest »¶
14.13.1. Description¶
Cet algorithme permet d’établir la collection des valeurs d’une fonctionnelle
d’erreur
quelconque de type
,
ou
, avec ou sans pondérations, comme décrit dans la section
pour Approfondir l’estimation d’état par des méthodes d’optimisation. Chaque calcul de
est conduit
à l’aide de l’opérateur d’observation
et des observations
pour un état
. Les états
proviennent d’un échantillon d’états défini a priori. La
fonctionnelle d’erreur par défaut est celle de moindres carrés pondérés
augmentés, classiquement utilisée en assimilation de données.
Ce test est utile pour analyser explicitement la sensibilité de la
fonctionnelle
aux variations de l’état
.
L’échantillonnage des états
peut être fourni explicitement
ou sous la forme d’hypercubes, explicites ou échantillonnés selon des
distributions courantes, ou à l’aide d’un échantillonnage par hypercube latin
(LHS) ou par séquence de Sobol. Les calculs sont optimisés selon les ressources
informatiques disponibles et les options demandées par l’utilisateur. On pourra
se reporter aux Conditions requises pour décrire un échantillonnage d’états pour une illustration
de l’échantillonnage. Attention à la taille de l’hypercube (et donc au nombre
de calculs) qu’il est possible d’atteindre, elle peut rapidement devenir
importante. Lorsqu’un état n’est pas observable, une valeur « NaN » est
retournée.
Il est aussi possible de fournir un ensemble de simulations
déjà établies par ailleurs (donc sans besoin explicite d’un opérateur
), qui sont implicitement associées à un ensemble
d’échantillons d’états
. Dans ce cas où l’ensemble de
simulations est fourni, il est impératif de fournir aussi l’ensemble des états
par un échantillonnage explicite, dont l’ordre des états
correspond à l’ordre des simulations
.
Pour accéder aux informations calculées, les résultats de l’échantillonnage ou des simulations doivent être demandés explicitement pour éviter les difficultés de stockage (en l’absence de résultats demandés, rien n’est disponible). On utilise pour cela, sur la variable désirée, la sauvegarde finale à l’aide du mot-clé « UserPostAnalysis » ou le traitement en cours de calcul à l’aide des « observer » adaptés.
Remarque : dans les cas où l’échantillonnage est généré, il peut être utile
d’obtenir explicitement la collection des états
selon la
définition a priori sans nécessairement effectuer de long calculs pour la
fonctionnelle
. Pour cela, il suffit d’utiliser cet algorithme avec
des calculs simplifiés. Par exemple, on peut définir un opérateur d’observation
matriciel égal à l’identité (matrice carrée de la taille d’un état), une
ébauche et une observation égales, valant 1 (vecteurs de la taille de l’état).
Ensuite, on établit le cas ADAO avec cet algorithme pour récupérer l’ensemble
des états échantillonnés à l’aide de la variable habituelle de
« CurrentState ».
14.13.2. Quelques propriétés notables des méthodes implémentées¶
Pour compléter la description on synthétise ici quelques propriétés notables, des méthodes de l’algorithme ou de leurs implémentations. Ces propriétés peuvent avoir une influence sur la manière de l’utiliser ou sur ses performances de calcul. Pour de plus amples renseignements, on se reportera aux références plus complètes indiquées à la fin du descriptif de cet algorithme.
Les méthodes proposées par cet algorithme ne requièrent pas de dérivation de la fonction objectif ou de l’un des opérateurs, permettant d’éviter ce temps de calcul supplémentaire dans le cas où les dérivées sont calculées numériquement par de multiples évaluations.
Les méthodes proposées par cet algorithme présentent un parallélisme interne, et peuvent donc profiter de ressources informatiques de répartition de calculs. L’interaction potentielle, entre le parallélisme interne des méthodes, et le parallélisme éventuellement présent dans les opérateurs d’observation ou d’évolution intégrant les codes de l’utilisateur, doit donc être soigneusement réglée.
14.13.3. Commandes requises et optionnelles¶
Les commandes générales requises, disponibles en édition dans l’interface graphique ou textuelle, sont les suivantes :
- CheckingPoint
Vecteur. La variable désigne le vecteur utilisé comme l’état autour duquel réaliser le test requis, noté
, similaire à l’ébauche
. Sa valeur est définie comme un objet de type « Vector »
ou « VectorSerie ». Sa disponibilité en sortie est conditionnée par le
booléen « Stored » associé en entrée.
- BackgroundError
Matrice. La variable désigne la matrice de covariance des erreurs d’ébauche, usuellement notée
. Sa valeur est définie comme
un objet de type « Matrix », de type « ScalarSparseMatrix », ou de type
« DiagonalSparseMatrix », comme décrit en détail dans la section
Conditions requises pour décrire des matrices de covariance. Sa disponibilité en sortie est
conditionnée par le booléen « Stored » associé en entrée.
- Observation
Liste de vecteurs. La variable désigne le vecteur d’observation utilisé en assimilation de données ou en optimisation, et usuellement noté
. Sa valeur est définie comme un objet de type « Vector »
si c’est une unique observation (temporelle ou pas) ou « VectorSerie » si
c’est une succession d’observations. Sa disponibilité en sortie est
conditionnée par le booléen « Stored » associé en entrée.
- ObservationError
Matrice. La variable désigne la matrice de covariance des erreurs a priori d’ébauche, usuellement notée
. Cette matrice est
définie comme un objet de type « Matrix », de type « ScalarSparseMatrix », ou
de type « DiagonalSparseMatrix », comme décrit en détail dans la section
Conditions requises pour décrire des matrices de covariance. Sa disponibilité en sortie est
conditionnée par le booléen « Stored » associé en entrée.
- ObservationOperator
Opérateur. La variable désigne l’opérateur d’observation, usuellement noté
, qui transforme les paramètres d’entrée
en
résultats
qui sont à comparer aux observations
. Sa valeur est définie comme un objet de type
« Function » ou de type « Matrix ». Dans le cas du type « Function »,
différentes formes fonctionnelles peuvent être utilisées, comme décrit dans
la section Conditions requises pour les fonctions décrivant un opérateur. Si un contrôle
est inclus dans le modèle d’observation, l’opérateur doit être appliqué à une
paire
.
Les commandes optionnelles générales, disponibles en édition dans l’interface graphique ou textuelle, sont indiquées dans la Liste des commandes et mots-clés pour un cas de vérification. De plus, les paramètres de la commande « AlgorithmParameters » permettent d’indiquer les options particulières, décrites ci-après, de l’algorithme. On se reportera à la Description des options d’un algorithme par « AlgorithmParameters » pour le bon usage de cette commande.
Les options sont les suivantes :
- EnsembleOfSnapshots
Liste de vecteurs ou matrice. Cette clé contient une collection ordonnée de vecteurs d’état physique
, nommés « snapshots » en
terminologie de bases réduites. A chaque index de pas, il y a 1 état par
colonne si cette liste est sous forme matricielle, ou 1 état par élément si
c’est effectivement une liste. Important : la numérotation du support ou des
points, sur lequel ou auxquels sont fournis une valeur d’état dans chaque
vecteur, est implicitement celle de l’ordre naturel de numérotation du
vecteur d’état, de 0 à la « taille moins 1 » de ce vecteur.Exemple :
{"EnsembleOfSnapshots":[y1, y2, y3...]}
- QualityCriterion
Nom prédéfini. 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. Le critère possible est dans la liste suivante, dans laquelle les noms équivalents sont indiqués par un signe « <=> » : [« AugmentedWeightedLeastSquares » <=> « AWLS » <=> « DA », « WeightedLeastSquares » <=> « WLS », « LeastSquares » <=> « LS » <=> « L2 », « AbsoluteValue » <=> « L1 », « MaximumError » <=> « ME » <=> « Linf »]. On pourra se reporter à la section pour Approfondir l’estimation d’état par des méthodes d’optimisation afin de disposer de la définition détaillée de ces critères de qualité.
Exemple :
{"QualityCriterion":"DA"}
- SampleAsExplicitHyperCube
Liste de liste de valeurs réelles. Cette clé décrit les points de calcul sous la forme d’un hyper-cube, dont on donne la liste des échantillonnages explicites de chaque variable comme une liste. C’est donc une liste de listes, chacune étant de taille potentiellement différente. Par nature, les points sont inclus dans le domaine défini par les bornes des listes explicites de chaque variable.
Exemple :
{"SampleAsExplicitHyperCube":[[0.,0.25,0.5,0.75,1.], [-2,2,1]]}pour un espace d’état de dimension 2.
- SampleAsIndependentRandomVariables
Liste de triplets [Nom, Paramètres, Nombre]. Cette clé décrit les points de calcul sous la forme d’un hyper-cube, dont les points sur chaque axe proviennent de l’échantillonnage aléatoire indépendant de la variable d’axe, selon la spécification de la distribution, de ses paramètres et du nombre de points de l’échantillon, sous la forme d’une liste [Nom, Paramètres, Nombre] pour chaque axe. Contrairement à l’échantillonnage décrit par le mot-clé « SampleAsIndependentRandomVectors » , les points sont explicitement répartis sur un hypercube régulier. Les noms de distributions possibles sont “normal” de paramètres (mean,std), “lognormal” de paramètres (mean,sigma), “uniform” de paramètres (low,high), “loguniform” de paramètres (low,high), ou “weibull” de paramètre (shape). C’est donc une liste de la même taille que celle de l’état. Par nature, les points sont inclus dans le domaine non borné ou borné selon les caractéristiques des distributions choisies par variable. Les distributions peuvent être différentes pour chaque axe.
Exemple :
{"SampleAsIndependentRandomVariables":[['normal',[0.,1.],3], ['uniform',[-2,2],4]]}pour un espace d’état de dimension 2.
- SampleAsIndependentRandomVectors
Liste de paires [Nom, Paramètres], plus [Dimension, Nombre]. Cette clé décrit les points de calcul sous la forme de distributions particulières définies pour chaque dimension, qui permettent d’obtenir des vecteurs aléatoires dont chaque composante suit la distribution requise. Contrairement à l’échantillonnage décrit par le mot-clé « SampleAsIndependentRandomVariables » , les points ne sont pas répartis sur un hypercube régulier. La distribution sur chaque variable d’axe et spécifiée par non nom et ses paramètres, sous la forme d’une liste [Nom, Paramètres] pour chaque axe. Cette liste de paires, en nombre identique à la taille de l’espace des états, est complétée par une paire d’entiers [Dimension, Nombre] comportant la dimension de l’espace des états et le nombre souhaité de points d’échantillonnage. Les noms de distributions possibles sont “normal” de paramètres (mean,std), “lognormal” de paramètres (mean,sigma), “uniform” de paramètres (low,high), “loguniform” de paramètres (low,high), ou “weibull” de paramètre (shape). Par nature, les points sont inclus dans le domaine non borné ou borné selon les caractéristiques des distributions choisies par variable. Les distributions peuvent être différentes pour chaque axe.
Exemple :
{"SampleAsIndependentRandomVectors":[['normal',[0.,1.]], ['uniform',[-2,2]]]}pour un espace d’état de dimension 2.
- SampleAsMinMaxLatinHyperCube
Liste de paires réelles [Min, Max], plus [Dimension, Nombre]. Cette clé décrit le domaine borné dans lequel les points de calcul seront placés, sous la forme d’une paire [Min, Max] pour chaque composante de l’état. Les bornes inférieures sont incluses. Cette liste de paires, en nombre identique à la taille de l’espace des états, est complétée par une paire d’entiers [Dimension, Nombre] comportant la dimension de l’espace des états et le nombre souhaité de points d’échantillonnage. L’échantillonnage est ensuite construit automatiquement selon la méthode de l’hypercube Latin (LHS). Par nature, les points sont inclus dans le domaine défini par les bornes explicites.
Exemple :
{"SampleAsMinMaxLatinHyperCube":[[0.,1.],[-1,3]]+[[2,11]]}pour un espace d’état de dimension 2 et pour 11 points d’échantillonnage.
- SampleAsMinMaxSobolSequence
Liste de paires réelles [Min, Max], plus [Dimension, Nombre]. Cette clé décrit le domaine borné dans lequel les points de calcul seront placés, sous la forme d’une paire [Min, Max] pour chaque composante de l’état. Les bornes inférieures sont incluses. Cette liste de paires, en nombre identique à la taille de l’espace des états, est complétée par une paire d’entiers [Dimension, Nombre] comportant la dimension de l’espace des états et le nombre minimum souhaité de points d’échantillonnage (par construction, le nombre de points générés dans la séquence de Sobol sera la puissance de 2 immédiatement supérieure à ce nombre minimum). L’échantillonnage est ensuite construit automatiquement selon la méthode de séquences de Sobol. Par nature, les points sont inclus dans le domaine défini par les bornes explicites.
Remarque : il est nécessaire de disposer de Scipy en version supérieure à 1.7.0 pour utiliser cette option échantillonnage.
Exemple :
{"SampleAsMinMaxSobolSequence":[[0.,1.],[-1,3]]+[[2,11]]}pour un espace d’état de dimension 2 et au moins 11 points d’échantillonnage (il y aura 16 points en pratique).
- SampleAsMinMaxStepHyperCube
Liste de triplets de valeurs réelles [Min, Max, Step]. Cette clé décrit les points de calcul sous la forme d’un hyper-cube, dont on donne la liste des échantillonnages implicites de chaque variable par un triplet [Min, Max, Step]. C’est donc une liste de la même taille que celle de l’état. Les bornes sont incluses. Par nature, les points sont inclus dans le domaine défini par les bornes explicites.
Exemple :
{"SampleAsMinMaxStepHyperCube":[[0.,1.,0.25],[-1,3,1]]}pour un espace d’état de dimension 2.
- SampleAsnUplet
Liste d’états. Cette clé décrit les points de calcul sous la forme d’une liste de n-uplets, chaque n-uplet étant un état. Par nature, les points sont inclus dans le domaine borné défini comme l’enveloppe convexe des points explicitement désignés.
Exemple :
{"SampleAsnUplet":[[0,1,2,3],[4,3,2,1],[-2,3,-4,5]]}pour 3 points dans un espace d’état de dimension 4.
- SetDebug
Valeur booléenne. La variable conduit à l’activation, ou pas, du mode de débogage durant l’évaluation de la fonction ou de l’opérateur. La valeur par défaut est « False », les choix sont « True » ou « False ».
Exemple :
{"SetDebug":False}
- SetSeed
Valeur entière. Cette clé permet de donner un nombre entier pour fixer la graine du générateur aléatoire utilisé dans l’algorithme. Par défaut, la graine est laissée non initialisée, et elle utilise ainsi l’initialisation par défaut de l’ordinateur, qui varie donc à chaque étude. Pour assurer la reproductibilité de résultats impliquant des tirages aléatoires, il est fortement conseillé d’initialiser la graine. Une valeur simple est par exemple 123456789. Il est conseillé de mettre un entier à plus de 6 ou 7 chiffres pour bien initialiser le générateur aléatoire.
Exemple :
{"SetSeed":123456789}- StoreSupplementaryCalculations
Liste de noms. Cette liste indique les noms des variables supplémentaires, qui peuvent être disponibles au cours du déroulement ou à la fin de l’algorithme, si elles sont initialement demandées par l’utilisateur. Leur disponibilité implique, potentiellement, des calculs ou du stockage coûteux. La valeur par défaut est donc une liste vide, aucune de ces variables n’étant calculée et stockée par défaut (sauf les variables inconditionnelles). Les noms possibles pour les variables supplémentaires sont dans la liste suivante (la description détaillée de chaque variable nommée est donnée dans la suite de cette documentation par algorithme spécifique, dans la sous-partie « Informations et variables disponibles à la fin de l’algorithme ») : [ « CostFunctionJ », « CostFunctionJb », « CostFunctionJo », « CurrentState », « EnsembleOfSimulations », « EnsembleOfStates », « Innovation », « InnovationAtCurrentState », « SimulatedObservationAtCurrentState », ].
Exemple :
{"StoreSupplementaryCalculations":["CurrentState", "Residu"]}
14.13.4. Informations et variables disponibles à la fin de l’algorithme¶
En sortie, après exécution de l’algorithme, on dispose d’informations et de
variables issues du calcul. La description des
Variables et informations disponibles en sortie indique la manière de les obtenir, par la
méthode nommée get, depuis la variable « ADD » du post-processing en
interface graphique, ou depuis le cas en interface textuelle. Les variables
d’entrée, mises à disposition de l’utilisateur en sortie pour faciliter
l’écriture des procédures de post-processing, sont décrites dans un
Inventaire des informations potentiellement disponibles en sortie.
Sorties permanentes (non conditionnelles)
Les sorties non conditionnelles de l’algorithme sont les suivantes :
- CostFunctionJ
Liste de valeurs. Chaque élément est une valeur de fonctionnelle d’écart
choisie.Exemple :
J = ADD.get("CostFunctionJ")[:]
- CostFunctionJb
Liste de valeurs. Chaque élément est une valeur de fonctionnelle d’écart
, c’est-à-dire de la partie écart à l’ébauche. Si cette partie
n’existe pas dans la fonctionnelle, sa valeur est nulle.Exemple :
Jb = ADD.get("CostFunctionJb")[:]
- CostFunctionJo
Liste de valeurs. Chaque élément est une valeur de fonctionnelle d’écart
, c’est-à-dire de la partie écart à l’observation.Exemple :
Jo = ADD.get("CostFunctionJo")[:]
Ensemble des sorties à la demande (conditionnelles ou non)
L’ensemble des sorties (conditionnelles ou non) de l’algorithme, classées par ordre alphabétique, est le suivant :
- CostFunctionJ
Liste de valeurs. Chaque élément est une valeur de fonctionnelle d’écart
choisie.Exemple :
J = ADD.get("CostFunctionJ")[:]
- CostFunctionJb
Liste de valeurs. Chaque élément est une valeur de fonctionnelle d’écart
, c’est-à-dire de la partie écart à l’ébauche. Si cette partie
n’existe pas dans la fonctionnelle, sa valeur est nulle.Exemple :
Jb = ADD.get("CostFunctionJb")[:]
- CostFunctionJo
Liste de valeurs. Chaque élément est une valeur de fonctionnelle d’écart
, c’est-à-dire de la partie écart à l’observation.Exemple :
Jo = ADD.get("CostFunctionJo")[:]
- CurrentState
Liste de vecteurs. Chaque élément est un vecteur d’état courant utilisé au cours du déroulement itératif de l’algorithme utilisé.
Exemple :
xs = ADD.get("CurrentState")[:]
- EnsembleOfSimulations
Liste de vecteurs ou matrice. Chaque élément est une collection ordonnée de vecteurs d’état physique ou d’état simulé éventuellement observé
. Ce sont des sorties d’opérateur
,
c’est-à-dire des états d’observation simulés (nommés « snapshots » en
terminologie de bases réduites). A chaque index de pas, il y a 1 état par
colonne si cette liste est sous forme matricielle, ou 1 état par élément si
c’est effectivement une liste. Important : la numérotation du support ou des
points, sur lequel ou auxquels sont fournis une valeur d’état dans chaque
vecteur, est implicitement celle de l’ordre naturel de numérotation du
vecteur d’état, de 0 à la « taille moins 1 » de ce vecteur.Exemple :
{"EnsembleOfSimulations":[y1, y2, y3...]}
- EnsembleOfStates
Liste de vecteurs ou matrice. Chaque élément est une collection ordonnée de vecteurs d’état physique ou d’état paramétrique
. Ce sont
des entrées d’opérateur
, c’est-à-dire des états courants avant
observation. A chaque index de pas, il y a 1 état par colonne si cette liste
est sous forme matricielle, ou 1 état par élément si c’est effectivement une
liste. Important : la numérotation du support ou des points, sur lequel ou
auxquels sont fournis une valeur d’état dans chaque vecteur, est
implicitement celle de l’ordre naturel de numérotation du vecteur d’état, de
0 à la « taille moins 1 » de ce vecteur.Exemple :
{"EnsembleOfStates":[x1, x2, x3...]}
- Innovation
Liste de vecteurs. Chaque élément est un vecteur d’innovation, qui est en statique l’écart de l’optimum à l’ébauche, et en dynamique l’incrément d’évolution.
Exemple :
d = ADD.get("Innovation")[-1]
- InnovationAtCurrentState
Liste de vecteurs. Chaque élément est un vecteur d’innovation à l’état courant avant analyse.
Exemple :
ds = ADD.get("InnovationAtCurrentState")[-1]
- SimulatedObservationAtCurrentState
Liste de vecteurs. Chaque élément est un vecteur d’observation simulé par l’opérateur d’observation à partir de l’état courant, c’est-à-dire dans l’espace des observations.
Exemple :
hxs = ADD.get("SimulatedObservationAtCurrentState")[-1]
14.13.5. Voir aussi¶
Références vers d’autres sections :
Références vers d’autres modules SALOME :
OPENTURNS, voir le Guide utilisateur du module OPENTURNS dans le menu principal Aide de l’environnement SALOME