these variables being calculated and stored by default. The possible names
are in the following list: ["APosterioriCorrelations",
"APosterioriCovariance", "APosterioriStandardDeviations",
- "APosterioriVariances", "BMA", "CostFunctionJ", "CurrentState", "OMA",
- "OMB", "Innovation", "SigmaObs2", "MahalanobisConsistency",
- "SimulatedObservationAtBackground", "SimulatedObservationAtCurrentState",
- "SimulatedObservationAtOptimum", "SimulationQuantiles"].
+ "APosterioriVariances", "BMA", "CostFunctionJ", "CurrentOptimum",
+ "CurrentState", "IndexOfOptimum", "Innovation", "MahalanobisConsistency",
+ "OMA", "OMB", "SigmaObs2", "SimulatedObservationAtBackground",
+ "SimulatedObservationAtCurrentOptimum",
+ "SimulatedObservationAtCurrentState", "SimulatedObservationAtOptimum",
+ "SimulationQuantiles"].
Example : ``{"StoreSupplementaryCalculations":["BMA", "Innovation"]}``
The conditional outputs of the algorithm are the following:
APosterioriCorrelations
- *List of matrices*. Each element is an *a posteriori* error correlation
- matrix of the optimal state.
+ *List of matrices*. Each element is an *a posteriori* error correlations
+ matrix of the optimal state, coming from the :math:`\mathbf{A}*` covariance
+ matrix.
Example : ``C = ADD.get("APosterioriCorrelations")[-1]``
APosterioriStandardDeviations
*List of matrices*. Each element is an *a posteriori* error standard
- deviation matrix of the optimal state.
+ errors diagonal matrix of the optimal state, coming from the
+ :math:`\mathbf{A}*` covariance matrix.
- Example : ``E = ADD.get("APosterioriStandardDeviations")[-1]``
+ Exemple : ``S = ADD.get("APosterioriStandardDeviations")[-1]``
APosterioriVariances
- *List of matrices*. Each element is an *a posteriori* error variance matrix
- of the optimal state.
+ *List of matrices*. Each element is an *a posteriori* error variance
+ errors diagonal matrix of the optimal state, coming from the
+ :math:`\mathbf{A}*` covariance matrix.
Example : ``V = ADD.get("APosterioriVariances")[-1]``
Example : ``bma = ADD.get("BMA")[-1]``
+ CurrentOptimum
+ *List of vectors*. Each element is the optimal state obtained at the current
+ step of the optimization algorithm. It is not necessarely the last state.
+
+ Exemple : ``Xo = ADD.get("CurrentOptimum")[:]``
+
CurrentState
*List of vectors*. Each element is a usual state vector used during the
optimization algorithm procedure.
Example : ``Xs = ADD.get("CurrentState")[:]``
+ IndexOfOptimum
+ *List of integers*. Each element is the iteration index of the optimum
+ obtained at the current step the optimization algorithm. It is not
+ necessarely the number of the last iteration.
+
+ Exemple : ``i = ADD.get("IndexOfOptimum")[-1]``
+
Innovation
*List of vectors*. Each element is an innovation vector, which is in static
the difference between the optimal and the background, and in dynamic the
Example : ``hxb = ADD.get("SimulatedObservationAtBackground")[-1]``
+ SimulatedObservationAtCurrentOptimum
+ *List of vectors*. Each element is a vector of observation simulated from
+ the optimal state obtained at the current step the optimization algorithm,
+ that is, in the observation space.
+
+ Exemple : ``hxo = ADD.get("SimulatedObservationAtCurrentOptimum")[-1]``
+
SimulatedObservationAtCurrentState
*List of vectors*. Each element is an observed vector at the current state,
that is, in the observation space.
- Example : ``Ys = ADD.get("SimulatedObservationAtCurrentState")[-1]``
+ Example : ``hxs = ADD.get("SimulatedObservationAtCurrentState")[-1]``
SimulatedObservationAtOptimum
*List of vectors*. Each element is a vector of observation simulated from
All other information are conditioned by the algorithm and/or the user requests
of availability. They are the following, in alphabetical order:
+ APosterioriCorrelations
+ *List of matrices*. Each element is an *a posteriori* error correlations
+ matrix of the optimal state, coming from the :math:`\mathbf{A}*` covariance
+ matrix.
+
+ Exemple : ``C = ADD.get("APosterioriCorrelations")[-1]``
+
APosterioriCovariance
*List of matrices*. Each element is an *a posteriori* error covariance
matrix :math:`\mathbf{A}*` of the optimal state.
Example : ``A = ADD.get("APosterioriCovariance")[-1]``
+ APosterioriStandardDeviations
+ *List of matrices*. Each element is an *a posteriori* error standard errors
+ diagonal matrix of the optimal state, coming from the :math:`\mathbf{A}*`
+ covariance matrix.
+
+ Exemple : ``S = ADD.get("APosterioriStandardDeviations")[-1]``
+
+ APosterioriVariances
+ *List of matrices*. Each element is an *a posteriori* error variances
+ diagonal matrix of the optimal state, coming from the :math:`\mathbf{A}*`
+ covariance matrix.
+
+ Exemple : ``V = ADD.get("APosterioriVariances")[-1]``
+
BMA
*List of vectors*. Each element is a vector of difference between the
background and the optimal state.
Example : ``Jo = ADD.get("CostFunctionJo")[:]``
+ CurrentOptimum
+ *List of vectors*. Each element is the optimal state obtained at the current
+ step of the optimization algorithm. It is not necessarely the last state.
+
+ Exemple : ``Xo = ADD.get("CurrentOptimum")[:]``
+
CurrentState
*List of vectors*. Each element is a usual state vector used during the
optimization algorithm procedure.
Example : ``Xs = ADD.get("CurrentState")[:]``
+ IndexOfOptimum
+ *List of integers*. Each element is the iteration index of the optimum
+ obtained at the current step the optimization algorithm. It is not
+ necessarely the number of the last iteration.
+
+ Exemple : ``i = ADD.get("MahalanobisConsistency")[-1]``
+
Innovation
*List of vectors*. Each element is an innovation vector, which is in static
the difference between the optimal and the background, and in dynamic the
Example : ``hxb = ADD.get("SimulatedObservationAtBackground")[-1]``
+ SimulatedObservationAtCurrentOptimum
+ *List of vectors*. Each element is a vector of observation simulated from
+ the optimal state obtained at the current step the optimization algorithm,
+ that is, in the observation space.
+
+ Exemple : ``hxo = ADD.get("SimulatedObservationAtCurrentOptimum")[-1]``
+
SimulatedObservationAtCurrentState
*List of vectors*. Each element is an observed vector at the current state,
that is, in the observation space.
- Example : ``Ys = ADD.get("SimulatedObservationAtCurrentState")[-1]``
+ Example : ``hxs = ADD.get("SimulatedObservationAtCurrentState")[-1]``
SimulatedObservationAtOptimum
*List of vectors*. Each element is a vector of observation simulated from
aucune de ces variables n'étant calculée et stockée par défaut. Les noms
possibles sont dans la liste suivante : ["APosterioriCorrelations",
"APosterioriCovariance", "APosterioriStandardDeviations",
- "APosterioriVariances", "BMA", "CostFunctionJ", "CurrentState", "OMA",
- "OMB", "Innovation", "SigmaObs2", "MahalanobisConsistency",
- "SimulatedObservationAtBackground", "SimulatedObservationAtCurrentState",
- "SimulatedObservationAtOptimum", "SimulationQuantiles"].
+ "APosterioriVariances", "BMA", "CostFunctionJ", "CurrentOptimum",
+ "CurrentState", "IndexOfOptimum", "Innovation", "MahalanobisConsistency",
+ "OMA", "OMB", "SigmaObs2", "SimulatedObservationAtBackground",
+ "SimulatedObservationAtCurrentOptimum",
+ "SimulatedObservationAtCurrentState", "SimulatedObservationAtOptimum",
+ "SimulationQuantiles"].
Exemple : ``{"StoreSupplementaryCalculations":["BMA", "Innovation"]}``
Les sorties conditionnelles de l'algorithme sont les suivantes:
APosterioriCorrelations
- *Liste de matrices*. Chaque élément est une matrice de corrélation des
- erreurs *a posteriori* de l'état optimal.
+ *Liste de matrices*. Chaque élément est une matrice de corrélations des
+ erreurs *a posteriori* de l'état optimal, issue de la matrice
+ :math:`\mathbf{A}*` des covariances.
Exemple : ``C = ADD.get("APosterioriCorrelations")[-1]``
Exemple : ``A = ADD.get("APosterioriCovariance")[-1]``
APosterioriStandardDeviations
- *Liste de matrices*. Chaque élément est une matrice d'écart-types des
- erreurs *a posteriori* de l'état optimal.
+ *Liste de matrices*. Chaque élément est une matrice diagonale d'écarts-types
+ des erreurs *a posteriori* de l'état optimal, issue de la matrice
+ :math:`\mathbf{A}*` des covariances.
- Exemple : ``E = ADD.get("APosterioriStandardDeviations")[-1]``
+ Exemple : ``S = ADD.get("APosterioriStandardDeviations")[-1]``
APosterioriVariances
- *Liste de matrices*. Chaque élément est une matrice de variances des erreurs
- *a posteriori* de l'état optimal.
+ *Liste de matrices*. Chaque élément est une matrice diagonale de variances
+ des erreurs *a posteriori* de l'état optimal, issue de la matrice
+ :math:`\mathbf{A}*` des covariances.
Exemple : ``V = ADD.get("APosterioriVariances")[-1]``
Exemple : ``bma = ADD.get("BMA")[-1]``
+ CurrentOptimum
+ *Liste de vecteurs*. Chaque élément est le vecteur d'état optimal au pas de
+ temps courant au cours du déroulement de l'algorithme d'optimisation. Ce
+ n'est pas nécessairement le dernier état.
+
+ Exemple : ``Xo = ADD.get("CurrentOptimum")[:]``
+
CurrentState
*Liste de vecteurs*. Chaque élément est un vecteur d'état courant utilisé
au cours du déroulement de l'algorithme d'optimisation.
Exemple : ``Xs = ADD.get("CurrentState")[:]``
+ IndexOfOptimum
+ *Liste d'entiers*. Chaque élément est l'index d'itération de l'optimum
+ obtenu au cours du déroulement de l'algorithme d'optimisation. Ce n'est pas
+ nécessairement le numéro de la dernière itération.
+
+ Exemple : ``i = ADD.get("IndexOfOptimum")[-1]``
+
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
Exemple : ``hxb = ADD.get("SimulatedObservationAtBackground")[-1]``
+ SimulatedObservationAtCurrentOptimum
+ *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
+ partir de l'état optimal au pas de temps courant au cours du déroulement de
+ l'algorithme d'optimisation, c'est-à-dire dans l'espace des observations.
+
+ Exemple : ``hxo = ADD.get("SimulatedObservationAtCurrentOptimum")[-1]``
+
SimulatedObservationAtCurrentState
- *Liste de vecteurs*. Chaque élément est un vecteur observé à l'état courant,
- c'est-à-dire dans l'espace des observations.
+ *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
+ partir de l'état courant, c'est-à-dire dans l'espace des observations.
- Exemple : ``Ys = ADD.get("SimulatedObservationAtCurrentState")[-1]``
+ Exemple : ``hxs = ADD.get("SimulatedObservationAtCurrentState")[-1]``
SimulatedObservationAtOptimum
*Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
demande utilisateur de disponibilité. Ce sont les suivantes, par ordre
alphabétique:
+ APosterioriCorrelations
+ *Liste de matrices*. Chaque élément est une matrice de corrélations des
+ erreurs *a posteriori* de l'état optimal, issue de la matrice
+ :math:`\mathbf{A}*` des covariances.
+
+ Exemple : ``C = ADD.get("APosterioriCorrelations")[-1]``
+
APosterioriCovariance
*Liste de matrices*. Chaque élément est une matrice :math:`\mathbf{A}*` de
covariances des erreurs *a posteriori* de l'état optimal.
Exemple : ``A = ADD.get("APosterioriCovariance")[-1]``
+ APosterioriStandardDeviations
+ *Liste de matrices*. Chaque élément est une matrice diagonale d'écarts-types
+ des erreurs *a posteriori* de l'état optimal, issue de la matrice
+ :math:`\mathbf{A}*` des covariances.
+
+ Exemple : ``S = ADD.get("APosterioriStandardDeviations")[-1]``
+
+ APosterioriVariances
+ *Liste de matrices*. Chaque élément est une matrice diagonale de variances
+ des erreurs *a posteriori* de l'état optimal, issue de la matrice
+ :math:`\mathbf{A}*` des covariances.
+
+ Exemple : ``V = ADD.get("APosterioriVariances")[-1]``
+
BMA
*Liste de vecteurs*. Chaque élément est un vecteur d'écart entre
l'ébauche et l'état optimal.
Exemple : ``Jo = ADD.get("CostFunctionJo")[:]``
+ CurrentOptimum
+ *Liste de vecteurs*. Chaque élément est le vecteur d'état optimal au pas de
+ temps courant au cours du déroulement de l'algorithme d'optimisation. Ce
+ n'est pas nécessairement le dernier état.
+
+ Exemple : ``Xo = ADD.get("CurrentOptimum")[:]``
+
CurrentState
*Liste de vecteurs*. Chaque élément est un vecteur d'état courant utilisé
au cours du déroulement de l'algorithme d'optimisation.
Exemple : ``Xs = ADD.get("CurrentState")[:]``
+ IndexOfOptimum
+ *Liste d'entiers*. Chaque élément est l'index d'itération de l'optimum
+ obtenu au cours du déroulement de l'algorithme d'optimisation. Ce n'est pas
+ nécessairement le numéro de la dernière itération.
+
+ Exemple : ``i = ADD.get("IndexOfOptimum")[-1]``
+
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
Exemple : ``hxb = ADD.get("SimulatedObservationAtBackground")[-1]``
+ SimulatedObservationAtCurrentOptimum
+ *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
+ partir de l'état optimal au pas de temps courant au cours du déroulement de
+ l'algorithme d'optimisation, c'est-à-dire dans l'espace des observations.
+
+ Exemple : ``hxo = ADD.get("SimulatedObservationAtCurrentOptimum")[-1]``
+
SimulatedObservationAtCurrentState
- *Liste de vecteurs*. Chaque élément est un vecteur observé à l'état courant,
- c'est-à-dire dans l'espace des observations.
+ *Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
+ partir de l'état courant, c'est-à-dire dans l'espace des observations.
- Exemple : ``Ys = ADD.get("SimulatedObservationAtCurrentState")[-1]``
+ Exemple : ``hxs = ADD.get("SimulatedObservationAtCurrentState")[-1]``
SimulatedObservationAtOptimum
*Liste de vecteurs*. Chaque élément est un vecteur d'observation simulé à
default = [],
typecast = tuple,
message = "Liste de calculs supplémentaires à stocker et/ou effectuer",
- listval = ["APosterioriCorrelations", "APosterioriCovariance", "APosterioriStandardDeviations", "APosterioriVariances", "BMA", "OMA", "OMB", "CurrentState", "CostFunctionJ", "Innovation", "SigmaObs2", "MahalanobisConsistency", "SimulationQuantiles", "SimulatedObservationAtBackground", "SimulatedObservationAtCurrentState", "SimulatedObservationAtOptimum"]
+ listval = ["APosterioriCorrelations", "APosterioriCovariance", "APosterioriStandardDeviations", "APosterioriVariances", "BMA", "OMA", "OMB", "CurrentState", "CostFunctionJ", "CurrentOptimum", "IndexOfOptimum", "Innovation", "SigmaObs2", "MahalanobisConsistency", "SimulationQuantiles", "SimulatedObservationAtBackground", "SimulatedObservationAtCurrentState", "SimulatedObservationAtOptimum", "SimulatedObservationAtCurrentOptimum"]
)
self.defineRequiredParameter(
name = "Quantiles",
# ------------------------------
def CostFunction(x):
_X = numpy.asmatrix(numpy.ravel( x )).T
- if self._parameters["StoreInternalVariables"] or "CurrentState" in self._parameters["StoreSupplementaryCalculations"]:
+ if self._parameters["StoreInternalVariables"] or \
+ "CurrentState" in self._parameters["StoreSupplementaryCalculations"] or \
+ "CurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
self.StoredVariables["CurrentState"].store( _X )
_HX = Hm( _X )
_HX = numpy.asmatrix(numpy.ravel( _HX )).T
- if "SimulatedObservationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"]:
+ if "SimulatedObservationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"] or \
+ "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
self.StoredVariables["SimulatedObservationAtCurrentState"].store( _HX )
Jb = 0.5 * (_X - Xb).T * BI * (_X - Xb)
Jo = 0.5 * (Y - _HX).T * RI * (Y - _HX)
self.StoredVariables["CostFunctionJb"].store( Jb )
self.StoredVariables["CostFunctionJo"].store( Jo )
self.StoredVariables["CostFunctionJ" ].store( J )
+ if "IndexOfOptimum" in self._parameters["StoreSupplementaryCalculations"] or \
+ "CurrentOptimum" in self._parameters["StoreSupplementaryCalculations"] or \
+ "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
+ IndexMin = numpy.argmin( self.StoredVariables["CostFunctionJ"][nbPreviousSteps:] ) + nbPreviousSteps
+ if "IndexOfOptimum" in self._parameters["StoreSupplementaryCalculations"]:
+ self.StoredVariables["IndexOfOptimum"].store( IndexMin )
+ if "CurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
+ self.StoredVariables["CurrentOptimum"].store( self.StoredVariables["CurrentState"][IndexMin] )
+ if "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
+ self.StoredVariables["SimulatedObservationAtCurrentOptimum"].store( self.StoredVariables["SimulatedObservationAtCurrentState"][IndexMin] )
return J
#
def GradientOfCostFunction(x):
"SigmaObs2" in self._parameters["StoreSupplementaryCalculations"] or \
"SimulatedObservationAtOptimum" in self._parameters["StoreSupplementaryCalculations"] or \
"SimulationQuantiles" in self._parameters["StoreSupplementaryCalculations"]:
- HXa = Hm(Xa)
+ if "SimulatedObservationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"]:
+ HXa = self.StoredVariables["SimulatedObservationAtCurrentState"][IndexMin]
+ elif "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]:
+ HXa = self.StoredVariables["SimulatedObservationAtCurrentOptimum"][-1]
+ else:
+ HXa = Hm(Xa)
#
# Calcul de la covariance d'analyse
# ---------------------------------
# ----------
BI = B.getI()
RI = R.getI()
- def CostFunction(x,HmX, QualityMeasure="AugmentedWeightedLeastSquares"):
+ def CostFunction(x, HmX, QualityMeasure="AugmentedWeightedLeastSquares"):
if numpy.any(numpy.isnan(HmX)):
_X = numpy.nan
_HX = numpy.nan
self.StoredVariables["GradientOfCostFunctionJo"] = Persistence.OneVector(name = "GradientOfCostFunctionJo")
self.StoredVariables["CurrentState"] = Persistence.OneVector(name = "CurrentState")
self.StoredVariables["Analysis"] = Persistence.OneVector(name = "Analysis")
+ self.StoredVariables["IndexOfOptimum"] = Persistence.OneIndex(name = "IndexOfOptimum")
+ self.StoredVariables["CurrentOptimum"] = Persistence.OneVector(name = "CurrentOptimum")
self.StoredVariables["SimulatedObservationAtBackground"] = Persistence.OneVector(name = "SimulatedObservationAtBackground")
self.StoredVariables["SimulatedObservationAtCurrentState"] = Persistence.OneVector(name = "SimulatedObservationAtCurrentState")
self.StoredVariables["SimulatedObservationAtOptimum"] = Persistence.OneVector(name = "SimulatedObservationAtOptimum")
+ self.StoredVariables["SimulatedObservationAtCurrentOptimum"] = Persistence.OneVector(name = "SimulatedObservationAtCurrentOptimum")
self.StoredVariables["Innovation"] = Persistence.OneVector(name = "Innovation")
self.StoredVariables["SigmaObs2"] = Persistence.OneScalar(name = "SigmaObs2")
self.StoredVariables["SigmaBck2"] = Persistence.OneScalar(name = "SigmaBck2")
def __init__(self, name="", unit="", basetype = float):
Persistence.__init__(self, name, unit, basetype)
+class OneIndex(Persistence):
+ """
+ Classe définissant le stockage d'une valeur unique entière (int) par pas.
+ """
+ def __init__(self, name="", unit="", basetype = int):
+ Persistence.__init__(self, name, unit, basetype)
+
class OneVector(Persistence):
"""
Classe de stockage d'une liste de valeurs numériques homogènes par pas. Ne
# Observers
ObserversList = [
"Analysis",
- "CurrentState",
"Innovation",
+ "CurrentState",
+ "CurrentOptimum",
+ "IndexOfOptimum",
+ "SimulatedObservationAtBackground",
"SimulatedObservationAtCurrentState",
+ "SimulatedObservationAtOptimum",
+ "SimulatedObservationAtCurrentOptimum",
+ "BMA",
"OMA",
"OMB",
- "BMA",
"CostFunctionJ",
"CostFunctionJb",
"CostFunctionJo",