BFGSOptimizer.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //////////////////////////////////////////////////////////////////////
  2. //
  3. // NewtonMethodOptimizer.cpp: Implementation of the NewtonMethodOptimizer
  4. // Optimizer class.
  5. //
  6. // Written by Matthias Wacker
  7. //
  8. //////////////////////////////////////////////////////////////////////
  9. #include "optimization/BFGSOptimizer.h"
  10. BFGSOptimizer::BFGSOptimizer(OptLogBase *loger) : SuperClass(loger)
  11. {
  12. }
  13. BFGSOptimizer::BFGSOptimizer( const BFGSOptimizer &opt) : SuperClass(opt)
  14. {
  15. }
  16. BFGSOptimizer::~BFGSOptimizer()
  17. {
  18. }
  19. void BFGSOptimizer::init()
  20. {
  21. SuperClass::init();
  22. }
  23. BFGSOptimizer & BFGSOptimizer::operator=(const BFGSOptimizer &opt)
  24. {
  25. /*
  26. avoid self-copy
  27. */
  28. if(this != &opt)
  29. {
  30. /*
  31. =operator of SuperClass
  32. */
  33. SuperClass::operator=(opt);
  34. }
  35. return *this;
  36. }
  37. void BFGSOptimizer::updateIterationMatrix()
  38. {
  39. matrix_type pk = m_parameters - m_oldParams;
  40. matrix_type rk = m_gradient - m_oldGradient;
  41. matrix_type rkt=!rk;
  42. matrix_type pkt=!pk;
  43. m_IterationMatrix = m_IterationMatrix
  44. + (rk * rkt) * (1.0/ (rkt * pk)[0][0])
  45. - (m_IterationMatrix * pk * pkt * m_IterationMatrix) * (1.0/ (pkt * m_IterationMatrix * pk)[0][0]);
  46. }