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