00001 #ifndef vnl_lbfgs_h_ 00002 #define vnl_lbfgs_h_ 00003 00004 //: 00005 // \file 00006 // \brief Limited memory Broyden Fletcher Goldfarb Shannon minimization 00007 // \author Andrew W. Fitzgibbon, Oxford RRG, 22 Aug 99 00008 // 00009 // Modifications 00010 // 990822 AWF Initial version. 00011 // dac (Manchester) 28/03/2001: tidied up documentation 00012 // 00013 00014 #include <vnl/vnl_cost_function.h> 00015 #include <vnl/vnl_nonlinear_minimizer.h> 00016 00017 //: Limited memory Broyden Fletcher Goldfarb Shannon minimization 00018 // More complete description ??? 00019 00020 class vnl_lbfgs : public vnl_nonlinear_minimizer { 00021 public: 00022 vnl_lbfgs(); 00023 vnl_lbfgs(vnl_cost_function& f); 00024 00025 bool minimize(vnl_vector<double>& x); 00026 00027 //: Number of direction vectors to keep. 00028 // Sensible values are from about 5 onwards. 00029 int memory; 00030 00031 //: Accuracy of line search. 00032 // If function evaluations are cheap wrt the actual minimization steps, 00033 // change to 0.1, from default of 0.9; 00034 double line_search_accuracy; 00035 00036 //: Default step length in line search. 00037 // If, on tracing, the STP is always 1, then you could try setting this to a 00038 // higher value to see how far along the gradient the minimum typically is. 00039 // Then set this to a number just below that to get maximally far with the 00040 // single evaluation. 00041 double default_step_length; 00042 00043 private: 00044 void init_parameters(); 00045 vnl_cost_function* f_; 00046 // vnl_lbfgs() {} // default constructor makes no sense 00047 // does too. Can set values for parameters. 00048 }; 00049 00050 #endif // vnl_lbfgs_h_