14.12. Algorithme de vérification « ReducedModelingTest »

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

14.12.1. Description

Cet algorithme permet d’analyser de manière simple les caractéristiques de la collection d’états du point de vue de la réduction. Il vise à diagnostiquer la complexité des informations présentes dans la collection d’états disponible, et la possibilité de représenter ces informations d’état dans un espace plus réduit que l’ensemble de la collection d’états. Techniquement, en s’appuyant sur une décomposition classique de type SVD (Singular Value Decomposition) et de la même manière qu’une PCA (Principal Component Analysis), il évalue la manière avec laquelle l’information diminue avec le nombre de valeurs singulières, soit en tant que valeurs, soit, d’un point de vue statistique, en tant que variance restante.

Une fois l’analyse terminée, un résumé est affiché et, sur demande, une représentation graphique des mêmes informations est produite.

14.12.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.

14.12.3. Commandes requises et optionnelles

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

EnsembleOfSnapshots

Liste de vecteurs ou matrice. Cette clé contient une collection ordonnée de vecteurs d’état physique \mathbf{y}, 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...]}

ExcludeLocations

Liste d’entiers ou de noms. Cette clé indique la liste des points du vecteur d’état exclus de la recherche optimale. La valeur par défaut est une liste vide. La liste peut contenir soit des indices de points (dans l’ordre interne implicite d’un vecteur d’état), soit des noms des points (qui doivent exister dans la liste des noms de positions indiquées par le mot-clé « NameOfLocations » pour pouvoir être exclus). Par défaut, si les éléments de la liste sont des chaînes de caractères assimilables à des indices, alors ces chaînes sont bien considérées comme des indices et pas des noms.

Rappel important : la numérotation de ces points exclus doit être identique à celle qui est adoptée, implicitement et impérativement, par les variables constituant un état considéré arbitrairement sous forme unidimensionnelle.

Exemple : {"ExcludeLocations":[3, 125, 286]} ou {"ExcludeLocations":["Point3", "XgTaC"]}

MaximumNumberOfLocations

Valeur entière. Cette clé indique le nombre maximum possible de positions trouvées dans la recherche optimale. La valeur par défaut est 1. La recherche optimale peut éventuellement trouver moins de positions que ce qui est requis par cette clé, comme par exemple dans le cas où le résidu associé à l’approximation est inférieur au critère et conduit à l’arrêt anticipé de la recherche optimale. Il est recommandé de l’adapter aux besoins pour des problèmes réels.

Exemple : {"MaximumNumberOfLocations":5}

MaximumNumberOfModes

Valeur entière. Cette clé indique le nombre maximum possible de modes de décomposition sur lesquels va porter l’analyse de réduction. La valeur par défaut est 1.e6, qui est très similaire à une absence de limite sur ce nombre de modes, et il est recommandé de l’adapter aux besoins pour des problèmes réels.

Exemple : {"MaximumNumberOfModes":5}

NameOfLocations

Liste de noms. Cette clé indique une liste explicite de noms des variables ou de positions, positionnées comme dans un vecteur d’état considéré arbitrairement sous forme unidimensionnelle. La valeur par défaut est une liste vide. Pour être utilisée, cette liste doit avoir la même longueur que celle d’un état physique.

Rappel important : l’ordre des noms est, implicitement et impérativement, le même que celui des variables constituant un état considéré arbitrairement sous forme unidimensionnelle.

Exemple : {"NameOfLocations":["Point3", "Location42", "Position125", "XgTaC"]}

NumberOfPrintedDigits

Valeur entière. Cette clé indique le nombre de décimales de précision pour les affichages de valeurs réelles. La valeur par défaut est 5, avec un minimum de 0.

Exemple : {"NumberOfPrintedDigits":5}

PlotAndSave

Valeur booléenne. La variable conduit à l’affichage des résultats sous forme graphique et à la sauvegarde en fichier d’une figure associée. La valeur par défaut est « False », les choix sont « True » ou « False ».

Exemple : {"PlotAndSave":False}

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}

ShowElementarySummary

Valeur booléenne. La variable conduit à l’activation, ou pas, du calcul et de l’affichage d’un résumé à chaque évaluation élémentaire du test. La valeur par défaut est « True », les choix sont « True » ou « False ».

Exemple : {"ShowElementarySummary":False}

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 ») : [ « EnsembleOfSimulations », « EnsembleOfStates », « Residus », « SingularValues », ].

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

14.12.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 :

Aucune (messages ou statistiques sont néanmoins affichés)

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 :

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é \mathbf{y}. Ce sont des sorties d’opérateur H, 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 \mathbf{x}. Ce sont des entrées d’opérateur H, 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...]}

Residus

Liste de série de valeurs réelles. Chaque élément est une série, contenant les valeurs du résidu particulier vérifié lors du déroulement de l’algorithme.

Exemple : rs = ADD.get("Residus")[-1]

SingularValues

Liste de série de valeurs réelles. Chaque élément est une série, contenant les valeurs singulières obtenues par une décomposition SVD d’un ensemble de vecteurs d’états complets. Le nombre de valeurs singulières retenues n’est pas limité par la taille de la base réduite demandée.

Exemple : sv = ADD.get("SingularValues")[-1]

14.12.5. 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).

14.12.5.1. Premier exemple

Cet exemple décrit les caractéristiques de réductibilité de l’ensemble d’états (« snapshots ») étudié. Cet ensemble considéré est d’abord composé de 15 calculs de sinus sur un suite d’entiers (donc l’espace engendré par les snapshots est non décomposable linéairement) et ces 15 snapshots sont ensuite dupliqués une fois pour avoir un espace réduit de taille exactement 15 (puisque les 15 derniers sont identiques aux 15 premiers). La totalité de la variance est ainsi expliquée par les 15 premiers modes, numérotés de 0 à 14, et les valeurs singulières suivantes sont proches du zéro numérique.

# -*- coding: utf-8 -*-
#
import numpy
from adao import adaoBuilder
numpy.random.seed(123456789)
#
dimension = 100
nbsnapshots = 15
Ensemble = numpy.empty((dimension,2*nbsnapshots))
for i in range(nbsnapshots):
    Ensemble[:,i] = numpy.sin((i+1)*numpy.arange(dimension))
Ensemble[:,nbsnapshots:2*nbsnapshots] = Ensemble[:,:nbsnapshots]
#
case = adaoBuilder.New()
case.setAlgorithmParameters(
    Algorithm = "ReducedModelingTest",
    Parameters = {
        "EnsembleOfSnapshots":Ensemble,
        "StoreSupplementaryCalculations":["Residus","SingularValues"],
        "PlotAndSave":True,
        "ResultFile":"simple_ReducedModelingTest1.png",
        }
    )
case.execute()

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


     REDUCEDMODELINGTEST
     ===================

     This test allows to analyze the characteristics of the collection of
     states from a reduction point of view. Using an SVD, it measures how
     the information decreases with the number of singular values, either
     as values or, with a statistical point of view, as remaining variance.

===> Information before launching:
     -----------------------------

     Characteristics of input data:
       State dimension................: 100
       Number of snapshots to test....: 30

===> Summary of the 5 first singular values:
     ---------------------------------------

     Singular values σ:
       σ[1] = 1.03513e+01
       σ[2] = 1.03509e+01
       σ[3] = 1.03258e+01
       σ[4] = 1.02436e+01
       σ[5] = 1.02386e+01

     Singular values σ divided by the first one σ[1]:
       σ[1] / σ[1] = 1.00000e+00
       σ[2] / σ[1] = 9.99962e-01
       σ[3] / σ[1] = 9.97533e-01
       σ[4] / σ[1] = 9.89589e-01
       σ[5] / σ[1] = 9.89104e-01

===> Ordered singular values and remaining variance:
     -----------------------------------------------

     -------------------------------------------------------------------------
        i  | Singular value σ |        σ[i]/σ[1] | Variance: part, remaining
     -------------------------------------------------------------------------
       00  |      1.03513e+01 |      1.00000e+00 |            7% ,    92.8%
       01  |      1.03509e+01 |      9.99962e-01 |            7% ,    85.6%
       02  |      1.03258e+01 |      9.97533e-01 |            7% ,    78.5%
       03  |      1.02436e+01 |      9.89589e-01 |            7% ,    71.5%
       04  |      1.02386e+01 |      9.89104e-01 |            7% ,    64.4%
       05  |      1.01050e+01 |      9.76200e-01 |            6% ,    57.6%
       06  |      9.99948e+00 |      9.66009e-01 |            6% ,    50.9%
       07  |      9.99643e+00 |      9.65714e-01 |            6% ,    44.2%
       08  |      9.98375e+00 |      9.64489e-01 |            6% ,    37.5%
       09  |      9.90828e+00 |      9.57198e-01 |            6% ,    31.0%
       10  |      9.90691e+00 |      9.57066e-01 |            6% ,    24.4%
       11  |      9.64803e+00 |      9.32056e-01 |            6% ,    18.1%
       12  |      9.62587e+00 |      9.29916e-01 |            6% ,    11.9%
       13  |      9.62344e+00 |      9.29681e-01 |            6% ,     5.7%
       14  |      9.25446e+00 |      8.94035e-01 |            5% ,     0.0%
       15  |      2.41400e-15 |      2.33206e-16 |            0% ,     0.0%
       16  |      1.94612e-15 |      1.88006e-16 |            0% ,     0.0%
       17  |      1.61527e-15 |      1.56044e-16 |            0% ,     0.0%
       18  |      1.54864e-15 |      1.49608e-16 |            0% ,     0.0%
       19  |      1.35243e-15 |      1.30653e-16 |            0% ,     0.0%
       20  |      1.11119e-15 |      1.07347e-16 |            0% ,     0.0%
       21  |      1.05852e-15 |      1.02260e-16 |            0% ,     0.0%
       22  |      9.68764e-16 |      9.35883e-17 |            0% ,     0.0%
       23  |      8.82878e-16 |      8.52912e-17 |            0% ,     0.0%
       24  |      6.53296e-16 |      6.31122e-17 |            0% ,     0.0%
       25  |      5.21872e-16 |      5.04159e-17 |            0% ,     0.0%
       26  |      4.98146e-16 |      4.81238e-17 |            0% ,     0.0%
       27  |      3.74898e-16 |      3.62173e-17 |            0% ,     0.0%
       28  |      2.79953e-16 |      2.70452e-17 |            0% ,     0.0%
       29  |      1.99083e-16 |      1.92326e-17 |            0% ,     0.0%
     -------------------------------------------------------------------------

===> Summary of variance cut-off:
     ----------------------------
     Representing more than 90%    of variance requires at least 14 mode(s).
     Representing more than 99%    of variance requires at least 15 mode(s).
     Representing more than 99.9%  of variance requires at least 15 mode(s).
     Representing more than 99.99% of variance requires at least 15 mode(s).

     Plot and save results in a file named "simple_ReducedModelingTest1.png"

     ---------------------------------------------------------------------------

     End of the "REDUCEDMODELINGTEST" verification

     ---------------------------------------------------------------------------

Les graphiques illustrant le résultat de son exécution sont les suivants :

_images/simple_ReducedModelingTest1.png