lbfgs.hpp
Go to the documentation of this file.
1 
13 #ifndef MLPACK_CORE_OPTIMIZERS_LBFGS_LBFGS_HPP
14 #define MLPACK_CORE_OPTIMIZERS_LBFGS_LBFGS_HPP
15 
16 #include <mlpack/prereqs.hpp>
18 
19 namespace mlpack {
20 namespace optimization {
21 
35 class L_BFGS
36 {
37  public:
55  L_BFGS(const size_t numBasis = 10, /* same default as scipy */
56  const size_t maxIterations = 10000, /* many but not infinite */
57  const double armijoConstant = 1e-4,
58  const double wolfe = 0.9,
59  const double minGradientNorm = 1e-6,
60  const double factr = 1e-15,
61  const size_t maxLineSearchTrials = 50,
62  const double minStep = 1e-20,
63  const double maxStep = 1e20);
64 
71  const std::pair<arma::mat, double>& MinPointIterate() const;
72 
86  template<typename FunctionType>
87  double Optimize(FunctionType& function, arma::mat& iterate);
88 
90  size_t NumBasis() const { return numBasis; }
92  size_t& NumBasis() { return numBasis; }
93 
95  size_t MaxIterations() const { return maxIterations; }
97  size_t& MaxIterations() { return maxIterations; }
98 
100  double ArmijoConstant() const { return armijoConstant; }
102  double& ArmijoConstant() { return armijoConstant; }
103 
105  double Wolfe() const { return wolfe; }
107  double& Wolfe() { return wolfe; }
108 
110  double MinGradientNorm() const { return minGradientNorm; }
112  double& MinGradientNorm() { return minGradientNorm; }
113 
115  double Factr() const { return factr; }
117  double& Factr() { return factr; }
118 
120  size_t MaxLineSearchTrials() const { return maxLineSearchTrials; }
122  size_t& MaxLineSearchTrials() { return maxLineSearchTrials; }
123 
125  double MinStep() const { return minStep; }
127  double& MinStep() { return minStep; }
128 
130  double MaxStep() const { return maxStep; }
132  double& MaxStep() { return maxStep; }
133 
134  private:
136  size_t numBasis;
138  size_t maxIterations;
140  double armijoConstant;
142  double wolfe;
144  double minGradientNorm;
146  double factr;
148  size_t maxLineSearchTrials;
150  double minStep;
152  double maxStep;
153 
161  double ChooseScalingFactor(const size_t iterationNum,
162  const arma::mat& gradient,
163  const arma::cube& s,
164  const arma::cube& y);
165 
179  template<typename FunctionType>
180  bool LineSearch(FunctionType& function,
181  double& functionValue,
182  arma::mat& iterate,
183  arma::mat& gradient,
184  arma::mat& newIterateTmp,
185  const arma::mat& searchDirection);
186 
195  void SearchDirection(const arma::mat& gradient,
196  const size_t iterationNum,
197  const double scalingFactor,
198  const arma::cube& s,
199  const arma::cube& y,
200  arma::mat& searchDirection);
201 
213  void UpdateBasisSet(const size_t iterationNum,
214  const arma::mat& iterate,
215  const arma::mat& oldIterate,
216  const arma::mat& gradient,
217  const arma::mat& oldGradient,
218  arma::cube& s,
219  arma::cube& y);
220 };
221 
222 } // namespace optimization
223 } // namespace mlpack
224 
225 #include "lbfgs_impl.hpp"
226 
227 #endif // MLPACK_CORE_OPTIMIZERS_LBFGS_LBFGS_HPP
228 
double Factr() const
Get the factr value.
Definition: lbfgs.hpp:115
double MaxStep() const
Return the maximum line search step size.
Definition: lbfgs.hpp:130
.hpp
Definition: add_to_po.hpp:21
double MinStep() const
Return the minimum line search step size.
Definition: lbfgs.hpp:125
The core includes that mlpack expects; standard C++ includes and Armadillo.
double & MinStep()
Modify the minimum line search step size.
Definition: lbfgs.hpp:127
double Wolfe() const
Get the Wolfe parameter.
Definition: lbfgs.hpp:105
size_t & MaxIterations()
Modify the maximum number of iterations.
Definition: lbfgs.hpp:97
size_t & MaxLineSearchTrials()
Modify the maximum number of line search trials.
Definition: lbfgs.hpp:122
double & MaxStep()
Modify the maximum line search step size.
Definition: lbfgs.hpp:132
double & ArmijoConstant()
Modify the Armijo condition constant.
Definition: lbfgs.hpp:102
double & Factr()
Modify the factr value.
Definition: lbfgs.hpp:117
const std::pair< arma::mat, double > & MinPointIterate() const
Return the point where the lowest function value has been found.
size_t & NumBasis()
Modify the memory size.
Definition: lbfgs.hpp:92
double MinGradientNorm() const
Get the minimum gradient norm.
Definition: lbfgs.hpp:110
double & Wolfe()
Modify the Wolfe parameter.
Definition: lbfgs.hpp:107
L_BFGS(const size_t numBasis=10, const size_t maxIterations=10000, const double armijoConstant=1e-4, const double wolfe=0.9, const double minGradientNorm=1e-6, const double factr=1e-15, const size_t maxLineSearchTrials=50, const double minStep=1e-20, const double maxStep=1e20)
Initialize the L-BFGS object.
double & MinGradientNorm()
Modify the minimum gradient norm.
Definition: lbfgs.hpp:112
size_t MaxIterations() const
Get the maximum number of iterations.
Definition: lbfgs.hpp:95
size_t NumBasis() const
Get the memory size.
Definition: lbfgs.hpp:90
double Optimize(FunctionType &function, arma::mat &iterate)
Use L-BFGS to optimize the given function, starting at the given iterate point and finding the minimu...
The generic L-BFGS optimizer, which uses a back-tracking line search algorithm to minimize a function...
Definition: lbfgs.hpp:35
size_t MaxLineSearchTrials() const
Get the maximum number of line search trials.
Definition: lbfgs.hpp:120
double ArmijoConstant() const
Get the Armijo condition constant.
Definition: lbfgs.hpp:100
Find the minimum of a function along the line between two points.
Definition: line_search.hpp:30