00001 #ifndef NLPIOTRMERIT
00002 #define NLPIOTRMERIT
00003
00004 #include "IotrRefCount.hh"
00005 #include "IotrHandle.hh"
00006 #include "NlpLinsys.hh"
00007
00008 class IotrVector;
00009
00010 class NlpIterate;
00011 class NlpResiduals;
00012 class NlpIotrMerit;
00013 class NlpValues;
00014 class NlpGrads;
00015 class NlpHessian;
00016 class NlpBounds;
00017 class NlpLinsysSol;
00018 class NlpLinsysDiag;
00019 class NlpResidualShift;
00020
00021 typedef Handle<NlpLinsysSol> NlpLinsysSolHandle;
00022 typedef Handle<NlpValues> NlpValuesHandle;
00023 typedef Handle<NlpGrads> NlpGradsHandle;
00024 typedef Handle<NlpHessian> NlpHessianHandle;
00025 typedef Handle<NlpLinsysDiag> NlpLinsysDiagHandle;
00026 typedef Handle<NlpLinsys> NlpLinsysHandle;
00027
00031 class NlpIotrMerit : public IotrRefCount {
00032 protected:
00033 NlpValuesHandle mValues;
00034 NlpGradsHandle mGrads;
00035 NlpHessianHandle mHessian;
00036 NlpLinsysSolHandle mDelMerit;
00037 public:
00038 NlpIotrMerit( NlpValues * values, NlpGrads * grads, NlpHessian * hess,
00039 NlpLinsysSol * delMerit );
00040 virtual ~NlpIotrMerit();
00041 virtual double evalMerit( NlpIterate & vars,
00042 NlpResiduals & resids, NlpBounds & bnds,
00043 NlpResidualShift & rshift );
00044 virtual void updateDelMerit( NlpIterate & vars, NlpResiduals & resids,
00045 NlpLinsysSol & rhs,
00046 NlpBounds & bnds, NlpResidualShift & rshift );
00047 virtual double dotWithDelMerit( NlpLinsysSol & sol );
00048 virtual void merit2kkt( NlpLinsysSol & sol, NlpLinsysDiag & diag,
00049 NlpBounds & bounds );
00050 virtual double symProdKMerit( NlpLinsysSol & sol, NlpIterate & vars,
00051 NlpResiduals & resids,
00052 NlpResidualShift & rshift,
00053 NlpLinsysDiag & diag,
00054 NlpBounds & bounds );
00055
00056 virtual void inspect();
00057 };
00058
00059 typedef Handle<NlpIotrMerit> NlpIotrMeritHandle;
00060
00061
00062 #endif