15.2. Algorithme de tâche « InterpolationByReducedModelTask »

Avertissement

Dans la présente version, cet algorithme ou certaines de ses variantes sont expérimentaux, et restent donc susceptibles de changements dans les prochaines versions.

Cet algorithme est réservé à une utilisation en interface textuelle (TUI), et donc pas en interface graphique (GUI).

15.2.1. Description

Cet algorithme permet de réaliser une interpolation très efficace de mesures physiques à l’aide d’une représentation réduite du modèle pour cette physique. On obtient en sortie, pour chaque jeu de mesures fournies aux positions requises, un champ complet \mathbf{y} par interpolation. Dit autrement, c’est une reconstruction de champ physique à l’aide de mesures et d’un modèle numérique réduit.

Pour interpoler ces mesures, on utilise une méthode de type Empirical Interpolation Method (EIM [Barrault04]), qui utilise un modèle réduit de type Reduced Order Model (ROM) provenant d’une décomposition EIM or DEIM, avec ou sans contraintes de positionnement de mesures.

Pour utiliser cet algorithme, il faut disposer des mesures optimalement positionnées et de la base réduite associée pour la représentation du modèle. C’est réalisable selon le schéma suivant, par une analyse préalable à l’aide d’un Algorithme de tâche « MeasurementsOptimalPositioningTask », qui fournit positions et base. Une fois la base construite et les positions déterminées, il peut être réalisé autant d’interpolations que l’on a de jeu de mesures aux positions requises, sans devoir refaire l’analyse préalable.

_images/irm_determination.png

Schéma général d’utilisation de l’algorithme

15.2.2. Commandes requises et optionnelles

Les commandes générales requises, disponibles en édition dans l’interface graphique ou textuelle, sont les suivantes :

Observation

Liste de vecteurs. La variable désigne le vecteur d’observation utilisé en assimilation de données ou en optimisation, et usuellement noté \mathbf{y}^o. 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.

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 orienté tâche ou étude dédiée. 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 :

ObservationsAlreadyRestrictedOnOptimalLocations

Valeur booléenne. La variable définit le fait que les mesures sont fournies uniquement aux positions idéales ou points optimaux auxquels une mesure est requise (« True », valeur par défaut), ou qu’elles sont fournies avec sur un support identique au champ complet et qu’elles doivent donc être restreintes aux positions requises (« False »).

Exemple : {"ObservationsAlreadyRestrictedOnOptimalLocations":False}

OptimalLocations

Série d’entiers. Cette série contient les indices des positions idéales ou points optimaux auxquels une mesure est requise, selon l’ordre des variables d’un vecteur d’état considéré arbitrairement sous forme unidimensionnelle, et dans le même ordre que les vecteurs de la base réduite trouvés itérativement.

Elle est identique à une sortie unique (une seule série) des positions idéales ou points optimaux (qui est une liste de séries d’entiers) d’un Algorithme de tâche « MeasurementsOptimalPositioningTask ».

ReducedBasis

Liste de matrices. Chaque élément est une matrice, contenant dans chaque colonne un vecteur de la base réduite obtenue par la recherche optimale, rangés par ordre de préférence décroissante, et dans le même ordre que les points idéaux trouvés itérativement.

Lorsque c’est une donnée d’entrée, elle est identique à une sortie unique d’un Algorithme de tâche « MeasurementsOptimalPositioningTask ».

Exemple : rb = ADD.get("ReducedBasis")[-1]

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 ») : [ « Analysis », « ReducedCoordinates », ].

Exemple : {"StoreSupplementaryCalculations":["CurrentState", "Residu"]}

15.2.3. 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, de la variable « ADD » du post-processing en interface graphique, ou du 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 l”Inventaire des informations potentiellement disponibles en sortie.

Sorties permanentes (non conditionnelles)

Les sorties non conditionnelles de l’algorithme sont les suivantes :

Analysis

Liste de vecteurs. Chaque élément de cette variable est un état optimal \mathbf{x}^* en optimisation, une interpolation ou une analyse \mathbf{x}^a en assimilation de données.

Exemple : xa = ADD.get("Analysis")[-1]

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 :

Analysis

Liste de vecteurs. Chaque élément de cette variable est un état optimal \mathbf{x}^* en optimisation, une interpolation ou une analyse \mathbf{x}^a en assimilation de données.

Exemple : xa = ADD.get("Analysis")[-1]

ReducedCoordinates

Liste de vecteurs. Chaque élément de cette variable est constitué des coordonnées d’un état physique complet \mathbf{y} dans la base réduite.

Exemple : rc = ADD.get("ReducedCoordinates")[-1]

15.2.4. Exemples d’utilisation en Python (TUI)

Voici un ou des exemples très simple d’usage de l’algorithme proposé et de ses paramètres, écrit en [DocR] Interface textuelle pour l’utilisateur (TUI/API). De plus, lorsque c’est possible, les informations indiquées en entrée permettent aussi de définir un cas équivalent en interface graphique [DocR] Interface graphique pour l’utilisateur (GUI/EFICAS).

15.2.4.1. Premier exemple

Cet exemple décrit la mise en oeuvre d’une reconstruction par interpolation, faisant suite à l’établissement d’une représentation réduite par une recherche de positionnement optimal de mesures.

Pour l’illustration, on utilise la même collection artificielle de champs physiques très simple (engendré de manière à exister dans un espace vectoriel de dimension 2) que pour les exemples d’étude avec « MeasurementsOptimalPositioningTask ». La recherche de positionnement ADAO préalable permet d’obtenir 2 positions optimales pour les mesures, qui servent ensuite à établir une interpolation de champ physique à partir de mesures aux positions optimales.

# -*- coding: utf-8 -*-
#
from numpy import array, arange, ravel, set_printoptions
set_printoptions(precision=3)
#
dimension = 7
#
print("Définition d'un ensemble artificiel de champs physiques")
print("-------------------------------------------------------")
Ensemble = array( [i+arange(dimension) for i in range(7)] ).T
print("- Dimension de l'espace des champs physiques...........: %i"%dimension)
print("- Nombre de vecteurs de champs physiques...............: %i"%Ensemble.shape[1])
print()
#
print("Recherche des positions optimales de mesure")
print("-------------------------------------------")
from adao import adaoBuilder
case = adaoBuilder.New()
case.setAlgorithmParameters(
    Algorithm = 'MeasurementsOptimalPositioningTask',
    Parameters = {
        "EnsembleOfSnapshots":Ensemble,
        "MaximumNumberOfLocations":3,
        "ErrorNorm":"L2",
        "StoreSupplementaryCalculations":[
            "ReducedBasis",
            "Residus",
        ],
    }
)
case.execute()
print("- Calcul ADAO effectué")
print()
#
print("Affichage des positions optimales de mesure")
print("-------------------------------------------")
op = case.get("OptimalPoints")[-1]
print("- Nombre de positions optimales de mesure..............: %i"%op.size)
print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
print()
#
print("Reconstruction par interpolation d'états mesurés connus")
print("-------------------------------------------------------")
rb = case.get("ReducedBasis")[-1]
measures_at_op = Ensemble[op,1]
#
interpolation = adaoBuilder.New()
interpolation.setAlgorithmParameters(
    Algorithm = 'InterpolationByReducedModelTask',
    Parameters = {
        "ReducedBasis":rb,
        "OptimalLocations":op,
        }
    )
interpolation.setObservation( Vector = measures_at_op )
interpolation.execute()
field = interpolation.get("Analysis")[-1]
print("- État de référence 1 utilisé pour l'apprentissage.....:",ravel(Ensemble[:,1]))
print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
print("- Mesures extraites de l'état 1 pour la reconstruction.:",measures_at_op)
print("- État 1 reconstruit avec la précision de 1%...........:",field)
if max(abs(ravel(Ensemble[:,1])-field)) < 1.e-2:
    print("  ===> Aucune différence n'existe entre les deux états, comme attendu")
else:
    raise ValueError("Différence constatée sur l'état de référence 1")
print()
#
print("Reconstruction par interpolation d'états mesurés non connus")
print("-----------------------------------------------------------")
measures_at_op = array([4, 3])
interpolation.setObservation( Vector = measures_at_op )
interpolation.execute()
field = interpolation.get("Analysis")[-1]
print("  Illustration d'une interpolation sur mesures réelles non connues")
print("- Positions optimales de mesure, numérotées par défaut.: %s"%op)
print("- Mesures non présentes dans les états connus..........:",measures_at_op)
print("- État reconstruit avec la précision de 1%.............:",field)
print("  ===> Aux positions de mesure %s, le champ reconstruit est égal à la mesure"%op)
print()

Le résultat de son exécution est le suivant :

Définition d'un ensemble artificiel de champs physiques
-------------------------------------------------------
- Dimension de l'espace des champs physiques...........: 7
- Nombre de vecteurs de champs physiques...............: 7

Recherche des positions optimales de mesure
-------------------------------------------
- Calcul ADAO effectué

Affichage des positions optimales de mesure
-------------------------------------------
- Nombre de positions optimales de mesure..............: 2
- Positions optimales de mesure, numérotées par défaut.: [6 0]

Reconstruction par interpolation d'états mesurés connus
-------------------------------------------------------
- État de référence 1 utilisé pour l'apprentissage.....: [1 2 3 4 5 6 7]
- Positions optimales de mesure, numérotées par défaut.: [6 0]
- Mesures extraites de l'état 1 pour la reconstruction.: [7 1]
- État 1 reconstruit avec la précision de 1%...........: [1. 2. 3. 4. 5. 6. 7.]
  ===> Aucune différence n'existe entre les deux états, comme attendu

Reconstruction par interpolation d'états mesurés non connus
-----------------------------------------------------------
  Illustration d'une interpolation sur mesures réelles non connues
- Positions optimales de mesure, numérotées par défaut.: [6 0]
- Mesures non présentes dans les états connus..........: [4 3]
- État reconstruit avec la précision de 1%.............: [3.    3.167 3.333 3.5   3.667 3.833 4.   ]
  ===> Aux positions de mesure [6 0], le champ reconstruit est égal à la mesure

15.2.5. Voir aussi

Références vers d’autres sections :

Références bibliographiques :