PlayaOptState.hpp

00001 #ifndef PLAYA_OPT_STATE_H
00002 #define PLAYA_OPT_STATE_H
00003 
00004 
00005 #include "PlayaVectorDecl.hpp"
00006 
00007 namespace Playa
00008 {
00009 
00014 enum OptStatus
00015 {
00016   Opt_Continue,
00017   Opt_Converged,
00018   Opt_DirectionFailure,
00019   Opt_ExceededMaxiters,
00020   Opt_LineSearchFailed,
00021   Opt_Crashed
00022 };
00023 
00025 inline std::ostream& operator<<(std::ostream& os, const OptStatus& s)
00026 {
00027   switch (s)
00028   {
00029     case Opt_Continue:
00030       os << "Opt_Continue"; break;
00031     case Opt_Converged:
00032       os << "Opt_Converged"; break;
00033     case Opt_DirectionFailure:
00034       os << "Opt_DirectionFailure"; break;
00035     case Opt_ExceededMaxiters:
00036       os << "Opt_ExceededMaxiters"; break;
00037     case Opt_LineSearchFailed:
00038       os << "Opt_LineSearchFailed"; break;
00039     default:
00040       os << "Opt_Crashed";
00041   }
00042   return os;
00043 }
00044 
00045 
00050 class OptState
00051 {
00052 public:
00054   OptState(const Vector<double>& xCur,
00055     const double& fCur,
00056     const Vector<double>& gradCur);
00057 
00059   OptStatus status() const {return status_;}
00060 
00062   void setStatus(const OptStatus status) {status_ = status;} 
00063 
00065   int iter() const {return iter_;}
00066 
00068   double fCur() const {return fCur_;}
00069 
00071   double fPrev() const {return fPrev_;}
00072 
00074   Vector<double> xCur() const {return xCur_;}
00075 
00077   Vector<double> xPrev() const {return xPrev_;}
00078 
00080   Vector<double> gradCur() const {return gradCur_;}
00081 
00083   Vector<double> gradPrev() const {return gradPrev_;}
00084 
00086   void update(const Vector<double>& xNew, const Vector<double>& gradNew, 
00087     const double& fNew);
00088 
00089 private:
00090   OptStatus status_;
00091   int iter_;
00092 
00093   Vector<double> xCur_;
00094   Vector<double> xPrev_;
00095 
00096   Vector<double> gradCur_;
00097   Vector<double> gradPrev_;
00098 
00099   double fCur_;
00100   double fPrev_;
00101 
00102 };
00103 
00104 }
00105 
00106 #endif
00107 

doxygen