From 38256a9249da2753a7b538ee493aeef12e4fb78e Mon Sep 17 00:00:00 2001 From: Jean-Philippe ARGAUD Date: Tue, 1 Nov 2022 09:44:34 +0100 Subject: [PATCH] Minor documentation and code review corrections (33) Linf --- doc/en/snippets/QualityCriterion.rst | 2 +- doc/en/theory.rst | 11 ++++---- doc/fr/snippets/QualityCriterion.rst | 2 +- doc/fr/theory.rst | 25 ++++++++++--------- .../DerivativeFreeOptimization.py | 4 +-- .../daAlgorithms/DifferentialEvolution.py | 4 +-- .../daAlgorithms/ParticleSwarmOptimization.py | 4 +-- src/daComposant/daAlgorithms/SamplingTest.py | 4 +-- src/daComposant/daAlgorithms/TabuSearch.py | 4 +-- src/daComposant/daCore/BasicObjects.py | 4 +-- 10 files changed, 33 insertions(+), 31 deletions(-) diff --git a/doc/en/snippets/QualityCriterion.rst b/doc/en/snippets/QualityCriterion.rst index 1ff2d33..abb8688 100644 --- a/doc/en/snippets/QualityCriterion.rst +++ b/doc/en/snippets/QualityCriterion.rst @@ -8,7 +8,7 @@ QualityCriterion indicated by the sign "<=>": ["AugmentedWeightedLeastSquares" <=> "AWLS" <=> "DA", "WeightedLeastSquares" <=> "WLS", "LeastSquares" <=> "LS" <=> "L2", - "AbsoluteValue" <=> "L1", "MaximumError" <=> "ME"]. + "AbsoluteValue" <=> "L1", "MaximumError" <=> "ME" <=> "Linf"]. Example: ``{"QualityCriterion":"DA"}`` diff --git a/doc/en/theory.rst b/doc/en/theory.rst index 18a5c38..b7047e6 100644 --- a/doc/en/theory.rst +++ b/doc/en/theory.rst @@ -561,35 +561,36 @@ The most classical instances of error measurements are recalled or specified below, indicating their identifiers in ADAO for the possible selection of a quality criterion: -- the objective function for the augmented weighted least squares error measurement (which is the basic default functional in all data assimilation algorithms, often named "*3D-Var*" objective function, and which is known for the quality criteria in ADAO as "*AugmentedWeightedLeastSquares*", "*AWLS*" or "*DA*") is: +- the objective function for the augmented weighted least squares error measurement (which is the basic default functional in all data assimilation algorithms, often named "*3D-Var*" objective function, and which is known in the quality criteria for ADAO as "*AugmentedWeightedLeastSquares*", "*AWLS*" or "*DA*") is: .. index:: single: AugmentedWeightedLeastSquares (QualityCriterion) .. index:: single: AWLS (QualityCriterion) .. math:: J(\mathbf{x})=\frac{1}{2}(\mathbf{x}-\mathbf{x}^b)^T.\mathbf{B}^{-1}.(\mathbf{x}-\mathbf{x}^b)+\frac{1}{2}(\mathbf{y}^o-\mathbf{H}.\mathbf{x})^T.\mathbf{R}^{-1}.(\mathbf{y}^o-\mathbf{H}.\mathbf{x}) -- the objective function for the weighted least squares error measurement (which is the squared :math:`L^2` weighted norm of the innovation, with a :math:`1/2` coefficient to be homogeneous with the previous one, and which is known for the quality criteria in ADAO as "*WeightedLeastSquares*" or "*WLS*") is: +- the objective function for the weighted least squares error measurement (which is the squared :math:`L^2` weighted norm of the innovation, with a :math:`1/2` coefficient to be homogeneous with the previous one, and which is known in the quality criteria for ADAO as "*WeightedLeastSquares*" or "*WLS*") is: .. index:: single: WeightedLeastSquares (QualityCriterion) .. index:: single: WLS (QualityCriterion) .. math:: J(\mathbf{x})=\frac{1}{2}(\mathbf{y}^o-\mathbf{H}.\mathbf{x})^T.\mathbf{R}^{-1}.(\mathbf{y}^o-\mathbf{H}.\mathbf{x}) -- the objective function for the least squares error measurement (which is the squared :math:`L^2` norm of the innovation, with a :math:`1/2` coefficient to be homogeneous with the previous ones, and which is known for the quality criteria in ADAO as "*LeastSquares*", "*LS*" or "*L2*") is: +- the objective function for the least squares error measurement (which is the squared :math:`L^2` norm of the innovation, with a :math:`1/2` coefficient to be homogeneous with the previous ones, and which is known in the quality criteria for ADAO as "*LeastSquares*", "*LS*" or "*L2*") is: .. index:: single: LeastSquares (QualityCriterion) .. index:: single: LS (QualityCriterion) .. index:: single: L2 (QualityCriterion) .. math:: J(\mathbf{x})=\frac{1}{2}(\mathbf{y}^o-\mathbf{H}.\mathbf{x})^T.(\mathbf{y}^o-\mathbf{H}.\mathbf{x})=\frac{1}{2}||\mathbf{y}^o-\mathbf{H}.\mathbf{x}||_{L^2}^2 -- the objective function for the absolute error value measurement (which is the :math:`L^1` norm of the innovation, and which is known for the quality criteria in ADAO as "*AbsoluteValue*" or "*L1*") is: +- the objective function for the absolute error value measurement (which is the :math:`L^1` norm of the innovation, and which is known in the quality criteria for ADAO as "*AbsoluteValue*" or "*L1*") is: .. index:: single: AbsoluteValue (QualityCriterion) .. index:: single: L1 (QualityCriterion) .. math:: J(\mathbf{x})=||\mathbf{y}^o-\mathbf{H}.\mathbf{x}||_{L^1} -- the objective function for the maximum error value measurement (which is the :math:`L^{\infty}` norm, and which is known for the quality criteria in ADAO as "*MaximumError*" or "*ME*") is: +- the objective function for the maximum error value measurement (which is the :math:`L^{\infty}` norm, and which is known in the quality criteria for ADAO as "*MaximumError*", "*ME*" or "*Linf*") is: .. index:: single: MaximumError (QualityCriterion) .. index:: single: ME (QualityCriterion) + .. index:: single: Linf (QualityCriterion) .. math:: J(\mathbf{x})=||\mathbf{y}^o-\mathbf{H}.\mathbf{x}||_{L^{\infty}} These error measures may be not differentiable for the last two, but some diff --git a/doc/fr/snippets/QualityCriterion.rst b/doc/fr/snippets/QualityCriterion.rst index d10b181..f052636 100644 --- a/doc/fr/snippets/QualityCriterion.rst +++ b/doc/fr/snippets/QualityCriterion.rst @@ -8,7 +8,7 @@ QualityCriterion suivante, dans laquelle les noms équivalents sont indiqués par un signe "<=>" : ["AugmentedWeightedLeastSquares" <=> "AWLS" <=> "DA", "WeightedLeastSquares" <=> "WLS", "LeastSquares" <=> "LS" <=> "L2", - "AbsoluteValue" <=> "L1", "MaximumError" <=> "ME"]. + "AbsoluteValue" <=> "L1", "MaximumError" <=> "ME" <=> "Linf"]. Exemple : ``{"QualityCriterion":"DA"}`` diff --git a/doc/fr/theory.rst b/doc/fr/theory.rst index c609c4d..fe63f08 100644 --- a/doc/fr/theory.rst +++ b/doc/fr/theory.rst @@ -585,10 +585,10 @@ méthodes sont un coût numérique souvent bien supérieur pour trouver les estimations d'états, et fréquemment aucune garantie de convergence en temps fini. Ici, on ne mentionne que quelques méthodes disponibles dans ADAO : -- *optimisation sans dérivées (Derivative Free Optimization ou DFO)* (voir :ref:`section_ref_algorithm_DerivativeFreeOptimization`), -- *optimisation par essaim de particules (Particle Swarm Optimization ou PSO)* (voir :ref:`section_ref_algorithm_ParticleSwarmOptimization`), -- *évolution différentielle (Differential Evolution ou DE)* (voir :ref:`section_ref_algorithm_DifferentialEvolution`), -- *régression de quantile (Quantile Regression ou QR)* (voir :ref:`section_ref_algorithm_QuantileRegression`). +- *Optimisation sans dérivées (Derivative Free Optimization ou DFO)* (voir :ref:`section_ref_algorithm_DerivativeFreeOptimization`), +- *Optimisation par essaim de particules (Particle Swarm Optimization ou PSO)* (voir :ref:`section_ref_algorithm_ParticleSwarmOptimization`), +- *Évolution différentielle (Differential Evolution ou DE)* (voir :ref:`section_ref_algorithm_DifferentialEvolution`), +- *Régression de quantile (Quantile Regression ou QR)* (voir :ref:`section_ref_algorithm_QuantileRegression`). En second lieu, les méthodes d'optimisation cherchent usuellement à minimiser des mesures quadratiques d'erreurs, car les propriétés naturelles de ces @@ -601,35 +601,36 @@ réduire**. Par exemple, on peut citer une *erreur en valeur absolue*, une classiques de mesures d'erreurs, en indiquant leur identifiant dans ADAO pour la sélection éventuelle d'un critère de qualité : -- la fonction objectif pour la mesure d'erreur par moindres carrés pondérés et augmentés (qui est la fonctionnelle de base par défaut de tous les algorithmes en assimilation de données, souvent nommée la fonctionnelle du "*3D-Var*", et qui est connue pour les critères de qualité dans ADAO sous les noms de "*AugmentedWeightedLeastSquares*", "*AWLS*" ou "*DA*") est : +- la fonction objectif pour la mesure d'erreur par moindres carrés pondérés et augmentés (qui est la fonctionnelle de base par défaut de tous les algorithmes en assimilation de données, souvent nommée la fonctionnelle du "*3D-Var*", et qui est connue dans les critères de qualité pour ADAO sous les noms de "*AugmentedWeightedLeastSquares*", "*AWLS*" ou "*DA*") est : .. index:: single: AugmentedWeightedLeastSquares (QualityCriterion) .. index:: single: AWLS (QualityCriterion) .. math:: J(\mathbf{x})=\frac{1}{2}(\mathbf{x}-\mathbf{x}^b)^T.\mathbf{B}^{-1}.(\mathbf{x}-\mathbf{x}^b)+\frac{1}{2}(\mathbf{y}^o-\mathbf{H}.\mathbf{x})^T.\mathbf{R}^{-1}.(\mathbf{y}^o-\mathbf{H}.\mathbf{x}) -- la fonction objectif pour la mesure d'erreur par moindres carrés pondérés (qui est le carré de la norme pondérée :math:`L^2` de l'innovation, avec un coefficient :math:`1/2` pour être homogène à la précédente, et qui est connue pour les critères de qualité dans ADAO sous les noms de "*WeightedLeastSquares*" ou "*WLS*") est : +- la fonction objectif pour la mesure d'erreur par moindres carrés pondérés (qui est le carré de la norme pondérée :math:`L^2` de l'innovation, avec un coefficient :math:`1/2` pour être homogène à la précédente, et qui est connue dans les critères de qualité pour ADAO sous les noms de "*WeightedLeastSquares*" ou "*WLS*") est : .. index:: single: WeightedLeastSquares (QualityCriterion) .. index:: single: WLS (QualityCriterion) .. math:: J(\mathbf{x})=\frac{1}{2}(\mathbf{y}^o-\mathbf{H}.\mathbf{x})^T.\mathbf{R}^{-1}.(\mathbf{y}^o-\mathbf{H}.\mathbf{x}) -- la fonction objectif pour la mesure d'erreur par moindres carrés (qui est le carré de la norme :math:`L^2` de l'innovation, avec un coefficient :math:`1/2` pour être homogène aux précédentes, et qui est connue pour les critères de qualité dans ADAO sous les noms de "*LeastSquares*", "*LS*" ou "*L2*") est : +- la fonction objectif pour la mesure d'erreur par moindres carrés (qui est le carré de la norme :math:`L^2` de l'innovation, avec un coefficient :math:`1/2` pour être homogène aux précédentes, et qui est connue dans les critères de qualité pour ADAO sous les noms de "*LeastSquares*", "*LS*" ou "*L2*") est : .. index:: single: LeastSquares (QualityCriterion) .. index:: single: LS (QualityCriterion) .. index:: single: L2 (QualityCriterion) .. math:: J(\mathbf{x})=\frac{1}{2}(\mathbf{y}^o-\mathbf{H}.\mathbf{x})^T.(\mathbf{y}^o-\mathbf{H}.\mathbf{x})=\frac{1}{2}||\mathbf{y}^o-\mathbf{H}.\mathbf{x}||_{L^2}^2 -- la fonction objectif pour la mesure d'erreur en valeur absolue (qui est la norme :math:`L^1` de l'innovation, et qui est connue pour les critères de qualité dans ADAO sous les noms de "*AbsoluteValue*" ou "*L1*") est : +- la fonction objectif pour la mesure d'erreur en valeur absolue (qui est la norme :math:`L^1` de l'innovation, et qui est connue dans les critères de qualité pour ADAO sous les noms de "*AbsoluteValue*" ou "*L1*") est : .. index:: single: AbsoluteValue (QualityCriterion) .. index:: single: L1 (QualityCriterion) .. math:: J(\mathbf{x})=||\mathbf{y}^o-\mathbf{H}.\mathbf{x}||_{L^1} -- la fonction objectif pour la mesure d'erreur maximale (qui est la norme :math:`L^{\infty}` de l'innovation, et qui est connue pour les critères de qualité dans ADAO sous les noms de "*MaximumError*" ou "*ME*") est : +- la fonction objectif pour la mesure d'erreur maximale (qui est la norme :math:`L^{\infty}` de l'innovation, et qui est connue dans les critères de qualité pour ADAO sous les noms de "*MaximumError*", "*ME*" ou "*Linf*") est : .. index:: single: MaximumError (QualityCriterion) .. index:: single: ME (QualityCriterion) + .. index:: single: Linf (QualityCriterion) .. math:: J(\mathbf{x})=||\mathbf{y}^o-\mathbf{H}.\mathbf{x}||_{L^{\infty}} Ces mesures d'erreurs peuvent ne être pas différentiables comme pour les deux @@ -640,9 +641,9 @@ sont un coût numérique souvent bien supérieur pour trouver les estimations d'états, et pas de garantie de convergence en temps fini. Ici encore, on ne mentionne que quelques méthodes qui sont disponibles dans ADAO : -- *optimisation sans dérivées (Derivative Free Optimization ou DFO)* (voir :ref:`section_ref_algorithm_DerivativeFreeOptimization`), -- *optimisation par essaim de particules (Particle Swarm Optimization ou PSO)* (voir :ref:`section_ref_algorithm_ParticleSwarmOptimization`), -- *évolution différentielle (Differential Evolution ou DE)* (voir :ref:`section_ref_algorithm_DifferentialEvolution`). +- *Optimisation sans dérivées (Derivative Free Optimization ou DFO)* (voir :ref:`section_ref_algorithm_DerivativeFreeOptimization`), +- *Optimisation par essaim de particules (Particle Swarm Optimization ou PSO)* (voir :ref:`section_ref_algorithm_ParticleSwarmOptimization`), +- *Évolution différentielle (Differential Evolution ou DE)* (voir :ref:`section_ref_algorithm_DifferentialEvolution`). Le lecteur intéressé par le sujet de l'optimisation pourra utilement commencer sa recherche grâce au point d'entrée [WikipediaMO]_. diff --git a/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py b/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py index 9a561c2..d36ce2c 100644 --- a/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py +++ b/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py @@ -78,7 +78,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): "WeightedLeastSquares", "WLS", "LeastSquares", "LS", "L2", "AbsoluteValue", "L1", - "MaximumError", "ME", + "MaximumError", "ME", "Linf", ], ) self.defineRequiredParameter( @@ -167,7 +167,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): elif QualityMeasure in ["AbsoluteValue","L1"]: Jb = 0. Jo = numpy.sum( numpy.abs(_Innovation) ) - elif QualityMeasure in ["MaximumError","ME"]: + elif QualityMeasure in ["MaximumError","ME", "Linf"]: Jb = 0. Jo = numpy.max( numpy.abs(_Innovation) ) # diff --git a/src/daComposant/daAlgorithms/DifferentialEvolution.py b/src/daComposant/daAlgorithms/DifferentialEvolution.py index 1a4ed93..21340cc 100644 --- a/src/daComposant/daAlgorithms/DifferentialEvolution.py +++ b/src/daComposant/daAlgorithms/DifferentialEvolution.py @@ -102,7 +102,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): "WeightedLeastSquares", "WLS", "LeastSquares", "LS", "L2", "AbsoluteValue", "L1", - "MaximumError", "ME", + "MaximumError", "ME", "Linf", ], ) self.defineRequiredParameter( @@ -193,7 +193,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): elif QualityMeasure in ["AbsoluteValue","L1"]: Jb = 0. Jo = numpy.sum( numpy.abs(_Innovation) ) - elif QualityMeasure in ["MaximumError","ME"]: + elif QualityMeasure in ["MaximumError","ME", "Linf"]: Jb = 0. Jo = numpy.max( numpy.abs(_Innovation) ) # diff --git a/src/daComposant/daAlgorithms/ParticleSwarmOptimization.py b/src/daComposant/daAlgorithms/ParticleSwarmOptimization.py index 1a0402d..99aa7df 100644 --- a/src/daComposant/daAlgorithms/ParticleSwarmOptimization.py +++ b/src/daComposant/daAlgorithms/ParticleSwarmOptimization.py @@ -79,7 +79,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): "WeightedLeastSquares", "WLS", "LeastSquares", "LS", "L2", "AbsoluteValue", "L1", - "MaximumError", "ME", + "MaximumError", "ME", "Linf", ], ) self.defineRequiredParameter( @@ -165,7 +165,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): elif QualityMeasure in ["AbsoluteValue","L1"]: Jb = 0. Jo = numpy.sum( numpy.abs(_Innovation) ) - elif QualityMeasure in ["MaximumError","ME"]: + elif QualityMeasure in ["MaximumError","ME", "Linf"]: Jb = 0. Jo = numpy.max( numpy.abs(_Innovation) ) # diff --git a/src/daComposant/daAlgorithms/SamplingTest.py b/src/daComposant/daAlgorithms/SamplingTest.py index 66bf30b..ae99ad8 100644 --- a/src/daComposant/daAlgorithms/SamplingTest.py +++ b/src/daComposant/daAlgorithms/SamplingTest.py @@ -64,7 +64,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): "WeightedLeastSquares","WLS", "LeastSquares", "LS", "L2", "AbsoluteValue", "L1", - "MaximumError", "ME", + "MaximumError", "ME", "Linf", ], listadv = [ "AugmentedPonderatedLeastSquares", "APLS", @@ -146,7 +146,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): elif QualityMeasure in ["AbsoluteValue","L1"]: Jb = 0. Jo = float( numpy.sum( numpy.abs(Y0 - _HX), dtype=mfp ) ) - elif QualityMeasure in ["MaximumError","ME"]: + elif QualityMeasure in ["MaximumError","ME", "Linf"]: Jb = 0. Jo = numpy.max( numpy.abs(Y0 - _HX) ) # diff --git a/src/daComposant/daAlgorithms/TabuSearch.py b/src/daComposant/daAlgorithms/TabuSearch.py index ef6303b..de32f7e 100644 --- a/src/daComposant/daAlgorithms/TabuSearch.py +++ b/src/daComposant/daAlgorithms/TabuSearch.py @@ -71,7 +71,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): "WeightedLeastSquares", "WLS", "LeastSquares", "LS", "L2", "AbsoluteValue", "L1", - "MaximumError", "ME", + "MaximumError", "ME", "Linf", ], ) self.defineRequiredParameter( @@ -198,7 +198,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): elif QualityMeasure in ["AbsoluteValue","L1"]: Jb = 0. Jo = numpy.sum( numpy.abs(_Innovation) ) - elif QualityMeasure in ["MaximumError","ME"]: + elif QualityMeasure in ["MaximumError","ME", "Linf"]: Jb = 0. Jo = numpy.max( numpy.abs(_Innovation) ) # diff --git a/src/daComposant/daCore/BasicObjects.py b/src/daComposant/daCore/BasicObjects.py index 2b3b1b4..a82bb1a 100644 --- a/src/daComposant/daCore/BasicObjects.py +++ b/src/daComposant/daCore/BasicObjects.py @@ -681,6 +681,8 @@ class Algorithm(object): - CurrentOptimum : état optimal courant lors d'itérations - CurrentState : état courant lors d'itérations - CurrentStepNumber : pas courant d'avancement dans les algorithmes en évolution, à partir de 0 + - ForecastCovariance : covariance de l'état prédit courant lors d'itérations + - ForecastState : état prédit courant lors d'itérations - GradientOfCostFunctionJ : gradient de la fonction-coût globale - GradientOfCostFunctionJb : gradient de la partie ébauche de la fonction-coût - GradientOfCostFunctionJo : gradient de la partie observations de la fonction-coût @@ -694,8 +696,6 @@ class Algorithm(object): - MahalanobisConsistency : indicateur de consistance des covariances - OMA : Observation moins Analyse : Y - Xa - OMB : Observation moins Background : Y - Xb - - ForecastCovariance : covariance de l'état prédit courant lors d'itérations - - ForecastState : état prédit courant lors d'itérations - Residu : dans le cas des algorithmes de vérification - SampledStateForQuantiles : échantillons d'états pour l'estimation des quantiles - SigmaBck2 : indicateur de correction optimale des erreurs d'ébauche -- 2.39.2