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
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
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
00209 virtual void setDebug() {debug_ = true;}
00210 virtual bool getDebug() const {return debug_;}
00211
00212
00213
00214 void setDerivOption(DerivOption d) {finitediff = d;}
00215 DerivOption getDerivOption() const {return finitediff;}
00216
00217
00218
00219 void setSpecOption(SpecOption SpecEval) {SpecFlag = SpecEval;}
00220 SpecOption getSpecOption() const {return SpecFlag;}
00221
00222
00223 virtual void reset() = 0;
00224
00225
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
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
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 }
00314 #endif