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

# ADAM

*class* `qiskit.algorithms.optimizers.ADAM(maxiter=10000, tol=1e-06, lr=0.001, beta_1=0.9, beta_2=0.99, noise_factor=1e-08, eps=1e-10, amsgrad=False, snapshot_dir=None)`

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

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

Adam and AMSGRAD optimizers.

Adam \[1] is a gradient-based optimization algorithm that is relies on adaptive estimates of lower-order moments. The algorithm requires little memory and is invariant to diagonal rescaling of the gradients. Furthermore, it is able to cope with non-stationary objective functions and noisy and/or sparse gradients.

AMSGRAD \[2] (a variant of Adam) uses a ‘long-term memory’ of past gradients and, thereby, improves convergence properties.

**References**

**\[1]: Kingma, Diederik & Ba, Jimmy (2014), Adam: A Method for Stochastic Optimization.**

[arXiv:1412.6980](https://arxiv.org/abs/1412.6980)

**\[2]: Sashank J. Reddi and Satyen Kale and Sanjiv Kumar (2018),**

On the Convergence of Adam and Beyond. [arXiv:1904.09237](https://arxiv.org/abs/1904.09237)

> **Note**
>
> This component has some function that is normally random. If you want to reproduce behavior then you should set the random number generator seed in the algorithm\_globals (`qiskit.utils.algorithm_globals.random_seed = seed`).

**Parameters**

- **maxiter** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Maximum number of iterations
- **tol** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Tolerance for termination
- **lr** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Value >= 0, Learning rate.
- **beta\_1** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Value in range 0 to 1, Generally close to 1.
- **beta\_2** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Value in range 0 to 1, Generally close to 1.
- **noise\_factor** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Value >= 0, Noise factor
- **eps** ([*float*](https://docs.python.org/3/library/functions.html#float)) – Value >=0, Epsilon to be used for finite differences if no analytic gradient method is given.
- **amsgrad** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) – True to use AMSGRAD, False if not
- **snapshot\_dir** ([*str*](https://docs.python.org/3/library/stdtypes.html#str) *| None*) – If not None save the optimizer’s parameter after every step to the given directory

## 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

### load\_params

`load_params(load_dir)`

Load iteration parameters for a file called `adam_params.csv`.

**Parameters**

**load\_dir** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – The directory containing `adam_params.csv`.

### minimize

`minimize(fun, x0, jac=None, bounds=None, objective_function=None, initial_point=None, gradient_function=None)`

Minimize the scalar function.

> **Deprecated since version 0.19.0**
>
> `qiskit.algorithms.optimizers.adam_amsgrad.ADAM.minimize()`’s argument `gradient_function` is deprecated as of qiskit-terra 0.19.0. It will be removed no earlier than 3 months after the release date. Instead, use the argument `jac`, which behaves identically.

> **Deprecated since version 0.19.0**
>
> `qiskit.algorithms.optimizers.adam_amsgrad.ADAM.minimize()`’s argument `initial_point` is deprecated as of qiskit-terra 0.19.0. It will be removed no earlier than 3 months after the release date. Instead, use the argument `fun`, which behaves identically.

> **Deprecated since version 0.19.0**
>
> `qiskit.algorithms.optimizers.adam_amsgrad.ADAM.minimize()`’s argument `objective_function` is deprecated as of qiskit-terra 0.19.0. It will be removed no earlier than 3 months after the release date. Instead, use the argument `fun`, which behaves identically.

**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.
- **objective\_function** (*Callable\[\[np.ndarray],* [*float*](https://docs.python.org/3/library/functions.html#float)*] | None*) – DEPRECATED. A function handle to the objective function.
- **initial\_point** (*np.ndarray | None*) – DEPRECATED. The initial iteration point.
- **gradient\_function** (*Callable\[\[np.ndarray],* [*float*](https://docs.python.org/3/library/functions.html#float)*] | None*) – DEPRECATED. A function handle to the gradient of the objective function.

**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.

### save\_params

`save_params(snapshot_dir)`

Save the current iteration parameters to a file called `adam_params.csv`.

> **Note**
>
> The current parameters are appended to the file, if it exists already. The file is not overwritten.

**Parameters**

**snapshot\_dir** ([*str*](https://docs.python.org/3/library/stdtypes.html#str)) – The directory to store the file in.

### 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
