for an priori given states sample. The default error function is the augmented
weighted least squares function, classicaly used in data assimilation.
-This is a useful algorithm to test the sensitivity, of the error function
-:math:`J` in particular, to the state :math:`\mathbf{x}` variations. When a
-state is not observable, a *"NaN"* value is returned.
+It is useful to test the sensitivity, of the error function :math:`J`, in
+particular, to the state :math:`\mathbf{x}` variations. When a state is not
+observable, a *"NaN"* value is returned.
The sampling of the states :math:`\mathbf{x}` can be given explicitly or under
-the form of hypercubes.
+the form of hyper-cubes, explicit or sampled. Be careful to the size of the
+hyper-cube (and then to the number of calculations) that can be reached, it can
+be big very quickly.
Optional and required commands
++++++++++++++++++++++++++++++
.. index:: single: SampleAsnUplet
.. index:: single: SampleAsExplicitHyperCube
.. index:: single: SampleAsMinMaxStepHyperCube
+.. index:: single: SampleAsIndependantRandomVariables
.. index:: single: QualityCriterion
.. index:: single: SetDebug
+.. index:: single: SetSeed
.. index:: single: StoreSupplementaryCalculations
The general required commands, available in the editing user interface, are the
Example : ``{"SampleAsnUplet":[[0,1,2,3],[4,3,2,1],[-2,3,-4,5]]}`` for 3 points in a state space of dimension 4
SampleAsExplicitHyperCube
- This key describes the calculations points as an hypercube, from which one
- gives the list of sampling of each variable as a list. That is then a list
- of lists, each of them being potentially of different size.
+ This key describes the calculations points as an hyper-cube, from a given
+ list of explicit sampling of each variable as a list. That is then a list of
+ lists, each of them being potentially of different size.
Example : ``{"SampleAsExplicitHyperCube":[[0.,0.25,0.5,0.75,1.],[-2,2,1]]}`` for a state space of dimension 2
SampleAsMinMaxStepHyperCube
- This key describes the calculations points as an hypercube from which one
- the sampling of each variable by a triplet *[min,max,step]*. That is then a
- list of the same size than the one of the state. The bounds are included.
+ This key describes the calculations points as an hyper-cube, from a given
+ list of implicit sampling of each variable by a triplet *[min,max,step]*.
+ That is then a list of the same size than the one of the state. The bounds
+ are included.
Example : ``{"SampleAsMinMaxStepHyperCube":[[0.,1.,0.25],[-1,3,1]]}`` for a state space of dimension 2
+ SampleAsIndependantRandomVariables
+ This key describes the calculations points as an hyper-cube, for which the
+ points on each axis come from a independant random sampling of the axis
+ variable, under the specification of the distribution, its parameters and
+ the number of points in the sample, as a list ``['distribution',
+ [parametres], nombre]`` for each axis. The possible distributions are
+ 'normal' of parameters (mean,std), 'lognormal' of parameters (mean,sigma),
+ 'uniform' of parameters (low,high), or 'weibull' of parameter (shape). That
+ is then a list of the same size than the one of the state.
+
+ Example : ``{"SampleAsIndependantRandomVariables":[['normal',[0.,1.],3],['uniform',[-2,2],4]]`` for a state space of dimension 2
+
QualityCriterion
This key indicates the quality criterion, used to find the state estimate.
The default is the usual data assimilation criterion named "DA", the
Example : ``{"SetDebug":False}``
+ SetSeed
+ This key allow to give an integer in order to fix the seed of the random
+ generator used to generate the ensemble. A convenient value is for example
+ 1000. By default, the seed is left uninitialized, and so use the default
+ initialization from the computer.
+
+ Example : ``{"SetSeed":1000}``
+
StoreSupplementaryCalculations
This list indicates the names of the supplementary variables that can be
available at the end of the algorithm. It involves potentially costly
d'erreur par défaut est celle de moindres carrés pondérés augmentés,
classiquement utilisée en assimilation de données.
-C'est un algorithme utile pour tester la sensibilité, de la fonctionnelle
-:math:`J` en particulier, aux variations de l'état :math:`\mathbf{x}`. Lorsque
-un état n'est pas observable, une value *"NaN"* est retournée.
+Il est utile pour tester la sensibilité, de la fonctionnelle :math:`J`, en
+particulier, aux variations de l'état :math:`\mathbf{x}`. Lorsque un état n'est
+pas observable, une valeur *"NaN"* est retournée.
L'échantillon des états :math:`\mathbf{x}` peut être fourni explicitement ou
-sous la forme d'hypercubes.
+sous la forme d'hyper-cubes, explicites ou échantillonnés. Attention à la taille
+de l'hyper-cube (et donc au nombre de calculs) qu'il est possible d'atteindre,
+elle peut rapidement devenir importante.
Commandes requises et optionnelles
++++++++++++++++++++++++++++++++++
.. index:: single: SampleAsnUplet
.. index:: single: SampleAsExplicitHyperCube
.. index:: single: SampleAsMinMaxStepHyperCube
+.. index:: single: SampleAsIndependantRandomVariables
.. index:: single: QualityCriterion
.. index:: single: SetDebug
+.. index:: single: SetSeed
.. index:: single: StoreSupplementaryCalculations
Les commandes requises générales, disponibles dans l'interface en édition, sont
SampleAsExplicitHyperCube
Cette clé décrit les points de calcul sous la forme d'un hyper-cube, dont on
- donne la liste des échantillonages de chaque variable comme une liste. C'est
- donc une liste de listes, chacune étant de taille potentiellement
- différente.
+ 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.
- Exemple : ``{"SampleAsExplicitHyperCube":[[0.,0.25,0.5,0.75,1.],[-2,2,1]]}`` pour un espace d'état à 2 dimensions
+ Exemple : ``{"SampleAsExplicitHyperCube":[[0.,0.25,0.5,0.75,1.],[-2,2,1]]}`` pour un espace d'état de dimension 2
SampleAsMinMaxStepHyperCube
- Cette clé décrit les points de calcul sous la forme d'un hyper-cube dont on
- donne la liste des échantillonages 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.
-
- Exemple : ``{"SampleAsMinMaxStepHyperCube":[[0.,1.,0.25],[-1,3,1]]}`` pour un espace d'état à 2 dimensions
+ 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.
+
+ Exemple : ``{"SampleAsMinMaxStepHyperCube":[[0.,1.,0.25],[-1,3,1]]}`` pour un espace d'état de dimension 2
+
+ SampleAsIndependantRandomVariables
+ 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 ``['distribution', [parametres], nombre]`` pour
+ chaque axe. Les distributions possibles sont 'normal' de paramètres
+ (mean,std), 'lognormal' de paramètres (mean,sigma), 'uniform' 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.
+
+ Exemple : ``{"SampleAsIndependantRandomVariables":[['normal',[0.,1.],3],['uniform',[-2,2],4]]`` pour un espace d'état de dimension 2
QualityCriterion
Cette clé indique le critère de qualité, qui est utilisé pour trouver
Exemple : ``{"SetDebug":False}``
+ SetSeed
+ Cette clé permet de donner un nombre entier pour fixer la graine du
+ générateur aléatoire utilisé pour générer l'ensemble. Un valeur pratique est
+ par exemple 1000. Par défaut, la graine est laissée non initialisée, et elle
+ utilise ainsi l'initialisation par défaut de l'ordinateur.
+
+ Exemple : ``{"SetSeed":1000}``
+
StoreSupplementaryCalculations
Cette liste indique les noms des variables supplémentaires qui peuvent être
disponibles à la fin de l'algorithme. Cela implique potentiellement des
self.defineRequiredParameter(
name = "SampleAsnUplet",
default = [],
- typecast = list,
+ typecast = tuple,
message = "Points de calcul définis par une liste de n-uplet",
)
self.defineRequiredParameter(
name = "SampleAsExplicitHyperCube",
default = [],
- typecast = list,
+ typecast = tuple,
message = "Points de calcul définis par un hyper-cube dont on donne la liste des échantillonages de chaque variable comme une liste",
)
self.defineRequiredParameter(
name = "SampleAsMinMaxStepHyperCube",
default = [],
- typecast = list,
+ typecast = tuple,
message = "Points de calcul définis par un hyper-cube dont on donne la liste des échantillonages de chaque variable par un triplet [min,max,step]",
)
+ self.defineRequiredParameter(
+ name = "SampleAsIndependantRandomVariables",
+ default = [],
+ typecast = tuple,
+ message = "Points de calcul définis par un hyper-cube dont les points sur chaque axe proviennent de l'échantillonage indépendant de la variable selon la spécification ['distribution',[parametres],nombre]",
+ )
self.defineRequiredParameter(
name = "QualityCriterion",
default = "AugmentedWeightedLeastSquares",
message = "Liste de calculs supplémentaires à stocker et/ou effectuer",
listval = ["CostFunctionJ","CurrentState","Innovation","ObservedState"]
)
+ self.defineRequiredParameter(
+ name = "SetSeed",
+ typecast = numpy.random.seed,
+ message = "Graine fixée pour le générateur aléatoire",
+ )
def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
self._pre_run()
coordinatesList = []
for i,dim in enumerate(self._parameters["SampleAsMinMaxStepHyperCube"]):
if len(dim) != 3:
- raise ValueError("For dimension %i, the variable definition %s is incorrect, it should be [min,max,step]."%(i,dim))
+ raise ValueError("For dimension %i, the variable definition \"%s\" is incorrect, it should be [min,max,step]."%(i,dim))
else:
coordinatesList.append(numpy.linspace(*dim))
sampleList = itertools.product(*coordinatesList)
+ elif len(self._parameters["SampleAsIndependantRandomVariables"]) > 0:
+ coordinatesList = []
+ for i,dim in enumerate(self._parameters["SampleAsIndependantRandomVariables"]):
+ if len(dim) != 3:
+ raise ValueError("For dimension %i, the variable definition \"%s\" is incorrect, it should be ('distribution',(parameters),length) with distribution in ['normal'(mean,std),'lognormal'(mean,sigma),'uniform'(low,high),'weibull'(shape)]."%(i,dim))
+ elif not( str(dim[0]) in ['normal','lognormal','uniform','weibull'] and hasattr(numpy.random,dim[0]) ):
+ raise ValueError("For dimension %i, the distribution name \"%s\" is not allowed, please choose in ['normal'(mean,std),'lognormal'(mean,sigma),'uniform'(low,high),'weibull'(shape)]"%(i,dim[0]))
+ else:
+ distribution = getattr(numpy.random,str(dim[0]),'normal')
+ parameters = dim[1]
+ coordinatesList.append(distribution(*dim[1], size=max(1,int(dim[2]))))
+ sampleList = itertools.product(*coordinatesList)
else:
sampleList = iter([Xn,])
# ----------