PlayaLineSearchBasedOptBase.hpp

00001 #ifndef PLAYA_LINE_SEARCH_BASED_OPT_BASE_H
00002 #define PLAYA_LINE_SEARCH_BASED_OPT_BASE_H
00003 
00004 #include "PlayaUnconstrainedOptimizerBase.hpp"
00005 #include "PlayaLineSearchBase.hpp"
00006 #include "PlayaOptConvergenceTestBase.hpp"
00007 #include "PlayaObjectiveBase.hpp"
00008 
00009 namespace Playa
00010 {
00011 
00015 class DirectionGeneratorBase : public ObjectWithVerbosity
00016 {
00017 public:
00019   DirectionGeneratorBase() {}
00020 
00022   ~DirectionGeneratorBase() {}
00023 
00025   virtual bool generateDirection(const RCP<ObjectiveBase>& obj,
00026     const Vector<double>& xCur,
00027     const Vector<double>& gradCur,
00028     const double& fCur,
00029     Vector<double>& p) = 0 ;
00030 };
00031 
00032 
00038 class LineSearchBasedOptBase : public UnconstrainedOptimizerBase 
00039 {
00040 public:
00042   LineSearchBasedOptBase(const ParameterList& params);
00044   virtual ~LineSearchBasedOptBase(){}
00045         
00048   OptState run(const RCP<ObjectiveBase>& obj,
00049     const Vector<double>& xInit,
00050     const RCP<ConvergenceMonitor>& convMonitor = null) const ;
00051 
00053   virtual RCP<DirectionGeneratorBase> makeDirectionGenerator() const = 0 ; 
00054 
00056   virtual void print(std::ostream& os) const ;
00057 
00058 protected:
00060   const RCP<LineSearchBase>& lineSearch() const {return lineSearch_;}
00061 
00063   const RCP<OptConvergenceTestBase>& convTest() const {return convTest_;}
00064 
00065 private:
00066   RCP<LineSearchBase> lineSearch_;
00067   RCP<OptConvergenceTestBase> convTest_;
00068   
00069 };
00070 
00071 
00072 }
00073 
00074 #endif

doxygen