X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FdaComposant%2FdaAlgorithms%2FDerivativeFreeOptimization.py;h=78e2a3068b523be0d209d628dc0ec5e656ce6547;hb=44f76651d9b8e83d196d710205de80900f206472;hp=f3230d64fdfe98e5a8f72b762d938f85a6c96c00;hpb=c2d577745cba62e16eb49532f861609751ff1409;p=modules%2Fadao.git diff --git a/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py b/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py index f3230d6..78e2a30 100644 --- a/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py +++ b/src/daComposant/daAlgorithms/DerivativeFreeOptimization.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2008-2018 EDF R&D +# Copyright (C) 2008-2021 EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -33,7 +33,14 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): default = "BOBYQA", typecast = str, message = "Minimiseur utilisé", - listval = ["BOBYQA", "COBYLA", "NEWUOA", "POWELL", "SIMPLEX", "SUBPLEX"], + listval = [ + "BOBYQA", + "COBYLA", + "NEWUOA", + "POWELL", + "SIMPLEX", + "SUBPLEX", + ], ) self.defineRequiredParameter( name = "MaximumNumberOfSteps", @@ -84,6 +91,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): typecast = tuple, message = "Liste de calculs supplémentaires à stocker et/ou effectuer", listval = [ + "Analysis", "BMA", "CostFunctionJ", "CostFunctionJb", @@ -91,6 +99,7 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): "CostFunctionJAtCurrentOptimum", "CostFunctionJbAtCurrentOptimum", "CostFunctionJoAtCurrentOptimum", + "CurrentIterationNumber", "CurrentOptimum", "CurrentState", "IndexOfOptimum", @@ -111,9 +120,14 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): self.requireInputArguments( mandatory= ("Xb", "Y", "HO", "R", "B" ), ) + self.setAttributes(tags=( + "Optimization", + "NonLinear", + "MetaHeuristic", + )) 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(Parameters, Xb, Y, R, B, Q) + self._pre_run(Parameters, Xb, Y, U, HO, EM, CM, R, B, Q) # if not PlatformInfo.has_nlopt and not self._parameters["Minimizer"] in ["COBYLA", "POWELL", "SIMPLEX"]: logging.warning("%s Minimization by SIMPLEX is forced because %s is unavailable (COBYLA, POWELL are also available)"%(self._name,self._parameters["Minimizer"])) @@ -136,10 +150,10 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): _HX = Hm( _X ) _HX = numpy.asmatrix(numpy.ravel( _HX )).T _Innovation = Y - _HX - if "SimulatedObservationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"] or \ - "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("SimulatedObservationAtCurrentState") or \ + self._toStore("SimulatedObservationAtCurrentOptimum"): self.StoredVariables["SimulatedObservationAtCurrentState"].store( _HX ) - if "InnovationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("InnovationAtCurrentState"): self.StoredVariables["InnovationAtCurrentState"].store( _Innovation ) # if QualityMeasure in ["AugmentedWeightedLeastSquares","AWLS","DA"]: @@ -164,27 +178,28 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): # J = float( Jb ) + float( Jo ) # + self.StoredVariables["CurrentIterationNumber"].store( len(self.StoredVariables["CostFunctionJ"]) ) self.StoredVariables["CostFunctionJb"].store( Jb ) self.StoredVariables["CostFunctionJo"].store( Jo ) self.StoredVariables["CostFunctionJ" ].store( J ) - if "IndexOfOptimum" in self._parameters["StoreSupplementaryCalculations"] or \ - "CurrentOptimum" in self._parameters["StoreSupplementaryCalculations"] or \ - "CostFunctionJAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"] or \ - "CostFunctionJbAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"] or \ - "CostFunctionJoAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"] or \ - "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("IndexOfOptimum") or \ + self._toStore("CurrentOptimum") or \ + self._toStore("CostFunctionJAtCurrentOptimum") or \ + self._toStore("CostFunctionJbAtCurrentOptimum") or \ + self._toStore("CostFunctionJoAtCurrentOptimum") or \ + self._toStore("SimulatedObservationAtCurrentOptimum"): IndexMin = numpy.argmin( self.StoredVariables["CostFunctionJ"][nbPreviousSteps:] ) + nbPreviousSteps - if "IndexOfOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("IndexOfOptimum"): self.StoredVariables["IndexOfOptimum"].store( IndexMin ) - if "CurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("CurrentOptimum"): self.StoredVariables["CurrentOptimum"].store( self.StoredVariables["CurrentState"][IndexMin] ) - if "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("SimulatedObservationAtCurrentOptimum"): self.StoredVariables["SimulatedObservationAtCurrentOptimum"].store( self.StoredVariables["SimulatedObservationAtCurrentState"][IndexMin] ) - if "CostFunctionJAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("CostFunctionJAtCurrentOptimum"): self.StoredVariables["CostFunctionJAtCurrentOptimum" ].store( self.StoredVariables["CostFunctionJ" ][IndexMin] ) - if "CostFunctionJbAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("CostFunctionJbAtCurrentOptimum"): self.StoredVariables["CostFunctionJbAtCurrentOptimum"].store( self.StoredVariables["CostFunctionJb"][IndexMin] ) - if "CostFunctionJoAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("CostFunctionJoAtCurrentOptimum"): self.StoredVariables["CostFunctionJoAtCurrentOptimum"].store( self.StoredVariables["CostFunctionJo"][IndexMin] ) return J # @@ -379,28 +394,28 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): # # Calculs et/ou stockages supplémentaires # --------------------------------------- - if "OMA" in self._parameters["StoreSupplementaryCalculations"] or \ - "SimulatedObservationAtOptimum" in self._parameters["StoreSupplementaryCalculations"]: - if "SimulatedObservationAtCurrentState" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("OMA" ) or \ + self._toStore("SimulatedObservationAtOptimum"): + if self._toStore("SimulatedObservationAtCurrentState"): HXa = self.StoredVariables["SimulatedObservationAtCurrentState"][IndexMin] - elif "SimulatedObservationAtCurrentOptimum" in self._parameters["StoreSupplementaryCalculations"]: + elif self._toStore("SimulatedObservationAtCurrentOptimum"): HXa = self.StoredVariables["SimulatedObservationAtCurrentOptimum"][-1] else: HXa = Hm(Xa) - if "Innovation" in self._parameters["StoreSupplementaryCalculations"] or \ - "OMB" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("Innovation") or \ + self._toStore("OMB"): d = Y - HXb - if "Innovation" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("Innovation"): self.StoredVariables["Innovation"].store( numpy.ravel(d) ) - if "OMB" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("OMB"): self.StoredVariables["OMB"].store( numpy.ravel(d) ) - if "BMA" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("BMA"): self.StoredVariables["BMA"].store( numpy.ravel(Xb) - numpy.ravel(Xa) ) - if "OMA" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("OMA"): self.StoredVariables["OMA"].store( numpy.ravel(Y) - numpy.ravel(HXa) ) - if "SimulatedObservationAtBackground" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("SimulatedObservationAtBackground"): self.StoredVariables["SimulatedObservationAtBackground"].store( numpy.ravel(Hm(Xb)) ) - if "SimulatedObservationAtOptimum" in self._parameters["StoreSupplementaryCalculations"]: + if self._toStore("SimulatedObservationAtOptimum"): self.StoredVariables["SimulatedObservationAtOptimum"].store( numpy.ravel(HXa) ) # self._post_run() @@ -408,4 +423,4 @@ class ElementaryAlgorithm(BasicObjects.Algorithm): # ============================================================================== if __name__ == "__main__": - print('\n AUTODIAGNOSTIC \n') + print('\n AUTODIAGNOSTIC\n')