MeanWalker

walker.h

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