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