123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- #ifndef _OPTIMIZATIONPROBLEMSECOND_OPTIMIZATION_H
- #define _OPTIMIZATIONPROBLEMSECOND_OPTIMIZATION_H
- #include <iostream>
- #include <core/vector/MatrixT.h>
- #include <core/optimization/gradientBased/OptimizationProblemFirst.h>
- namespace NICE {
- class OptimizationProblemSecond : public OptimizationProblemFirst {
- public:
-
- inline OptimizationProblemSecond(unsigned int dimension)
- : OptimizationProblemFirst(dimension), m_hessianCached(false) {}
- virtual ~OptimizationProblemSecond();
- inline void computeGradientAndHessian() {
- m_gradientNormCached = false;
- m_hessianCache.resize(dimension(), dimension());
- computeGradientAndHessian(m_gradientCache, m_hessianCache);
- m_gradientCached = true;
- m_hessianCached = true;
- }
-
- inline const Matrix& hessianCached() {
- return m_hessianCache;
- }
-
- inline const Matrix& hessianCurrent() {
- if (!m_hessianCached) {
- computeGradientAndHessian();
- }
- return m_hessianCache;
- }
-
- virtual void invalidateCaches() {
- OptimizationProblemFirst::invalidateCaches();
- m_hessianCached = false;
- }
- protected:
-
- virtual void computeGradientAndHessian(Vector& newGradient,
- Matrix& newHessian) = 0;
-
- virtual void computeGradient(Vector& newGradient);
- private:
- bool m_hessianCached;
- Matrix m_hessianCache;
- };
- };
- #endif
|