00001 #ifndef NLPIOTRLINESEARCH 00002 #define NLPIOTRLINESEARCH 00003 00004 class NlpResiduals; 00005 class NlpIterate; 00006 class NlpBounds; 00007 class Nlp; 00008 00009 #include "IotrHandle.hh" 00010 #include "IotrRefCount.hh" 00011 #include "IotrVector.hh" 00012 #include "NlpLinsys.hh" 00013 #include "NlpLinsysDiag.hh" 00014 #include "NlpLinsysSol.hh" 00015 #include "NlpIotrMerit.hh" 00016 #include "NlpResiduals.hh" 00017 #include "Nlp.hh" 00018 00019 class NlpValues; 00020 class NlpGrads; 00021 class NlpHessian; 00022 00023 typedef Handle<NlpValues> NlpValuesHandle; 00024 typedef Handle<NlpGrads> NlpGradsHandle; 00025 typedef Handle<NlpHessian> NlpHessianHandle; 00026 typedef Handle<NlpLinsys> NlpLinsysHandle; 00027 typedef Handle<NlpLinsysDiag> NlpLinsysDiagHandle; 00028 typedef Handle<NlpLinsysSol> NlpLinsysSolHandle; 00029 typedef Handle<NlpIotrMerit> NlpIotrMeritHandle; 00030 typedef Handle<NlpIterate> NlpIterateHandle; 00031 00036 class NlpIotrLineSearch : public IotrRefCount { 00037 protected: 00038 NlpValuesHandle mValues; 00039 NlpGradsHandle mGrads; 00040 NlpHessianHandle mHessian; 00041 NlpLinsysHandle mLinsys; 00042 NlpLinsysDiagHandle mDiag; 00043 NlpLinsysSolHandle mSol; 00044 NlpIotrMeritHandle mMerit; 00045 00046 double mSigma, mElipNorm, mMinValue; 00047 public: 00048 NlpIotrLineSearch( NlpValues * values, 00049 NlpGrads * grads, 00050 NlpHessian * hess, NlpLinsys * linsys, 00051 NlpLinsysDiag * diag, NlpLinsysSol * sol, 00052 NlpIotrMerit * merit ); 00053 00054 double sigma() { return mSigma; } 00055 double elipNorm() { return mElipNorm; } 00056 double minValue() { return mMinValue; } 00057 00058 00059 virtual void slvScaledKkt(NlpBounds &bounds); 00060 virtual void slvScaledMrt(NlpLinsysSol &sol, NlpIterate &vars, 00061 NlpBounds & bounds); 00062 virtual void shiftedNewtonKkt( NlpIterate & step, NlpIterate & vars, 00063 NlpResiduals & resid, NlpBounds & bounds, 00064 double shift ); 00065 00066 virtual void shiftedNewtonMerit(NlpIterate & step, NlpIterate & vars, 00067 NlpResiduals & resid, NlpBounds & bounds, 00068 double shift ); 00069 00070 virtual double approxNull( NlpLinsysSol &zsol, NlpIterate &vars, 00071 NlpBounds & bounds ); 00072 00073 virtual double lineSearch( NlpValues &vals, 00074 NlpIterate &vars, NlpLinsysSol &sol, 00075 NlpResiduals &resids, NlpResidualShift & rshift, 00076 NlpBounds &bounds, Nlp &nlp, 00077 double delMq, 00078 int maxls, 00079 double tau, int lsfail ); 00080 00081 }; 00082 00083 typedef Handle<NlpIotrLineSearch> NlpIotrLineSearchHandle; 00084 00085 #endif