00001 // VariableStepsizeAnnealMinimizer.h: interface for the CVariableStepsizeAnnealMinimizer class. 00002 // 00004 00005 #if !defined(AFX_VARIABLESTEPSIZEANNEALMINIMIZER_H__488D7959_852C_425D_A56C_F7357CD77BE2__INCLUDED_) 00006 #define AFX_VARIABLESTEPSIZEANNEALMINIMIZER_H__488D7959_852C_425D_A56C_F7357CD77BE2__INCLUDED_ 00007 00008 #if _MSC_VER > 1000 00009 #pragma once 00010 #endif // _MSC_VER > 1000 00011 00012 #include "SimulatedAnnealingStrategy.h" 00013 #include <fstream> 00014 00015 class CVariableStepsizeAnnealMinimizer : public CSimulatedAnnealingStrategy 00016 { 00017 public: 00018 CVariableStepsizeAnnealMinimizer(int RNGSeed, CParameterFilter *pFilter, double T0=2, double lambda=0.7, double deltaX=1.0,double c=10); 00019 virtual ~CVariableStepsizeAnnealMinimizer(); 00020 virtual bool AcceptMove(double Eold, double Enew); 00021 virtual bool Terminate(); 00022 virtual bool Equilibrated(); 00023 virtual void Cool(); 00024 virtual void InitializeTemperature(Minimizable *minimizable); 00025 virtual void GenerateMove(); 00026 private: 00027 // number of cycles to perform at a particular temperature 00028 int m_iNMCSteps; 00029 // factor for the cooling schedule 00030 double m_dLambda; 00031 // need the current energy for this method 00032 double m_dECurrent; 00033 // stepsize control 00034 double m_dC; 00035 // minimum std. dev. for stepsize 00036 double m_dDeltaX; 00037 // needed for detailed balance correction 00038 double m_dSqrLogParDiff; 00039 }; 00040 00041 #endif // !defined(AFX_VARIABLESTEPSIZEANNEALMINIMIZER_H__488D7959_852C_425D_A56C_F7357CD77BE2__INCLUDED_)