typecast = bool,
message = "Calcul de la covariance a posteriori",
)
+ self.defineRequiredParameter(
+ name = "StoreInternalVariables",
+ default = False,
+ typecast = bool,
+ message = "Stockage des variables internes ou intermédiaires du calcul",
+ )
def run(self, Xb=None, Y=None, H=None, M=None, R=None, B=None, Q=None, Parameters=None):
"""
else:
Bounds = None
#
+ # Correction pour pallier a un bug de TNC sur le retour du Minimum
+ if self._parameters.has_key("Minimizer") is "TNC":
+ self.setParameterValue("StoreInternalVariables",True)
+ #
# Opérateur d'observation
# -----------------------
Hm = H["Direct"].appliedTo
logging.debug("%s CostFunction Jb = %s"%(self._name, Jb))
logging.debug("%s CostFunction Jo = %s"%(self._name, Jo))
logging.debug("%s CostFunction J = %s"%(self._name, J))
- self.StoredVariables["CurrentState"].store( _X.A1 )
+ if self._parameters["StoreInternalVariables"]:
+ self.StoredVariables["CurrentState"].store( _X.A1 )
self.StoredVariables["CostFunctionJb"].store( Jb )
self.StoredVariables["CostFunctionJo"].store( Jo )
self.StoredVariables["CostFunctionJ" ].store( J )
else:
raise ValueError("Error in Minimizer name: %s"%self._parameters["Minimizer"])
#
- # Correction pour pallier a un bug de TNC sur le retour du Minimum
- # ----------------------------------------------------------------
StepMin = numpy.argmin( self.StoredVariables["CostFunctionJ"].valueserie() )
MinJ = self.StoredVariables["CostFunctionJ"].valueserie(step = StepMin)
- Minimum = self.StoredVariables["CurrentState"].valueserie(step = StepMin)
+ #
+ # Correction pour pallier a un bug de TNC sur le retour du Minimum
+ # ----------------------------------------------------------------
+ if self._parameters["StoreInternalVariables"]:
+ Minimum = self.StoredVariables["CurrentState"].valueserie(step = StepMin)
#
logging.debug("%s %s Step of min cost = %s"%(self._name, self._parameters["Minimizer"], StepMin))
logging.debug("%s %s Minimum cost = %s"%(self._name, self._parameters["Minimizer"], MinJ))
Hessienne = []
nb = len(Xini)
for i in range(nb):
- ee = numpy.matrix(numpy.zeros(nb)).T
- ee[i] = 1.
- Hessienne.append( ( BI*ee + Ha((Xa,RI*Hm(ee))) ).A1 )
+ _ee = numpy.matrix(numpy.zeros(nb)).T
+ _ee[i] = 1.
+ _HmEE = Hm(_ee)
+ _HmEE = numpy.asmatrix(_HmEE).flatten().T
+ Hessienne.append( ( BI*_ee + Ha((Xa,RI*_HmEE)) ).A1 )
Hessienne = numpy.matrix( Hessienne )
A = Hessienne.I
self.StoredVariables["APosterioriCovariance"].store( A )
default = 15000,
typecast = int,
message = "Nombre maximal de pas d'optimisation",
- minval = -1
+ minval = -1,
)
self.defineRequiredParameter(
name = "CostDecrementTolerance",
typecast = float,
message = "Maximum des composantes du gradient lors de l'arrêt",
)
+ self.defineRequiredParameter(
+ name = "StoreInternalVariables",
+ default = False,
+ typecast = bool,
+ message = "Stockage des variables internes ou intermédiaires du calcul",
+ )
def run(self, Xb=None, Y=None, H=None, M=None, R=None, B=None, Q=None, Parameters=None):
"""
else:
Bounds = None
#
+ # Correction pour pallier a un bug de TNC sur le retour du Minimum
+ if self._parameters.has_key("Minimizer") is "TNC":
+ self.setParameterValue("StoreInternalVariables",True)
+ #
# Opérateur d'observation
# -----------------------
Hm = H["Direct"].appliedTo
logging.debug("%s CostFunction Jb = %s"%(self._name, Jb))
logging.debug("%s CostFunction Jo = %s"%(self._name, Jo))
logging.debug("%s CostFunction J = %s"%(self._name, J))
- self.StoredVariables["CurrentState"].store( _X.A1 )
+ if self._parameters["StoreInternalVariables"]:
+ self.StoredVariables["CurrentState"].store( _X.A1 )
self.StoredVariables["CostFunctionJb"].store( Jb )
self.StoredVariables["CostFunctionJo"].store( Jo )
self.StoredVariables["CostFunctionJ" ].store( J )
else:
raise ValueError("Error in Minimizer name: %s"%self._parameters["Minimizer"])
#
- # Correction pour pallier a un bug de TNC sur le retour du Minimum
- # ----------------------------------------------------------------
StepMin = numpy.argmin( self.StoredVariables["CostFunctionJ"].valueserie() )
MinJ = self.StoredVariables["CostFunctionJ"].valueserie(step = StepMin)
- Minimum = self.StoredVariables["CurrentState"].valueserie(step = StepMin)
+ #
+ # Correction pour pallier a un bug de TNC sur le retour du Minimum
+ # ----------------------------------------------------------------
+ if self._parameters["StoreInternalVariables"]:
+ Minimum = self.StoredVariables["CurrentState"].valueserie(step = StepMin)
#
logging.debug("%s %s Step of min cost = %s"%(self._name, self._parameters["Minimizer"], StepMin))
logging.debug("%s %s Minimum cost = %s"%(self._name, self._parameters["Minimizer"], MinJ))
self.__algorithmFile = None
self.__diagnosticFile = None
self.__H = {}
+ self.__M = {}
# ==============================================================================
if __name__ == "__main__":
self.__tags.append( dict(tags))
self.__tagkeys.update(dict(tags))
#
- if self.__dynamic: self.__replot()
+ if self.__dynamic: self.__replots()
for hook, parameters, scheduler in self.__dataobservers:
if self.__step in scheduler:
hook( self, parameters )
except:
raise TypeError("Base type is incompatible with numpy")
- def __preplot(self,
+ def __preplots(self,
title = "",
xlabel = "",
ylabel = "",
self.__ltitle = ltitle
self.__pause = pause
- def plot(self, item=None, step=None,
+ def plots(self, item=None, step=None,
steps = None,
title = "",
xlabel = "",
qui est automatiquement complétée par le numéro du
fichier calculé par incrément simple de compteur
- dynamic : effectue un affichage des valeurs à chaque stockage
- (au-delà du second) La méthode "plot" permet de déclarer
- l'affichage dynamique, et c'est la méthode "__replot"
- qui est utilisée pour l'effectuer
+ (au-delà du second). La méthode "plots" permet de
+ déclarer l'affichage dynamique, et c'est la méthode
+ "__replots" qui est utilisée pour l'effectuer
- persist : booléen indiquant que la fenêtre affichée sera
conservée lors du passage au dessin suivant
Par défaut, persist = False
"""
import os
if not self.__dynamic:
- self.__preplot(title, xlabel, ylabel, ltitle, geometry, persist, pause )
+ self.__preplots(title, xlabel, ylabel, ltitle, geometry, persist, pause )
if dynamic:
self.__dynamic = True
if len(self.__values) == 0: return 0
if self.__pause:
raw_input('Please press return to continue...\n')
- def __replot(self):
+ def __replots(self):
"""
Affichage dans le cas du suivi dynamique de la variable
"""
# On pourrait aussi utiliser les autres attributs d'une "matrix", comme
# "tofile", "min"...
- def stepplot(self,
+ def plot(self,
steps = None,
title = "",
xlabel = "",
D.store(vect2)
D.store(vect3)
print "Affichage graphique de l'ensemble du stockage sur une même image"
- D.stepplot(
+ D.plot(
title = "Tous les vecteurs",
filename="vecteurs.ps",
xlabel = "Axe X",
print "Stockage d'un quatrième vecteur de longueur différente"
D.store(vect4)
print "Affichage graphique séparé du dernier stockage"
- D.plot(
+ D.plots(
item = 3,
title = "Vecteurs",
filename = "vecteur",
print "======> Affichage graphique dynamique d'objets"
OBJET_DE_TEST = Persistence("My object", unit="", basetype=float)
D = OBJET_DE_TEST
- D.plot(
+ D.plots(
dynamic = True,
title = "Valeur suivie",
xlabel = "Pas",