]> SALOME platform Git repositories - modules/adao.git/commitdiff
Salome HOME
Documentation and algorithms evaluation minor improvements
authorJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 11 Jan 2017 19:58:06 +0000 (20:58 +0100)
committerJean-Philippe ARGAUD <jean-philippe.argaud@edf.fr>
Wed, 11 Jan 2017 19:58:06 +0000 (20:58 +0100)
bin/module_version.py
doc/en/ref_algorithm_DerivativeFreeOptimization.rst
doc/en/ref_algorithm_ParticleSwarmOptimization.rst
doc/fr/ref_algorithm_DerivativeFreeOptimization.rst
doc/fr/ref_algorithm_ParticleSwarmOptimization.rst
src/daComposant/daAlgorithms/DerivativeFreeOptimization.py
src/daComposant/daAlgorithms/ParticleSwarmOptimization.py

index 9a496165cfdc436eee79f95999974c83dd96ab96..f5cc3ffc9a81f8b8f04c99a31de81230179658ed 100644 (file)
@@ -23,6 +23,6 @@
 # Author: Jean-Philippe Argaud, jean-philippe.argaud@edf.fr, EDF R&D
 
 name    = "ADAO"
-version = "V8_2_0" # Version pour catalogue, avec des "_" entre les numeros
+version = "V8_3_0" # Version pour catalogue, avec des "_" entre les numeros
 date    = ""
-year    = "2016" # Annee de copyright
+year    = "2017" # Annee de copyright
index c0b5ad162fc467a78031911c8afdd62320811db5..3cf10211b62e45114ee30ab0dc9b43fe610d1c71 100644 (file)
@@ -133,10 +133,10 @@ The options of the algorithm are the following:
 
   MaximumNumberOfFunctionEvaluations
     This key indicates the maximum number of evaluation of the cost function to
-    be optimized. The default is 15000, which is very similar to no limit on
-    iterations. The calculation can be over this limit when an outer
-    optimization loop has to be finished. It is strongly recommended to adapt
-    this parameter to the needs on real problems.
+    be optimized. The default is 15000, which is an arbitrary limit. It is then
+    recommended to adapt this parameter to the needs on real problems. For some
+    optimizers, the effective number of function evaluations can be slightly
+    different of the limit due to algorithm internal control requirements.
 
     Example : ``{"MaximumNumberOfFunctionEvaluations":50}``
 
index 8c05404b2f53501c2bde3e7d59e5e95aef5f4829..2214157829f47550855bfcf5658b7a07d7dc4e28 100644 (file)
@@ -50,6 +50,7 @@ Optional and required commands
 .. index:: single: ObservationError
 .. index:: single: ObservationOperator
 .. index:: single: MaximumNumberOfSteps
+.. index:: single: MaximumNumberOfFunctionEvaluations
 .. index:: single: NumberOfInsects
 .. index:: single: SwarmVelocity
 .. index:: single: GroupRecallRate
@@ -110,6 +111,15 @@ The options of the algorithm are the following:
 
     Example : ``{"MaximumNumberOfSteps":100}``
 
+  MaximumNumberOfFunctionEvaluations
+    This key indicates the maximum number of evaluation of the cost function to
+    be optimized. The default is 15000, which is an arbitrary limit. It is then
+    recommended to adapt this parameter to the needs on real problems. For some
+    optimizers, the effective number of function evaluations can be slightly
+    different of the limit due to algorithm internal control requirements.
+
+    Example : ``{"MaximumNumberOfFunctionEvaluations":50}``
+
   NumberOfInsects
     This key indicates the number of insects or particles in the swarm. The
     default is 100, which is a usual default for this algorithm.
index a8068d65ce5e54813d8f2d59f06b2437709c2e3c..96d186d46dc3a88b1488fe372a0862ba244f74ec 100644 (file)
@@ -137,10 +137,11 @@ Les options de l'algorithme sont les suivantes:
 
   MaximumNumberOfFunctionEvaluations
     Cette clé indique le nombre maximum d'évaluations possibles de la
-    fonctionnelle à optimiser. Le défaut est 15000, qui est une limite
-    arbitraire. Le calcul peut dépasser ce nombre lorsqu'il doit finir une
-    boucle externe d'optimisation. Il est fortement recommandé d'adapter ce
-    paramètre aux besoins pour des problèmes réels.
+    fonctionnelle à optimiser. Le défaut est de 15000, qui est une limite
+    arbitraire. Il est ainsi recommandé d'adapter ce paramètre aux besoins pour
+    des problèmes réels. Pour certains optimiseurs, le nombre effectif
+    d'évaluations à l'arrêt peut être légèrement différent de la limite à cause
+    d'exigences de déroulement interne de l'algorithme.
 
     Exemple : ``{"MaximumNumberOfFunctionEvaluations":50}``
 
index 572663cf4a6f8d9e158bf3088fa085f50b33c0f8..4b279d112b1c6604e13c0e92f627b4d3ca8f0f54 100644 (file)
@@ -52,6 +52,7 @@ Commandes requises et optionnelles
 .. index:: single: ObservationError
 .. index:: single: ObservationOperator
 .. index:: single: MaximumNumberOfSteps
+.. index:: single: MaximumNumberOfFunctionEvaluations
 .. index:: single: NumberOfInsects
 .. index:: single: SwarmVelocity
 .. index:: single: GroupRecallRate
@@ -113,6 +114,16 @@ Les options de l'algorithme sont les suivantes:
 
     Exemple : ``{"MaximumNumberOfSteps":100}``
 
+  MaximumNumberOfFunctionEvaluations
+    Cette clé indique le nombre maximum d'évaluations possibles de la
+    fonctionnelle à optimiser. Le défaut est de 15000, qui est une limite
+    arbitraire. Il est ainsi recommandé d'adapter ce paramètre aux besoins pour
+    des problèmes réels. Pour certains optimiseurs, le nombre effectif
+    d'évaluations à l'arrêt peut être légèrement différent de la limite à cause
+    d'exigences de déroulement interne de l'algorithme.
+
+    Exemple : ``{"MaximumNumberOfFunctionEvaluations":50}``
+
   NumberOfInsects
     Cette clé indique le nombre d'insectes ou de particules dans l'essaim. La
     valeur par défaut est 100, qui est une valeur par défaut usuelle pour cet
index c9415c75cd1ace218d4dbb90c502258e0de4b820..ccf94a9c24cadf416c900d058b350bd45efb9d5f 100644 (file)
@@ -46,7 +46,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             name     = "MaximumNumberOfFunctionEvaluations",
             default  = 15000,
             typecast = int,
-            message  = "Nombre maximal de d'évaluations de la fonction",
+            message  = "Nombre maximal d'évaluations de la fonction",
             minval   = -1,
             )
         self.defineRequiredParameter(
@@ -101,6 +101,8 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # ----------------------
         self.setParameters(Parameters)
         #
+        if not PlatformInfo.has_nlopt and not self._parameters["Minimizer"] in ["COBYLA", "POWELL", "SIMPLEX"]:
+            self._parameters["Minimizer"] = "SIMPLEX"
         if self._parameters.has_key("Bounds") and (type(self._parameters["Bounds"]) is type([]) or type(self._parameters["Bounds"]) is type(())) and (len(self._parameters["Bounds"]) > 0):
             Bounds = self._parameters["Bounds"]
             logging.debug("%s Prise en compte des bornes effectuee"%(self._name,))
@@ -175,6 +177,8 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         # Point de démarrage de l'optimisation : Xini = Xb
         # ------------------------------------
         Xini = numpy.ravel(Xb)
+        if len(Xini) < 2 and self._parameters["Minimizer"] == "NEWUOA":
+            raise ValueError("The minimizer %s can not be used when the optimisation state dimension is 1. Please choose another minimizer."%self._parameters["Minimizer"])
         #
         # Minimisation de la fonctionnelle
         # --------------------------------
index 50f115760be4354cc199fbacbb90bdb4446c38fa..52e8e635e536c0d818aece24fc7750e2cdb8a363 100644 (file)
@@ -33,7 +33,14 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             default  = 50,
             typecast = int,
             message  = "Nombre maximal de pas d'optimisation",
-            minval   = 1,
+            minval   = 0,
+            )
+        self.defineRequiredParameter(
+            name     = "MaximumNumberOfFunctionEvaluations",
+            default  = 15000,
+            typecast = int,
+            message  = "Nombre maximal d'évaluations de la fonction",
+            minval   = -1,
             )
         self.defineRequiredParameter(
             name     = "SetSeed",
@@ -168,6 +175,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         #
         # Initialisation de l'essaim
         # --------------------------
+        NumberOfFunctionEvaluations = 0
         LimitVelocity = numpy.abs(SpaceUp-SpaceLow)
         #
         PosInsect = []
@@ -182,10 +190,12 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
         qBestPosInsect = []
         Best = copy.copy(SpaceLow)
         qBest = CostFunction(Best,self._parameters["QualityCriterion"])
+        NumberOfFunctionEvaluations += 1
         #
         for i in range(self._parameters["NumberOfInsects"]):
             insect  = numpy.ravel(PosInsect[:,i])
             quality = CostFunction(insect,self._parameters["QualityCriterion"])
+            NumberOfFunctionEvaluations += 1
             qBestPosInsect.append(quality)
             if quality < qBest:
                 Best  = copy.copy( insect )
@@ -209,6 +219,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
                     VelocityInsect[j,i] = self._parameters["SwarmVelocity"]*VelocityInsect[j,i] +  Phip*rp[j]*(BestPosInsect[j,i]-PosInsect[j,i]) +  Phig*rg[j]*(Best[j]-PosInsect[j,i])
                     PosInsect[j,i] = PosInsect[j,i]+VelocityInsect[j,i]
                 quality = CostFunction(insect,self._parameters["QualityCriterion"])
+                NumberOfFunctionEvaluations += 1
                 if quality < qBestPosInsect[i]:
                     BestPosInsect[:,i] = copy.copy( insect )
                     qBestPosInsect[i]  = copy.copy( quality )
@@ -226,6 +237,9 @@ class ElementaryAlgorithm(BasicObjects.Algorithm):
             self.StoredVariables["CostFunctionJb"].store( 0. )
             self.StoredVariables["CostFunctionJo"].store( 0. )
             self.StoredVariables["CostFunctionJ" ].store( qBest )
+            if NumberOfFunctionEvaluations > self._parameters["MaximumNumberOfFunctionEvaluations"]:
+                logging.debug("%s Stopping search because the number %i of function evaluations is exceeding the maximum %i."%(self._name, NumberOfFunctionEvaluations, self._parameters["MaximumNumberOfFunctionEvaluations"]))
+                break
         #
         # Obtention de l'analyse
         # ----------------------