---
name: "mlpack_optimization_AugLagrangian"
section: "3"
platform: "linux"
package: "mlpack-doc"
version: "1.0.10-1"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/mlpack_optimization_AugLagrangian"
---

# mlpack\_optimization\_AugLagrangian(3)

The AugLagrangian class implements the Augmented Lagrangian method of optimization.

## NAME

mlpack::optimization::AugLagrangian\< LagrangianFunction \> -

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

## SYNOPSIS

### 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).*  const **L\_BFGSType** & **LBFGS** () const \
 *Get the L-BFGS object used for the actual optimization.*  **L\_BFGSType** & **LBFGS** ()\
 *Modify the L-BFGS object used for the actual optimization.*  bool **Optimize** (arma::mat &coordinates, const size\_t maxIterations=1000)\
 *Optimize the function.*  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.*  double **Sigma** () const \
 *Get the penalty parameter.*  double & **Sigma** ()\
 *Modify the penalty parameter.*  std::string **ToString** () const \

### Private Attributes

**AugLagrangianFunction**\
 \< LagrangianFunction \> **augfunc**"\
 *Internally used* **AugLagrangianFunction** *which holds the function we are optimizing.*  LagrangianFunction & **function**\
 *Function to be optimized.*  **L\_BFGSType** & **lbfgs**\
 *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 59 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 64 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 117 of file aug\_lagrangian.hpp.

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

Modify the LagrangianFunction.

Definition at line 119 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 127 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 129 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 122 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 124 of file aug\_lagrangian.hpp.

### template\<typename LagrangianFunction\> bool mlpack::optimization::AugLagrangian\< LagrangianFunction \>::Optimize (arma::mat &coordinates, const size\_tmaxIterations = `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\> bool mlpack::optimization::AugLagrangian\< LagrangianFunction \>::Optimize (arma::mat &coordinates, const arma::vec &initLambda, const doubleinitSigma, const size\_tmaxIterations = `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\> double mlpack::optimization::AugLagrangian\< LagrangianFunction \>::Sigma () const` [inline]`

Get the penalty parameter.

Definition at line 132 of file aug\_lagrangian.hpp.

### template\<typename LagrangianFunction\> double& mlpack::optimization::AugLagrangian\< LagrangianFunction \>::Sigma ()` [inline]`

Modify the penalty parameter.

Definition at line 134 of file aug\_lagrangian.hpp.

### template\<typename LagrangianFunction\> std::string mlpack::optimization::AugLagrangian\< LagrangianFunction \>::ToString () const

## 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 146 of file aug\_lagrangian.hpp.

Referenced by mlpack::optimization::AugLagrangian\< mlpack::optimization::LRSDPFunction \>::Lambda(), and mlpack::optimization::AugLagrangian\< mlpack::optimization::LRSDPFunction \>::Sigma().

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

Function to be optimized.

Definition at line 141 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 152 of file aug\_lagrangian.hpp.

Referenced by mlpack::optimization::AugLagrangian\< mlpack::optimization::LRSDPFunction \>::LBFGS().

### 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 149 of file aug\_lagrangian.hpp.

## Author

Generated automatically by Doxygen for MLPACK from the source code.
