ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/NLModel.hpp
Revision: 995
Committed: Wed Jan 28 20:40:26 2004 UTC (20 years, 5 months ago) by tim
File size: 3672 byte(s)
Log Message:
revision of NLModel

File Contents

# User Rev Content
1 tim 995 #ifndef _NLMODEL_H_
2     #define _NLMODEL_H_
3    
4     #include <vector>
5    
6     #include "SymMatrix.hpp"
7     #include "Functor.hpp"
8    
9     using namespace std;
10    
11     typedef enum FDType {backward, forward, central} ;
12    
13     typedef enum {linear, quadratic, general};
14    
15     //abstract class of nonlinear optimization model
16     class NLModel{
17     public:
18     NLModel(ConstraintList* cons) {constraints = cons;}
19     virtual ~NLModel() { if (constraints != NULL) delete constraints;}
20     virtual void setX(const vector<double>& x)= 0;
21    
22     virtual void setF(const vector<double>& fx)= 0;
23    
24     virtual int getDim() const = 0;
25    
26     bool hasConstraints() { return constraints == NULL ? false : true;}
27     int getConsType() { return constrains->getConsType();}
28    
29     virtual double calcF() = 0;
30     virtual double calcF(const vector<double>& x) = 0;
31     virtual vector<double> calcGrad() = 0;
32     virtual vector<double> calcGrad(vector<double>& x) = 0;
33     virtual SymMatrix calcHessian() = 0;
34     virtual SymMatrix calcHessian(vector<double>& x) = 0;
35    
36     #ifdef IS_MPI
37     void setMPIINITFunctor(MPIINITFunctor* func);
38     #endif
39    
40     protected:
41     ConstraintList* constraints; //constraints of nonlinear optimization model
42     int numOfFunEval; //number of function evaluation
43    
44     #ifdef IS_MPI
45     bool mpiInitFlag;
46     MPIINITFunctor * mpiInitFunc;
47     int localDim;
48     #endif
49     };
50    
51     //abstract class of nonlinear optimization model without derivatives
52     class NLModel0 : public NLModel{
53     public:
54    
55     NLModel0(int dim, ConstraintList* cons = NULL);
56     ~NLModel0() {}
57    
58     protected:
59    
60     //Using finite difference methods to approximate the gradient
61     //It is inappropriate to apply these methods in large scale problem
62    
63     vector<double> BackwardGrad(const vector<double>& x, double& fx, vector<double>& grad);
64     vector<double> ForwardGrad(const vector<double>& x, double& fx, vector<double>& grad);
65     vector<double> CentralGrad(const vector<double>& x, double& fx, vector<double>& grad);
66    
67     //Using finite difference methods to approximate the hessian
68     //It is inappropriate to apply this method in large scale problem
69     virtual SymMatrix FDHessian(vector<double>& sx);
70    
71     FDType fdType;
72     vector<double> currentX;
73     };
74    
75     //abstract class of nonlinear optimization model with first derivatives
76     class NLModel1 : public NLModel0{
77     public:
78    
79     //Using finite difference methods to approximate the hessian
80     //It is inappropriate to apply this method in large scale problem
81     virtual SymMatrix FDHessian(vector<double>& sx);
82    
83     protected:
84     vector<double> currentGrad;
85     };
86    
87     class NLF1 : NLModel1{
88     public:
89     NLModel1(int dim, ObjFunctor1* func , ConstraintList* cons = NULL);
90     NLModel1(int dim, ConstraintList* cons = NULL);
91    
92     virtual double calcF();
93     virtual double calcF(const vector<double>& x);
94     virtual vector<double> calcGrad();
95     virtual vector<double> calcGrad(vector<double>& x);
96     virtual SymMatrix calcHessian() ;
97     virtual SymMatrix calcHessian(vector<double>& x) ;
98    
99     protected:
100     ObjFunctor1* objfunc;
101     };
102    
103    
104     /*
105     class NLModel2 : public NLModel1{
106     public:
107    
108     NLModel2(int dim, ObjFunctor2* func , ConstraintList* cons = NULL);
109     ~NLModel2() {}
110    
111     virtual double calcF();
112     virtual double calcF(const vector<double>& x);
113     virtual vector<double> calcGrad();
114     virtual vector<double> calcGrad(vector<double>& x);
115     virtual SymMatrix calcHessian() ;
116     virtual SymMatrix calcHessian(vector<double>& x) ;
117    
118     protected:
119    
120     SymMatrix hessian;
121     ObjFunctor2* objFunc;
122     };
123     */
124     #endif

Properties

Name Value
svn:executable *