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