qiskit-documentation/docs/api/qiskit/0.44/qiskit.opflow.gradients.Nat...

114 lines
5.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: NaturalGradient
description: API reference for qiskit.opflow.gradients.NaturalGradient
in_page_toc_min_heading_level: 1
python_api_type: class
python_api_name: qiskit.opflow.gradients.NaturalGradient
---
# NaturalGradient
<Class id="qiskit.opflow.gradients.NaturalGradient" isDedicatedPage={true} github="https://github.com/qiskit/qiskit/tree/stable/0.25/qiskit/opflow/gradients/natural_gradient.py" signature="qiskit.opflow.gradients.NaturalGradient(grad_method='lin_comb', qfi_method='lin_comb_full', regularization=None, **kwargs)" modifiers="class">
Bases: [`GradientBase`](qiskit.opflow.gradients.GradientBase "qiskit.opflow.gradients.gradient_base.GradientBase")
Deprecated: Convert an operator expression to the first-order gradient.
Given an ill-posed inverse problem
> x = arg min\{||Ax-C||^2} (1)
one can use regularization schemes can be used to stabilize the system and find a numerical solution
> x\_lambda = arg min\{||Ax-C||^2 + lambda\*R(x)} (2)
where R(x) represents the penalization term.
<Admonition title="Deprecated since version 0.24.0" type="danger">
The class `qiskit.opflow.gradients.natural_gradient.NaturalGradient` is deprecated as of qiskit-terra 0.24.0. It will be removed no earlier than 3 months after the release date. For code migration guidelines, visit [https://qisk.it/opflow\_migration](https://qisk.it/opflow_migration).
</Admonition>
**Parameters**
* **grad\_method** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.12)") *|*[*CircuitGradient*](qiskit.opflow.gradients.CircuitGradient "qiskit.opflow.gradients.circuit_gradients.circuit_gradient.CircuitGradient")) The method used to compute the state gradient. Can be either `'param_shift'` or `'lin_comb'` or `'fin_diff'`.
* **qfi\_method** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.12)") *|*[*CircuitQFI*](qiskit.opflow.gradients.CircuitQFI "qiskit.opflow.gradients.circuit_qfis.circuit_qfi.CircuitQFI")) The method used to compute the QFI. Can be either `'lin_comb_full'` or `'overlap_block_diag'` or `'overlap_diag'`.
* **regularization** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.12)") *| None*) Use the following regularization with a least square method to solve the underlying system of linear equations Can be either None or `'ridge'` or `'lasso'` or `'perturb_diag'` `'ridge'` and `'lasso'` use an automatic optimal parameter search If regularization is None but the metric is ill-conditioned or singular then a least square solver is used without regularization
* **kwargs** ([*dict*](https://docs.python.org/3/library/stdtypes.html#dict "(in Python v3.12)")) Optional parameters for a CircuitGradient
## Attributes
### grad\_method
<Attribute id="qiskit.opflow.gradients.NaturalGradient.grad_method">
Returns `CircuitGradient`.
**Returns**
`CircuitGradient`.
</Attribute>
### qfi\_method
<Attribute id="qiskit.opflow.gradients.NaturalGradient.qfi_method">
Returns `CircuitQFI`.
Returns: `CircuitQFI`.
</Attribute>
### regularization
<Attribute id="qiskit.opflow.gradients.NaturalGradient.regularization">
Returns the regularization option.
Returns: the regularization option.
</Attribute>
## Methods
### convert
<Function id="qiskit.opflow.gradients.NaturalGradient.convert" signature="convert(operator, params=None)">
**Parameters**
* **operator** ([*OperatorBase*](qiskit.opflow.OperatorBase "qiskit.opflow.operator_base.OperatorBase")) The operator we are taking the gradient of.
* **params** ([*ParameterVector*](qiskit.circuit.ParameterVector "qiskit.circuit.parametervector.ParameterVector") *|*[*ParameterExpression*](qiskit.circuit.ParameterExpression "qiskit.circuit.parameterexpression.ParameterExpression") *|*[*List*](https://docs.python.org/3/library/typing.html#typing.List "(in Python v3.12)")*\[*[*ParameterExpression*](qiskit.circuit.ParameterExpression "qiskit.circuit.parameterexpression.ParameterExpression")*] | None*) The parameters we are taking the gradient with respect to. If not explicitly passed, they are inferred from the operator and sorted by name.
**Returns**
An operator whose evaluation yields the NaturalGradient.
**Raises**
* [**TypeError**](https://docs.python.org/3/library/exceptions.html#TypeError "(in Python v3.12)") If `operator` does not represent an expectation value or the quantum state is not `CircuitStateFn`.
* [**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.12)") If `params` contains a parameter not present in `operator`.
* [**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.12)") If `operator` is not parameterized.
**Return type**
[*OperatorBase*](qiskit.opflow.OperatorBase "qiskit.opflow.operator_base.OperatorBase")
</Function>
### nat\_grad\_combo\_fn
<Function id="qiskit.opflow.gradients.NaturalGradient.nat_grad_combo_fn" signature="nat_grad_combo_fn(x, regularization=None)" modifiers="static">
Natural Gradient Function Implementation.
**Parameters**
* **x** ([*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple "(in Python v3.12)")) Iterable consisting of Gradient, Quantum Fisher Information.
* **regularization** ([*str*](https://docs.python.org/3/library/stdtypes.html#str "(in Python v3.12)") *| None*) Regularization method.
**Returns**
Natural Gradient.
**Raises**
[**ValueError**](https://docs.python.org/3/library/exceptions.html#ValueError "(in Python v3.12)") If the gradient has imaginary components that are non-negligible.
**Return type**
[*ndarray*](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray "(in NumPy v1.26)")
</Function>
</Class>