00001 #ifndef NLPIOTRTRUSTREGION
00002 #define NLPIOTRTRUSTREGION
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
00017 class NlpValues;
00018 class NlpGrads;
00019 class NlpHessian;
00020
00021 typedef Handle<NlpValues> NlpValuesHandle;
00022 typedef Handle<NlpGrads> NlpGradsHandle;
00023 typedef Handle<NlpHessian> NlpHessianHandle;
00024 typedef Handle<NlpLinsys> NlpLinsysHandle;
00025 typedef Handle<NlpLinsysDiag> NlpLinsysDiagHandle;
00026 typedef Handle<NlpLinsysSol> NlpLinsysSolHandle;
00027 typedef Handle<NlpIotrMerit> NlpIotrMeritHandle;
00028
00033 class NlpIotrTrustRegion : public IotrRefCount {
00034 protected:
00035 NlpGradsHandle mGrads;
00036 NlpHessianHandle mHessian;
00037 NlpLinsysHandle mLinsys;
00038 NlpIotrMeritHandle mMerit;
00039
00040 double mSigma, mElipNorm, mMinValue;
00041 public:
00042 NlpIotrTrustRegion( NlpGrads * grads,
00043 NlpHessian * hess, NlpLinsys * linsys,
00044 NlpIotrMerit * merit );
00045
00046 double sigma() { return mSigma; }
00047 double elipNorm() { return mElipNorm; }
00048 double minValue() { return mMinValue; }
00049
00050 virtual void trustkktqp2(NlpLinsysSol & sol, NlpLinsysDiag & diag,
00051 NlpBounds & bounds,
00052 double delta, double s, double tol);
00053
00054 virtual void slvScaledKkt(NlpLinsysSol & sol,
00055 NlpGrads & grads );
00056 virtual void slvScaledMrt(NlpLinsysSol &sol, NlpLinsysDiag & diag,
00057 NlpBounds & bounds);
00058
00059 virtual double approxNull( NlpLinsysSol &zsol, NlpLinsysDiag & diag,
00060 NlpBounds & bounds );
00061
00062 };
00063
00064 #endif