Salome HOME
Documentation and code update for PSO
[modules/adao.git] / src / daComposant / daAlgorithms / MeasurementsOptimalPositioningTask.py
index e04580fda943efabdd2e75fdf110980feab65ca3..df6756760d489dafef44ce09f10f6a2bb48e47ce 100644 (file)
@@ -22,7 +22,7 @@
 
 import numpy
 from daCore import BasicObjects
-from daAlgorithms.Atoms import ecweim
+from daAlgorithms.Atoms import ecweim, eosg
 
 # ==============================================================================
 class ElementaryAlgorithm(BasicObjects.Algorithm):
@@ -55,8 +55,13 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             name     = "ExcludeLocations",
             default  = [],
             typecast = tuple,
-            message  = "Liste des positions exclues selon la numérotation interne d'un snapshot",
-            minval   = -1,
+            message  = "Liste des indices ou noms de positions exclues selon l'ordre interne d'un snapshot",
+            )
+        self.defineRequiredParameter(
+            name     = "NameOfLocations",
+            default  = [],
+            typecast = tuple,
+            message  = "Liste des noms de positions selon l'ordre interne d'un snapshot",
             )
         self.defineRequiredParameter(
             name     = "ErrorNorm",
@@ -72,24 +77,62 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             message  = "Valeur limite inférieure du critère d'optimalité forçant l'arrêt",
             minval   = 0.,
             )
+        self.defineRequiredParameter(
+            name     = "SampleAsnUplet",
+            default  = [],
+            typecast = tuple,
+            message  = "Points de calcul définis par une liste de n-uplet",
+            )
+        self.defineRequiredParameter(
+            name     = "SampleAsExplicitHyperCube",
+            default  = [],
+            typecast = tuple,
+            message  = "Points de calcul définis par un hyper-cube dont on donne la liste des échantillonnages de chaque variable comme une liste",
+            )
+        self.defineRequiredParameter(
+            name     = "SampleAsMinMaxStepHyperCube",
+            default  = [],
+            typecast = tuple,
+            message  = "Points de calcul définis par un hyper-cube dont on donne la liste des échantillonnages 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'échantillonnage indépendant de la variable selon la spécification ['distribution',[parametres],nombre]",
+            )
+        self.defineRequiredParameter(
+            name     = "SetDebug",
+            default  = False,
+            typecast = bool,
+            message  = "Activation du mode debug lors de l'exécution",
+            )
         self.defineRequiredParameter(
             name     = "StoreSupplementaryCalculations",
             default  = [],
             typecast = tuple,
             message  = "Liste de calculs supplémentaires à stocker et/ou effectuer",
             listval  = [
-                "EnsembleOfSnapshots",
+                "EnsembleOfSimulations",
+                "EnsembleOfStates",
+                "ExcludedPoints",
                 "OptimalPoints",
                 "ReducedBasis",
                 "Residus",
                 ]
             )
+        self.defineRequiredParameter(
+            name     = "SetSeed",
+            typecast = numpy.random.seed,
+            message  = "Graine fixée pour le générateur aléatoire",
+            )
         self.requireInputArguments(
             mandatory= (),
             optional = ("Xb", "HO"),
             )
         self.setAttributes(tags=(
             "Reduction",
+            "Checking",
             ))
 
     def run(self, Xb=None, Y=None, U=None, HO=None, EM=None, CM=None, R=None, B=None, Q=None, Parameters=None):
@@ -98,19 +141,23 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #--------------------------
         if   self._parameters["Variant"] == "PositioningBylcEIM":
             if len(self._parameters["EnsembleOfSnapshots"]) > 0:
-                if self._toStore("EnsembleOfSnapshots"):
-                    self.StoredVariables["EnsembleOfSnapshots"].store( self._parameters["EnsembleOfSnapshots"] )
-                ecweim.EIM_offline(self)
+                if self._toStore("EnsembleOfSimulations"):
+                    self.StoredVariables["EnsembleOfSimulations"].store( self._parameters["EnsembleOfSnapshots"] )
+                ecweim.EIM_offline(self, self._parameters["EnsembleOfSnapshots"])
+            elif isinstance(HO, dict):
+                ecweim.EIM_offline(self, eosg.eosg(self, Xb, HO))
             else:
-                raise ValueError("Snapshots have to be given in order to launch the positionning analysis")
+                raise ValueError("Snapshots or Operator have to be given in order to launch the analysis")
         #
         elif self._parameters["Variant"] == "PositioningByEIM":
             if len(self._parameters["EnsembleOfSnapshots"]) > 0:
-                if self._toStore("EnsembleOfSnapshots"):
-                    self.StoredVariables["EnsembleOfSnapshots"].store( self._parameters["EnsembleOfSnapshots"] )
-                ecweim.EIM_offline(self)
+                if self._toStore("EnsembleOfSimulations"):
+                    self.StoredVariables["EnsembleOfSimulations"].store( self._parameters["EnsembleOfSnapshots"] )
+                ecweim.EIM_offline(self, self._parameters["EnsembleOfSnapshots"])
+            elif isinstance(HO, dict):
+                ecweim.EIM_offline(self, eosg.eosg(self, Xb, HO))
             else:
-                raise ValueError("Snapshots have to be given in order to launch the positionning analysis")
+                raise ValueError("Snapshots or Operator have to be given in order to launch the analysis")
         #
         #--------------------------
         else: