Class Scine::Utils::Bfgs

class Bfgs : public Scine::Utils::Optimizer

An implementation of the BFGS optimization algorithm.

The implementation includes an optional GDIIS.

Public Functions

Bfgs()

Default constructor.

template<class UpdateFunction>
int optimize(Eigen::VectorXd &parameters, 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:

    1. const Eigen::VectorXd& parameters

    2. double& value

    3. 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 BFGS’s options.

Parameters
  • collection: The DescriptorCollection to which new fields shall be added.

virtual void applySettings(const Settings &settings)

Updates the BFGS’s options with those values given in the Settings.

Parameters
  • settings: The settings to update the option of the BFGS with.

Public Members

bool useTrustRadius = false

Enable the use of a trust radius for all steps.

double trustRadius = 0.1

The maximum size (RMS) of a taken step.

bool useGdiis = true

Switch to enable the use of a GDIIS possibly accelerating convergence.

int gdiisMaxStore = 5

The maximum number of old steps used in the GDIIS.

Eigen::MatrixXd invH

The inverse Hessian.

std::unique_ptr<std::function<void(Eigen::MatrixXd&)>> projection = nullptr

A possible Hessian projection.