NLP0.h

00001 #ifndef NLP0_h
00002 #define NLP0_h
00003 
00004 #ifdef HAVE_CONFIG_H
00005 #include "OPT++_config.h"
00006 #endif
00007 
00008 #include "NLPBase.h"
00009 #include "Appl_Data.h"
00010 #include "CompoundConstraint.h"
00011 
00012 using std::ostream;
00013 
00014 namespace OPTPP {
00015 
00028 class NLP0: public NLPBase{ 
00029 
00030 protected:
00031   int          dim;                     
00032   NEWMAT::ColumnVector mem_xc;          
00033   real         fvalue;                  
00034   char         nlp_name[80];            
00035   NEWMAT::ColumnVector mem_fcn_accrcy;  
00036   int          nfevals;                 
00037   int          is_expensive;            
00038   bool         debug_;                  
00039   bool         modeOverride;            
00040   double       function_time;           
00041   CompoundConstraint* constraint_;      
00042   NEWMAT::ColumnVector  constraint_value;
00043   int          ncnln;                   
00044   Appl_Data    application;
00045   DerivOption finitediff;               
00046   SpecOption SpecFlag;                  
00047   NEWMAT::ColumnVector partial_grad;
00048   double specF;
00049 
00050 public:
00051 #ifdef WITH_MPI
00052 
00053 // Constructors
00060   NLP0():
00061     dim(0),mem_xc(0),fvalue(1.0e30), mem_fcn_accrcy(0),
00062     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00063     constraint_(0), constraint_value(0), ncnln(0), partial_grad(0)
00064     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00065     SpecFlag = Spec1;}
00072   NLP0(int ndim):
00073     dim(ndim),mem_xc(ndim),fvalue(1.0e30), mem_fcn_accrcy(ndim),
00074     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00075     constraint_(0), constraint_value(0), ncnln(0), partial_grad(ndim)
00076     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00077     SpecFlag = Spec1;}
00085   NLP0(int ndim, int nlncons):
00086     dim(ndim),mem_xc(ndim),fvalue(1.0e30), mem_fcn_accrcy(ndim),
00087     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00088     constraint_(0), constraint_value(nlncons), ncnln(nlncons),
00089     partial_grad(ndim)
00090     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00091     SpecFlag = Spec1; constraint_value = 0;}
00099   NLP0(int ndim, CompoundConstraint* constraint):
00100     dim(ndim),mem_xc(ndim),fvalue(1.0e30), mem_fcn_accrcy(ndim),
00101     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00102     constraint_(constraint), constraint_value(0), ncnln(0), partial_grad(ndim) 
00103     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00104     SpecFlag = Spec1;}
00105 
00106 #else
00107       
00108 // Constructors
00115   NLP0():
00116     dim(0),mem_xc(0),fvalue(1.0e30), mem_fcn_accrcy(0),
00117     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00118     constraint_(0), constraint_value(0), ncnln(0), partial_grad(0) 
00119     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00120     SpecFlag = NoSpec;}
00127   NLP0(int ndim):
00128     dim(ndim),mem_xc(ndim),fvalue(1.0e30), mem_fcn_accrcy(ndim),
00129     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00130     constraint_(0), constraint_value(0), ncnln(0), partial_grad(ndim)
00131     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00132     SpecFlag = NoSpec;}
00140   NLP0(int ndim, int nlncons):
00141     dim(ndim),mem_xc(ndim),fvalue(1.0e30), mem_fcn_accrcy(ndim),
00142     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00143     constraint_(0), constraint_value(nlncons), ncnln(nlncons),
00144     partial_grad(ndim)
00145     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00146     SpecFlag = NoSpec; constraint_value = 0;}
00154   NLP0(int ndim, CompoundConstraint* constraint):
00155     dim(ndim),mem_xc(ndim),fvalue(1.0e30), mem_fcn_accrcy(ndim),
00156     nfevals(0),is_expensive(0),debug_(0), modeOverride(0), function_time(0.0), 
00157     constraint_(constraint), constraint_value(0), ncnln(0),
00158     partial_grad(ndim) 
00159     {mem_xc = 0; mem_fcn_accrcy = DBL_EPSILON; finitediff = ForwardDiff;
00160     SpecFlag = NoSpec;}
00161 
00162 #endif
00163 
00165   virtual void setX(const int i, const real& x)  {mem_xc(i) = x;}
00166   virtual void setX(const NEWMAT::ColumnVector& x)       {mem_xc = x;}
00167 
00168   virtual void setF(const real& fx)              {fvalue = fx;}
00169 
00170   virtual void setIsExpensive(const int e)       {is_expensive = e;}
00171   virtual void setFcnAccrcy(const int i, const real& accrcy)  
00172                                                    {mem_fcn_accrcy(i)=accrcy;}
00173   virtual void setFcnAccrcy(const NEWMAT::ColumnVector& accrcy) {mem_fcn_accrcy=accrcy;}
00174 
00178   virtual int  getDim()                 const {return dim;}
00182   virtual int  getFevals()              const {return nfevals;}
00186   virtual int  getIsExpensive()         const {return is_expensive;}
00187 
00188   virtual void setModeOverride(bool override_mode) {modeOverride = override_mode;}
00189    virtual bool getModeOverride() const {return modeOverride;}
00190 
00194   virtual real getF()                   const {return fvalue;}
00198   virtual NEWMAT::ColumnVector getFcnAccrcy()   const {return mem_fcn_accrcy;}
00202   virtual NEWMAT::ColumnVector getXc()          const {return mem_xc;}
00206   virtual real getFcnTime()             const {return function_time;}
00207 
00208 // Debugging tools
00209   virtual void setDebug()       {debug_ = true;}
00210   virtual bool getDebug()       const {return debug_;}
00211 
00212   // Set and get the finite differencing options.
00213 
00214   void setDerivOption(DerivOption d) {finitediff = d;}
00215   DerivOption getDerivOption() const {return finitediff;}
00216 
00217   // Set and get the speculative gradient options.
00218 
00219   void setSpecOption(SpecOption SpecEval) {SpecFlag = SpecEval;}
00220   SpecOption getSpecOption() const {return SpecFlag;}
00221 
00222 // Function to reset parameter values 
00223   virtual void reset() = 0;   
00224 
00225 // Functions for evaluating the objective fcn 
00226   virtual void initFcn() = 0;   
00227   virtual void eval()    = 0;
00228   virtual real evalF()   = 0;
00229   virtual real evalF(const NEWMAT::ColumnVector& x) = 0;
00230 
00231   // Constraint helper functions
00235   int  getNumOfCons()  const { return constraint_->getNumOfCons();}
00239   int  getNumOfNLCons()  const { return constraint_->getNumOfNLCons();}
00243   NEWMAT::ColumnVector  getConstraintValue()  const { return constraint_value;}
00245   void  setConstraintValue(const NEWMAT::ColumnVector& cfx)  { constraint_value = cfx;}
00249   bool hasConstraints();
00253   void printConstraints();
00257   CompoundConstraint* getConstraints() { return constraint_;}
00259   void setConstraints(CompoundConstraint* constraintSet) 
00260                 { constraint_ = constraintSet;}
00261 
00263   virtual ~NLP0() {;}        
00264 
00265 //------------------------------------------------------------------------
00266 // These are defined elsewhere
00267 //------------------------------------------------------------------------
00268 
00270   NEWMAT::ColumnVector FDGrad(const NEWMAT::ColumnVector &, 
00271     const NEWMAT::ColumnVector &, double &, NEWMAT::ColumnVector &);        
00272   NEWMAT::ColumnVector BDGrad(const NEWMAT::ColumnVector &, 
00273     const NEWMAT::ColumnVector &, double &, NEWMAT::ColumnVector &);
00274   NEWMAT::ColumnVector CDGrad(const NEWMAT::ColumnVector &,
00275     const NEWMAT::ColumnVector &, double &, NEWMAT::ColumnVector &);
00276   NEWMAT::SymmetricMatrix FD2Hessian(NEWMAT::ColumnVector &);
00277 
00279   NEWMAT::Matrix CONFDGrad(const NEWMAT::ColumnVector &);        
00280   NEWMAT::Matrix CONBDGrad(const NEWMAT::ColumnVector &);        
00281   NEWMAT::Matrix CONCDGrad(const NEWMAT::ColumnVector &);        
00282 
00284   virtual NEWMAT::ColumnVector evalG() = 0;
00285   virtual NEWMAT::ColumnVector evalG(const NEWMAT::ColumnVector& x) = 0;
00286   virtual NEWMAT::SymmetricMatrix evalH() = 0;
00287   virtual NEWMAT::SymmetricMatrix evalH(NEWMAT::ColumnVector& x) = 0;
00288 
00290   virtual real evalLagrangian(const NEWMAT::ColumnVector& x, NEWMAT::ColumnVector& mult,
00291     const NEWMAT::ColumnVector& type) = 0;
00293   virtual NEWMAT::ColumnVector evalLagrangianGradient(const NEWMAT::ColumnVector& x,
00294     const NEWMAT::ColumnVector& mult, const NEWMAT::ColumnVector& type) = 0;
00295 
00297   virtual NEWMAT::ColumnVector evalCF(const NEWMAT::ColumnVector& x) = 0;
00299   virtual NEWMAT::Matrix  evalCG(const NEWMAT::ColumnVector& x) = 0;
00300   virtual NEWMAT::SymmetricMatrix evalCH(NEWMAT::ColumnVector& x) = 0;
00302   virtual OptppArray<NEWMAT::SymmetricMatrix> evalCH(NEWMAT::ColumnVector& x, int darg) = 0;
00303   virtual void evalC(const NEWMAT::ColumnVector& x) = 0;
00304 
00306   virtual void printState(char *); 
00308   virtual void fPrintState(ostream *, char *); 
00310   void saveState(); 
00311 };
00312 
00313 } // namespace OPTPP
00314 #endif
Generated on Mon Jan 24 12:04:37 2011 for FASTlib by  doxygen 1.6.3