C++ main module for mmsd Package  1.0
MATH_StiefelOptimizer.h
Go to the documentation of this file.
1 #ifndef MATH_StiefelOptimizer_H
2 #define MATH_StiefelOptimizer_H
3 
4 
7 #include "MATH_StiefelFunction.h"
8 
29 class MATH_StiefelOptimizer: public virtual CORE_Object {
30  SP_OBJECT(MATH_StiefelOptimizer);
31  // ATTRIBUTES
32 
33 private:
34  // indicates if output is printed
35  tBoolean mIsVerbose;
36  // max number of iterations
37  int mMaxIterationsNumber;
38  // X control stopping criterium
39  // ||X_{k+1}-X_{k}|| < mEpsX
40  double mEpsX;
41  // function control stopping criterium
42  //|F_{k+1} - F_{k}|/(1+|F_{k}|) < mEpsF
43  double mEpsF;
44  // Gradient control stopping criterium
45  //
46  double mEpsG;
47 
48  // linear approximation factor
49  // parameters for control the linear approximation in line search
50  double mRho;
51 
52  // step control
53  // factor for decreasing the step size in the backtracking line search
54  double mEta;
55 
56  //parameters for updating C by HongChao, Zhang
57  double mGamma;
58 
59 
60  double mTau;
61 
62  //interations number to compute mean of xDiff & fDiff during iterations
63  int mStoredIterationsNumber;
64 
65  // number of iterations used in the algorithm
66  int mIterationsNumber;
67 
68  //number of calls to function
69  int mFunctionCallsNumber;
70 
71  // error of projection on X on orthogonal space
72  double mXProjError;
73 
74  // projection G type
75  tFlag mGProjectType;
76 
77 
78  // internal matrices
79  LAP_DoubleFullGeneralMatrix mGradient,mXtG,mU,mV,mH,mM,mHX;
80  LAP_DoubleFullGeneralMatrix mX_old,mDtX_old;
82 
83 private:
84 
85  // ASSOCIATIONS
86  SP::MATH_StiefelFunction mFunction;
87 
88 protected:
89  // METHODS
90 
91  // CONSTRUCTORS
92 
95 
96 
97 
98  // DESTRUCTORS
99 
100 
103  virtual ~MATH_StiefelOptimizer(void);
104 
105 
106 public:
107 
108 
111  static inline SP::MATH_StiefelOptimizer New() {
112  SP::MATH_StiefelOptimizer p(new MATH_StiefelOptimizer(),
114  p->setThis(p);
115  return p;
116  }
117 
118  // SET methods
119 
120 public:
121 
124  inline void setIsVerbose(const tBoolean& v) {
125  mIsVerbose=v;
126  }
129  inline void setMaxIterationsNumber(const int& n) {
130  mMaxIterationsNumber=n;
131  }
134  inline int getMaxIterationsNumber() const {
135  return mMaxIterationsNumber;
136  }
139  inline void setPrecisions(const double& epsX,const double& epsF,const double& epsG) {
140  mEpsX=epsX;
141  mEpsF=epsF;
142  mEpsG=epsG;
143  }
146  inline void getPrecisions(double& epsX,double& epsF,double& epsG)const {
147  epsX=mEpsX;
148  epsF=mEpsF;
149  epsG=mEpsG;
150  }
151 
152 
158  inline void setGProjectionType(const tFlag& f) {
159  mGProjectType=f;
160  }
161 
164  inline void setFunction(SP::MATH_StiefelFunction f) {
165  mFunction=f;
166  }
167 
168 
169 
170 
173  inline void resetFunction() {
174  mFunction.reset();
175  }
176 
177 
178 
181  inline tBoolean hasFunction() const {
182  return (mFunction.get()!=null);
183  };
186  inline const MATH_StiefelFunction* getFunction() const {
187  return mFunction.get();
188  };
192  return mFunction.get();
193  };
194 
197  inline int getFunctionCallsNumber() const {
198  return mFunctionCallsNumber;
199  }
200 
201 
261  tBoolean minimize(LAP_DoubleFullGeneralMatrix& X,double& FValue,double& GNorm);
262 
263 
266  virtual tString toString() const;
267 
268 private:
269 
272  static void verbose(const int& iter,const double& tau,const double& F,const double& GNorm,
273  const double& xDiff,const double& fDiff,const int& nls);
274 
278  void computeNewXWithHInverse(double& tau,LAP_DoubleFullGeneralMatrix& X,LAP_DoubleFullGeneralMatrix& G,double& F,int& nls,
281  const double& step,const double& F_ref,const double& eta, int& ncalls);
282 
286  void computeNewXWithGProject(double& tau,LAP_DoubleFullGeneralMatrix& X,LAP_DoubleFullGeneralMatrix& G,double& F,
287  const tFlag& GProjectType,int& nls,
290  const double& step,const double& F_ref,const double& eta, int& ncalls);
291 
294  static void transform(const tFlag& transformType,
298 
299 };
300 
301 
302 #endif
this class describes a full symmetric matrix for lapack used
Definition: LAP_DoubleFullSymmetricMatrix.h:31
const MATH_StiefelFunction * getFunction() const
get the function
Definition: MATH_StiefelOptimizer.h:186
void getPrecisions(double &epsX, double &epsF, double &epsG) const
get precisions
Definition: MATH_StiefelOptimizer.h:146
void resetFunction()
reset the function to optimize
Definition: MATH_StiefelOptimizer.h:173
int getMaxIterationsNumber() const
get the max iterations number
Definition: MATH_StiefelOptimizer.h:134
This class describes Stiefel optimizer method for MATH_StiefelFunction.
Definition: MATH_StiefelOptimizer.h:29
DEFINE_SPTR(MATH_StiefelOptimizer)
void setFunction(SP::MATH_StiefelFunction f)
set the function to optimize
Definition: MATH_StiefelOptimizer.h:164
#define tBoolean
Definition: types.h:48
void setIsVerbose(const tBoolean &v)
print iteration result on screen
Definition: MATH_StiefelOptimizer.h:124
#define null
Definition: types.h:13
void setPrecisions(const double &epsX, const double &epsF, const double &epsG)
set precisions
Definition: MATH_StiefelOptimizer.h:139
Definition: LAP_DoubleFullGeneralMatrix.h:30
DEFINE_SVPTR(MATH_StiefelOptimizer)
tBoolean minimize(LAP_DoubleFullGeneralMatrix &X, double &FValue, double &GNorm)
minimize the function
Definition: MATH_StiefelOptimizer.cpp:36
virtual tString toString() const
to string
Definition: MATH_StiefelOptimizer.cpp:31
virtual ~MATH_StiefelOptimizer(void)
destroy an StiefelOptimizer Object.
Definition: MATH_StiefelOptimizer.cpp:27
MATH_StiefelOptimizer(void)
create a StiefelOptimizer object
Definition: MATH_StiefelOptimizer.cpp:4
This class describes Stiefel function to optimize.
Definition: MATH_StiefelFunction.h:20
static SP::MATH_StiefelOptimizer New()
create a stiefel optimizer
Definition: MATH_StiefelOptimizer.h:111
tBoolean hasFunction() const
return true if the optimized method has function
Definition: MATH_StiefelOptimizer.h:181
abstract base class for most classes.
Definition: CORE_Object.h:30
#define tString
Definition: types.h:49
void setGProjectionType(const tFlag &f)
set G Projection type
Definition: MATH_StiefelOptimizer.h:158
MATH_StiefelFunction * getFunction()
get the function
Definition: MATH_StiefelOptimizer.h:191
int getFunctionCallsNumber() const
get the number of calls of the function
Definition: MATH_StiefelOptimizer.h:197
void setMaxIterationsNumber(const int &n)
set the max iterations number
Definition: MATH_StiefelOptimizer.h:129
class Free introduced for deleting a smart pointer
Definition: CORE_Object.h:106
#define tFlag
Definition: types.h:14