00001 #pragma once 00002 #include <vector> 00003 #include <iostream> 00004 #include <float.h> 00005 #include <fstream> 00006 #include <iomanip> 00007 #include "Minimizer.h" 00008 #include "Minimizable.h" 00009 #include "MatrixOperations.h" 00010 #include "ParameterFilter.h" 00011 using namespace std; 00012 00013 class CNelderMeadSimplexMinimizer : public Minimizer 00014 { 00015 public: 00016 CNelderMeadSimplexMinimizer(); 00017 CNelderMeadSimplexMinimizer(CParameterFilter *pFilter, int nIterations=500, double lambda=1.0, double tol=1.0e-06); 00018 virtual ~CNelderMeadSimplexMinimizer(void); 00019 double Minimize(double *parameters, Minimizable *minimizable); 00020 void InitializeSimplex(double *parameters); 00021 void EvaluateSimplex(); 00022 void ComputePointSum(); 00023 int GetNParameters() {return nParameters;} 00024 bool CheckFuncTol(); 00025 double TryPoint(double exfac); 00026 private: 00027 CMatrixOperations *m_pMO; 00028 Minimizable *m_pMinimizable; 00029 std::vector<double *> m_vpdSimplex; 00030 CParameterFilter *m_pFilter; 00031 double *m_pdSimplexCosts; 00032 double *m_pdPointSum; 00033 double m_dLambda; 00034 double m_dTol; 00035 int m_iHi, m_iLo, m_iNextHi; 00036 int m_iNIterations; 00037 };