00001 #pragma once
00002 #include "Minimizer.h"
00003 #include "ParameterFilter.h"
00004 #include "Rand.h"
00005 #include "MatrixOperations.h"
00006 #include "ImprovedLevenbergMarquardtMinimizer.h"
00007 #include "ConjugateGradientMinimizer.h"
00008
00009 class CPeriodicQuenchMinimizer : public Minimizer
00010 {
00011 public:
00012 CPeriodicQuenchMinimizer(int RNGSeed, CParameterFilter *pFilter, bool LMflag, int nQuench, int nSteps, double tol=1.0e-02, double T=10, double deltaX=1.0,double c=10);
00013 virtual ~CPeriodicQuenchMinimizer(void);
00014 double Minimize(double *parameters, Minimizable *minimizable);
00015 virtual bool AcceptMove(double Eold, double Enew);
00016 virtual void GenerateMove();
00017 void WriteQuenchedParameters(int iter, double E);
00018 protected:
00019
00020 CMatrixOperations *m_pMO;
00021
00022 Rand *m_pRNG;
00023
00024 CParameterFilter *m_pFilter;
00025
00026 Minimizer *m_pQuencher;
00027
00028 double *m_pdCurrentParameters;
00029
00030 double *m_pdTrialParameters;
00031
00032 int m_iNQuenches;
00033
00034 int m_iNMCSteps;
00035
00036 double m_dC;
00037
00038 double m_dDeltaX;
00039
00040 double m_dSqrLogParDiff;
00041
00042 double m_dTemperature;
00043
00044 double m_dAcceptanceRatio;
00045
00046 int m_iRNGSeed;
00047
00048 double m_dECurrent;
00049 };