qiskit-documentation/docs/api/qiskit/0.40/qiskit.algorithms.minimum_e...

118 lines
6.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: AdaptVQE
description: API reference for qiskit.algorithms.minimum_eigensolvers.AdaptVQE
in_page_toc_min_heading_level: 1
python_api_type: class
python_api_name: qiskit.algorithms.minimum_eigensolvers.AdaptVQE
---
# AdaptVQE
<Class id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE" isDedicatedPage={true} github="https://github.com/qiskit/qiskit/tree/stable/0.23/qiskit/algorithms/minimum_eigensolvers/adapt_vqe.py" signature="AdaptVQE(solver, *, threshold=1e-05, max_iterations=None)" modifiers="class">
Bases: `qiskit.algorithms.variational_algorithm.VariationalAlgorithm`, [`qiskit.algorithms.minimum_eigensolvers.minimum_eigensolver.MinimumEigensolver`](qiskit.algorithms.minimum_eigensolvers.MinimumEigensolver "qiskit.algorithms.minimum_eigensolvers.minimum_eigensolver.MinimumEigensolver")
The Adaptive Variational Quantum Eigensolver algorithm.
[AdaptVQE](https://arxiv.org/abs/1812.11173) is a quantum algorithm which creates a compact ansatz from a set of evolution operators. It iteratively extends the ansatz circuit, by selecting the building block that leads to the largest gradient from a set of candidates. In chemistry, this is usually a list of orbital excitations. Thus, a common choice of ansatz to be used with this algorithm is the Unitary Coupled Cluster ansatz implemented in Qiskit Nature. This results in a wavefunction ansatz which is uniquely adapted to the operator whose minimum eigenvalue is being determined. This class relies on a supplied instance of [`VQE`](qiskit.algorithms.minimum_eigensolvers.VQE "qiskit.algorithms.minimum_eigensolvers.VQE") to find the minimum eigenvalue. The performance of AdaptVQE significantly depends on the minimization routine.
```python
from qiskit.algorithms.minimum_eigensolvers import AdaptVQE, VQE
from qiskit.algorithms.optimizers import SLSQP
from qiskit.primitives import Estimator
from qiskit.circuit.library import EvolvedOperatorAnsatz
# get your Hamiltonian
hamiltonian = ...
# construct your ansatz
ansatz = EvolvedOperatorAnsatz(...)
vqe = VQE(Estimator(), ansatz, SLSQP())
adapt_vqe = AdaptVQE(vqe)
eigenvalue, _ = adapt_vqe.compute_minimum_eigenvalue(hamiltonian)
```
The following attributes can be set via the initializer but can also be read and updated once the AdaptVQE object has been constructed.
### solver
<Attribute id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE.solver">
a [`VQE`](qiskit.algorithms.minimum_eigensolvers.VQE "qiskit.algorithms.minimum_eigensolvers.VQE") instance used internally to compute the minimum eigenvalues. It is a requirement that the [`ansatz`](qiskit.algorithms.minimum_eigensolvers.VQE#ansatz "qiskit.algorithms.minimum_eigensolvers.VQE.ansatz") of this solver is of type [`qiskit.circuit.library.EvolvedOperatorAnsatz`](qiskit.circuit.library.EvolvedOperatorAnsatz "qiskit.circuit.library.EvolvedOperatorAnsatz").
</Attribute>
### threshold
<Attribute id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE.threshold">
the convergence threshold for the algorithm. Once all gradients have an absolute value smaller than this threshold, the algorithm terminates.
</Attribute>
### max\_iterations
<Attribute id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE.max_iterations">
the maximum number of iterations for the adaptive loop. If `None`, the algorithm is not bound in its number of iterations.
</Attribute>
**Parameters**
* **solver** ([*VQE*](qiskit.algorithms.minimum_eigensolvers.VQE "qiskit.algorithms.minimum_eigensolvers.VQE")) a [`VQE`](qiskit.algorithms.minimum_eigensolvers.VQE "qiskit.algorithms.minimum_eigensolvers.VQE") instance used internally to compute the minimum eigenvalues. It is a requirement that the [`ansatz`](qiskit.algorithms.minimum_eigensolvers.VQE#ansatz "qiskit.algorithms.minimum_eigensolvers.VQE.ansatz") of this solver is of type [`qiskit.circuit.library.EvolvedOperatorAnsatz`](qiskit.circuit.library.EvolvedOperatorAnsatz "qiskit.circuit.library.EvolvedOperatorAnsatz").
* **threshold** (*float*) the convergence threshold for the algorithm. Once all gradients have an absolute value smaller than this threshold, the algorithm terminates.
* **max\_iterations** (*int | None*) the maximum number of iterations for the adaptive loop. If `None`, the algorithm is not bound in its number of iterations.
## Methods
### compute\_minimum\_eigenvalue
<Function id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE.compute_minimum_eigenvalue" signature="AdaptVQE.compute_minimum_eigenvalue(operator, aux_operators=None)">
Computes the minimum eigenvalue.
**Parameters**
* **operator** (*BaseOperator |* [*PauliSumOp*](qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")) Operator whose minimum eigenvalue we want to find.
* **aux\_operators** (*ListOrDict\[BaseOperator |* [*PauliSumOp*](qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")*] | None*) Additional auxiliary operators to evaluate.
**Raises**
* **TypeError** If an ansatz other than [`EvolvedOperatorAnsatz`](qiskit.circuit.library.EvolvedOperatorAnsatz "qiskit.circuit.library.EvolvedOperatorAnsatz") is provided.
* **QiskitError** If all evaluated gradients lie below the convergence threshold in the first iteration of the algorithm.
**Return type**
[AdaptVQEResult](qiskit.algorithms.minimum_eigensolvers.AdaptVQEResult "qiskit.algorithms.minimum_eigensolvers.AdaptVQEResult")
**Returns**
An [`AdaptVQEResult`](qiskit.algorithms.minimum_eigensolvers.AdaptVQEResult "qiskit.algorithms.minimum_eigensolvers.AdaptVQEResult") which is a [`VQEResult`](qiskit.algorithms.minimum_eigensolvers.VQEResult "qiskit.algorithms.minimum_eigensolvers.VQEResult") but also but also includes runtime information about the AdaptVQE algorithm like the number of iterations, termination criterion, and the final maximum gradient.
</Function>
### supports\_aux\_operators
<Function id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE.supports_aux_operators" signature="AdaptVQE.supports_aux_operators()" modifiers="classmethod">
Whether computing the expectation value of auxiliary operators is supported.
If the minimum eigensolver computes an eigenvalue of the main `operator` then it can compute the expectation value of the `aux_operators` for that state. Otherwise they will be ignored.
**Return type**
`bool`
**Returns**
True if aux\_operator expectations can be evaluated, False otherwise
</Function>
## Attributes
### initial\_point
<Attribute id="qiskit.algorithms.minimum_eigensolvers.AdaptVQE.initial_point">
Returns the initial point of the internal [`VQE`](qiskit.algorithms.minimum_eigensolvers.VQE "qiskit.algorithms.minimum_eigensolvers.VQE") solver.
**Return type**
Sequence\[float] | None
</Attribute>
</Class>