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