Class Scine::Utils::LBFGS¶
-
class
LBFGS
: public Scine::Utils::Optimizer¶ An implementation of a limited memory BFGS optimization algorithm.
The implementation includes an optional linesearch using both Wolfe conditions.
Public Functions
-
LBFGS
()¶ Default constructor.
-
template<class
UpdateFunction
>
intoptimize
(Eigen::VectorXd ¶meters, UpdateFunction &&function, GradientBasedCheck &check)¶ The main routine of the optimizer that carries out the actual optimization.
- Return
int Returns the number of optimization cycles carried out until the conclusion of the optimization function.
- Template Parameters
UpdateFunction
: A lambda function with a void return value, and the arguments:const Eigen::VectorXd& parameters
double& value
Eigen::VectorXd& gradients
- Parameters
parameters
: The parameters to be optimized.function
: The function to be evaluated in order to get values and gradients for a given set of parameters.check
: The ConvergenceCheck to be used in order to determine when the optimization is finished or should stop for other reasons.
-
virtual void
addSettingsDescriptors
(UniversalSettings::DescriptorCollection &collection) const¶ Adds all relevant options to the given UniversalSettings::DescriptorCollection thus expanding it to include the L-BFGS’s options.
- Parameters
collection
: The DescriptorCollection to which new fields shall be added.
Public Members
-
unsigned int
maxm
= 50¶ The maximum number of old steps stored.
After hitting this maximum number of stored data, the oldest parameters and gradients will be replaced
-
bool
linesearch
= true¶ Switch to turn on and off the use of a linesearch.
-
double
c1
= 0.0001¶ 1st parameter for the Wolfe conditions.
This parameter is only relevant if the linesearch is turned on.
-
double
c2
= 0.9¶ 2nd parameter for the Wolfe conditions.
This parameter is only relevant if the linesearch is turned on. Also a value as low as 0.1 can be used.
-
double
stepLength
= 1.0¶ The initial step length used in the L-BFGS.
Note: the first step is a gradient descent with 0.1 times the steplength.
-
bool
useTrustRadius
= false¶ Enable the use of a trust radius.
-
double
trustRadius
= 0.1¶ The maximum size (RMS) of a taken step.
-