MeanWalker
|
00001 #ifndef MEANWALKER_WALKER_H 00002 00003 #define MEANWALKER_WALKER_H 00004 00005 #include "meanwalkerconfig.h" 00006 #include "function.h" 00007 #include <errut/errorbase.h> 00008 00009 namespace meanwalker 00010 { 00011 00012 class RandomNumberGenerator; 00013 00014 class Walker : public errut::ErrorBase 00015 { 00016 public: 00017 Walker(RandomNumberGenerator *pRng); 00018 ~Walker(); 00019 00021 void setProbabilityFunction(Function *pProbFunction) { m_pProbFunction = pProbFunction; } 00022 00024 virtual size_t getDimension() const { if (m_pProbFunction) return m_pProbFunction->getDimension(); return 0; } 00025 00027 virtual void walk(size_t numSteps) = 0; 00028 00031 virtual const double *getBestCoordinates() const { return 0; } 00032 protected: 00035 virtual void onNewSample(double functionValue, const double *pCoords) { } 00036 00037 RandomNumberGenerator *getRandomNumberGenerator() { return m_pRndGen; } 00038 Function *getProbabilityFunction() { return m_pProbFunction; } 00039 private: 00040 RandomNumberGenerator * const m_pRndGen; 00041 Function *m_pProbFunction; 00042 }; 00043 00044 } // end namespace 00045 00046 00047 #endif // MEANWALKER_WALKER_H 00048