---
title: L_BFGS_B (v0.46)
description: API reference for qiskit.algorithms.optimizers.L_BFGS_B in qiskit v0.46
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit/0.46/qiskit.algorithms.optimizers.L_BFGS_B
---

# L\_BFGS\_B

*class* `qiskit.algorithms.optimizers.L_BFGS_B(maxfun=15000, maxiter=15000, ftol=2.220446049250313e-15, iprint=-1, eps=1e-08, options=None, max_evals_grouped=1, **kwargs)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/algorithms/optimizers/l_bfgs_b.py)

Bases: [`SciPyOptimizer`](/docs/api/qiskit/0.46/qiskit.algorithms.optimizers.SciPyOptimizer "qiskit.algorithms.optimizers.scipy_optimizer.SciPyOptimizer")

Limited-memory BFGS Bound optimizer.

The target goal of Limited-memory Broyden-Fletcher-Goldfarb-Shanno Bound (L-BFGS-B) is to minimize the value of a differentiable scalar function $f$. This optimizer is a quasi-Newton method, meaning that, in contrast to Newtons’s method, it does not require $f$’s Hessian (the matrix of $f$’s second derivatives) when attempting to compute $f$’s minimum value.

Like BFGS, L-BFGS is an iterative method for solving unconstrained, non-linear optimization problems, but approximates BFGS using a limited amount of computer memory. L-BFGS starts with an initial estimate of the optimal value, and proceeds iteratively to refine that estimate with a sequence of better estimates.

The derivatives of $f$ are used to identify the direction of steepest descent, and also to form an estimate of the Hessian matrix (second derivative) of $f$. L-BFGS-B extends L-BFGS to handle simple, per-variable bound constraints.

Uses `scipy.optimize.fmin_l_bfgs_b`. For further detail, please refer to [https://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html](https://docs.scipy.org/doc/scipy/reference/optimize.minimize-lbfgsb.html)

**Parameters**

- **maxfun** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Maximum number of function evaluations.
- **maxiter** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Maximum number of iterations.
- **ftol** (*SupportsFloat*) – The iteration stops when $(f^k - f^{k+1}) / \max\{|f^k|, |f^{k+1}|,1\} \leq \text{ftol}$.
- **iprint** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Controls the frequency of output. `iprint < 0` means no output; `iprint = 0` print only one line at the last iteration; `0 < iprint < 99` print also $f$ and $|\text{proj} g|$ every iprint iterations; `iprint = 99` print details of every iteration except n-vectors; `iprint = 100` print also the changes of active set and final $x$; `iprint > 100` print details of every iteration including $x$ and $g$.
- **eps** ([*float*](https://docs.python.org/3/library/functions.html#float)) – If jac is approximated, use this value for the step size.
- **options** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict) *| None*) – A dictionary of solver options.
- **max\_evals\_grouped** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Max number of default gradient evaluations performed simultaneously.
- **kwargs** – additional kwargs for `scipy.optimize.minimize`.

## Attributes

### bounds\_support\_level

Returns bounds support level

### gradient\_support\_level

Returns gradient support level

### initial\_point\_support\_level

Returns initial point support level

### is\_bounds\_ignored

Returns is bounds ignored

### is\_bounds\_required

Returns is bounds required

### is\_bounds\_supported

Returns is bounds supported

### is\_gradient\_ignored

Returns is gradient ignored

### is\_gradient\_required

Returns is gradient required

### is\_gradient\_supported

Returns is gradient supported

### is\_initial\_point\_ignored

Returns is initial point ignored

### is\_initial\_point\_required

Returns is initial point required

### is\_initial\_point\_supported

Returns is initial point supported

### setting

Return setting

### settings

## Methods

### get\_support\_level

`get_support_level()`

Return support level dictionary

### gradient\_num\_diff

*static* `gradient_num_diff(x_center, f, epsilon, max_evals_grouped=None)`

We compute the gradient with the numeric differentiation in the parallel way, around the point x\_center.

**Parameters**

- **x\_center** (*ndarray*) – point around which we compute the gradient
- **f** (*func*) – the function of which the gradient is to be computed.
- **epsilon** ([*float*](https://docs.python.org/3/library/functions.html#float)) – the epsilon used in the numeric differentiation.
- **max\_evals\_grouped** ([*int*](https://docs.python.org/3/library/functions.html#int)) – max evals grouped, defaults to 1 (i.e. no batching).

**Returns**

the gradient computed

**Return type**

grad

### minimize

`minimize(fun, x0, jac=None, bounds=None)`

Minimize the scalar function.

**Parameters**

- **fun** (*Callable\[\[POINT],* [*float*](https://docs.python.org/3/library/functions.html#float)*]*) – The scalar function to minimize.
- **x0** (*POINT*) – The initial point for the minimization.
- **jac** (*Callable\[\[POINT], POINT] | None*) – The gradient of the scalar function `fun`.
- **bounds** ([*list*](https://docs.python.org/3/library/stdtypes.html#list)*\[*[*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple)*\[*[*float*](https://docs.python.org/3/library/functions.html#float)*,* [*float*](https://docs.python.org/3/library/functions.html#float)*]] | None*) – Bounds for the variables of `fun`. This argument might be ignored if the optimizer does not support bounds.

**Returns**

The result of the optimization, containing e.g. the result as attribute `x`.

**Return type**

[OptimizerResult](/docs/api/qiskit/0.46/qiskit.algorithms.optimizers.OptimizerResult "qiskit.algorithms.optimizers.OptimizerResult")

### print\_options

`print_options()`

Print algorithm-specific options.

### set\_max\_evals\_grouped

`set_max_evals_grouped(limit)`

Set max evals grouped

### set\_options

`set_options(**kwargs)`

Sets or updates values in the options dictionary.

The options dictionary may be used internally by a given optimizer to pass additional optional values for the underlying optimizer/optimization function used. The options dictionary may be initially populated with a set of key/values when the given optimizer is constructed.

**Parameters**

**kwargs** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict)) – options, given as name=value.

### wrap\_function

*static* `wrap_function(function, args)`

Wrap the function to implicitly inject the args at the call of the function.

**Parameters**

- **function** (*func*) – the target function
- **args** ([*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple)) – the args to be injected

**Returns**

wrapper

**Return type**

function\_wrapper
