mlpack
a scalable c++ machine learning library
mlpack: mlpack::optimization::AugLagrangian< LagrangianFunction > Class Template Reference

mlpack::optimization::AugLagrangian< LagrangianFunction > Class Template Reference

The AugLagrangian class implements the Augmented Lagrangian method of optimization. More...

Inheritance diagram for mlpack::optimization::AugLagrangian< LagrangianFunction >:
Collaboration diagram for mlpack::optimization::AugLagrangian< LagrangianFunction >:

List of all members.

Public Types

typedef L_BFGS
< AugLagrangianFunction
< LagrangianFunction > > 
L_BFGSType
 Shorthand for the type of the L-BFGS optimizer we'll be using.

Public Member Functions

 AugLagrangian (LagrangianFunction &function)
 Initialize the Augmented Lagrangian with the default L-BFGS optimizer.
 AugLagrangian (AugLagrangianFunction< LagrangianFunction > &augfunc, L_BFGSType &lbfgs)
 Initialize the Augmented Lagrangian with a custom L-BFGS optimizer.
const LagrangianFunction & Function () const
 Get the LagrangianFunction.
LagrangianFunction & Function ()
 Modify the LagrangianFunction.
const arma::vec & Lambda () const
 Get the Lagrange multipliers.
arma::vec & Lambda ()
 Modify the Lagrange multipliers (i.e. set them before optimization).
L_BFGSTypeLBFGS ()
 Modify the L-BFGS object used for the actual optimization.
const L_BFGSTypeLBFGS () const
 Get the L-BFGS object used for the actual optimization.
bool Optimize (arma::mat &coordinates, const arma::vec &initLambda, const double initSigma, const size_t maxIterations=1000)
 Optimize the function, giving initial estimates for the Lagrange multipliers.
bool Optimize (arma::mat &coordinates, const size_t maxIterations=1000)
 Optimize the function.
double & Sigma ()
 Modify the penalty parameter.
double Sigma () const
 Get the penalty parameter.

Private Attributes

AugLagrangianFunction
< LagrangianFunction > 
augfunc
 Internally used AugLagrangianFunction which holds the function we are optimizing.
LagrangianFunction & function
 Function to be optimized.
L_BFGSTypelbfgs
 The L-BFGS optimizer that we will use.
L_BFGSType lbfgsInternal
 If the user did not pass an L_BFGS object, we'll use our own internal one.

Detailed Description

template<typename LagrangianFunction>
class mlpack::optimization::AugLagrangian< LagrangianFunction >

The AugLagrangian class implements the Augmented Lagrangian method of optimization.

In this scheme, a penalty term is added to the Lagrangian. This method is also called the "method of multipliers".

The template class LagrangianFunction must implement the following five methods:

  • double Evaluate(const arma::mat& coordinates);
  • void Gradient(const arma::mat& coordinates, arma::mat& gradient);
  • size_t NumConstraints();
  • double EvaluateConstraint(size_t index, const arma::mat& coordinates);
  • double GradientConstraint(size_t index, const arma::mat& coordinates, arma::mat& gradient);

The number of constraints must be greater than or equal to 0, and EvaluateConstraint() should evaluate the constraint at the given index for the given coordinates. Evaluate() should provide the objective function value for the given coordinates.

Template Parameters:
LagrangianFunction Function which can be optimized by this class.

Definition at line 57 of file aug_lagrangian.hpp.


Member Typedef Documentation

template<typename LagrangianFunction>
typedef L_BFGS<AugLagrangianFunction<LagrangianFunction> > mlpack::optimization::AugLagrangian< LagrangianFunction >::L_BFGSType

Shorthand for the type of the L-BFGS optimizer we'll be using.

Definition at line 36 of file aug_lagrangian.hpp.


Constructor & Destructor Documentation

template<typename LagrangianFunction>
mlpack::optimization::AugLagrangian< LagrangianFunction >::AugLagrangian ( LagrangianFunction &  function  ) 

Initialize the Augmented Lagrangian with the default L-BFGS optimizer.

We limit the number of L-BFGS iterations to 1000, rather than the unlimited default L-BFGS.

Parameters:
function The function to be optimized.
template<typename LagrangianFunction>
mlpack::optimization::AugLagrangian< LagrangianFunction >::AugLagrangian ( AugLagrangianFunction< LagrangianFunction > &  augfunc,
L_BFGSType lbfgs 
)

Initialize the Augmented Lagrangian with a custom L-BFGS optimizer.

Parameters:
function The function to be optimized. This must be a pre-created utility AugLagrangianFunction.
lbfgs The custom L-BFGS optimizer to be used. This should have already been initialized with the given AugLagrangianFunction.

Member Function Documentation

template<typename LagrangianFunction>
const LagrangianFunction& mlpack::optimization::AugLagrangian< LagrangianFunction >::Function (  )  const [inline]

Get the LagrangianFunction.

Definition at line 89 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
LagrangianFunction& mlpack::optimization::AugLagrangian< LagrangianFunction >::Function (  )  [inline]

Modify the LagrangianFunction.

Definition at line 91 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
arma::vec& mlpack::optimization::AugLagrangian< LagrangianFunction >::Lambda (  )  [inline]

Modify the Lagrange multipliers (i.e. set them before optimization).

Definition at line 101 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
const arma::vec& mlpack::optimization::AugLagrangian< LagrangianFunction >::Lambda (  )  const [inline]

Get the Lagrange multipliers.

Definition at line 99 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
const L_BFGSType& mlpack::optimization::AugLagrangian< LagrangianFunction >::LBFGS (  )  const [inline]

Get the L-BFGS object used for the actual optimization.

Definition at line 94 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
L_BFGSType& mlpack::optimization::AugLagrangian< LagrangianFunction >::LBFGS (  )  [inline]

Modify the L-BFGS object used for the actual optimization.

Definition at line 96 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
bool mlpack::optimization::AugLagrangian< LagrangianFunction >::Optimize ( arma::mat &  coordinates,
const arma::vec &  initLambda,
const double  initSigma,
const size_t  maxIterations = 1000 
)

Optimize the function, giving initial estimates for the Lagrange multipliers.

The vector of Lagrange multipliers will be modified to contain the Lagrange multipliers of the final solution (if one is found).

Parameters:
coordinates Output matrix to store the optimized coordinates in.
initLambda Vector of initial Lagrange multipliers. Should have length equal to the number of constraints.
initSigma Initial penalty parameter.
maxIterations Maximum number of iterations of the Augmented Lagrangian algorithm. 0 indicates no maximum.
template<typename LagrangianFunction>
bool mlpack::optimization::AugLagrangian< LagrangianFunction >::Optimize ( arma::mat &  coordinates,
const size_t  maxIterations = 1000 
)

Optimize the function.

The value '1' is used for the initial value of each Lagrange multiplier. To set the Lagrange multipliers yourself, use the other overload of Optimize().

Parameters:
coordinates Output matrix to store the optimized coordinates in.
maxIterations Maximum number of iterations of the Augmented Lagrangian algorithm. 0 indicates no maximum.
sigma Initial penalty parameter.
template<typename LagrangianFunction>
double& mlpack::optimization::AugLagrangian< LagrangianFunction >::Sigma (  )  [inline]

Modify the penalty parameter.

Definition at line 106 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
double mlpack::optimization::AugLagrangian< LagrangianFunction >::Sigma (  )  const [inline]

Get the penalty parameter.

Definition at line 104 of file aug_lagrangian.hpp.


Member Data Documentation

template<typename LagrangianFunction>
AugLagrangianFunction<LagrangianFunction> mlpack::optimization::AugLagrangian< LagrangianFunction >::augfunc [private]

Internally used AugLagrangianFunction which holds the function we are optimizing.

This isn't publically accessible, but we provide ways to get to the Lagrange multipliers and the penalty parameter sigma.

Definition at line 115 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
LagrangianFunction& mlpack::optimization::AugLagrangian< LagrangianFunction >::function [private]

Function to be optimized.

Definition at line 110 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
L_BFGSType& mlpack::optimization::AugLagrangian< LagrangianFunction >::lbfgs [private]

The L-BFGS optimizer that we will use.

Definition at line 121 of file aug_lagrangian.hpp.

template<typename LagrangianFunction>
L_BFGSType mlpack::optimization::AugLagrangian< LagrangianFunction >::lbfgsInternal [private]

If the user did not pass an L_BFGS object, we'll use our own internal one.

Definition at line 118 of file aug_lagrangian.hpp.


The documentation for this class was generated from the following file: