# 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
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:: single: ObservationError
.. index:: single: ObservationOperator
.. index:: single: MaximumNumberOfSteps
+.. index:: single: MaximumNumberOfFunctionEvaluations
.. index:: single: NumberOfInsects
.. index:: single: SwarmVelocity
.. index:: single: GroupRecallRate
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.
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:: single: ObservationError
.. index:: single: ObservationOperator
.. index:: single: MaximumNumberOfSteps
+.. index:: single: MaximumNumberOfFunctionEvaluations
.. index:: single: NumberOfInsects
.. index:: single: SwarmVelocity
.. index:: single: GroupRecallRate
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
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(
# ----------------------
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,))
# 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
# --------------------------------
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",
#
# Initialisation de l'essaim
# --------------------------
+ NumberOfFunctionEvaluations = 0
LimitVelocity = numpy.abs(SpaceUp-SpaceLow)
#
PosInsect = []
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 )
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 )
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
# ----------------------