163 lines
9.3 KiB
Plaintext
163 lines
9.3 KiB
Plaintext
---
|
||
title: SamplingVQE
|
||
description: API reference for qiskit.algorithms.minimum_eigensolvers.SamplingVQE
|
||
in_page_toc_min_heading_level: 1
|
||
python_api_type: class
|
||
python_api_name: qiskit.algorithms.minimum_eigensolvers.SamplingVQE
|
||
---
|
||
|
||
# SamplingVQE
|
||
|
||
<Class id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE" isDedicatedPage={true} github="https://github.com/qiskit/qiskit/tree/stable/0.22/qiskit/algorithms/minimum_eigensolvers/sampling_vqe.py" signature="SamplingVQE(sampler, ansatz, optimizer, *, initial_point=None, aggregation=None, callback=None)" modifiers="class">
|
||
Bases: `qiskit.algorithms.variational_algorithm.VariationalAlgorithm`, [`qiskit.algorithms.minimum_eigensolvers.sampling_mes.SamplingMinimumEigensolver`](qiskit.algorithms.minimum_eigensolvers.SamplingMinimumEigensolver "qiskit.algorithms.minimum_eigensolvers.sampling_mes.SamplingMinimumEigensolver")
|
||
|
||
The Variational Quantum Eigensolver algorithm, optimized for diagonal Hamiltonians.
|
||
|
||
VQE is a hybrid quantum-classical algorithm that uses a variational technique to find the minimum eigenvalue of a given diagonal Hamiltonian operator $H_{\text{diag}}$.
|
||
|
||
In contrast to the [`VQE`](qiskit.algorithms.minimum_eigensolvers.VQE "qiskit.algorithms.minimum_eigensolvers.VQE") class, the `SamplingVQE` algorithm is executed using a [`sampler`](#qiskit.algorithms.minimum_eigensolvers.SamplingVQE.sampler "qiskit.algorithms.minimum_eigensolvers.SamplingVQE.sampler") primitive.
|
||
|
||
An instance of `SamplingVQE` also requires an [`ansatz`](#qiskit.algorithms.minimum_eigensolvers.SamplingVQE.ansatz "qiskit.algorithms.minimum_eigensolvers.SamplingVQE.ansatz"), a parameterized [`QuantumCircuit`](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit"), to prepare the trial state $|\psi(\vec\theta)\rangle$. It also needs a classical [`optimizer`](#qiskit.algorithms.minimum_eigensolvers.SamplingVQE.optimizer "qiskit.algorithms.minimum_eigensolvers.SamplingVQE.optimizer") which varies the circuit parameters $\vec\theta$ to minimize the objective function, which depends on the chosen [`aggregation`](#qiskit.algorithms.minimum_eigensolvers.SamplingVQE.aggregation "qiskit.algorithms.minimum_eigensolvers.SamplingVQE.aggregation").
|
||
|
||
The optimizer can either be one of Qiskit’s optimizers, such as [`SPSA`](qiskit.algorithms.optimizers.SPSA "qiskit.algorithms.optimizers.SPSA") or a callable with the following signature:
|
||
|
||
```python
|
||
from qiskit.algorithms.optimizers import OptimizerResult
|
||
|
||
def my_minimizer(fun, x0, jac=None, bounds=None) -> OptimizerResult:
|
||
# Note that the callable *must* have these argument names!
|
||
# Args:
|
||
# fun (callable): the function to minimize
|
||
# x0 (np.ndarray): the initial point for the optimization
|
||
# jac (callable, optional): the gradient of the objective function
|
||
# bounds (list, optional): a list of tuples specifying the parameter bounds
|
||
|
||
result = OptimizerResult()
|
||
result.x = # optimal parameters
|
||
result.fun = # optimal function value
|
||
return result
|
||
```
|
||
|
||
The above signature also allows one to use any SciPy minimizer, for instance as
|
||
|
||
```python
|
||
from functools import partial
|
||
from scipy.optimize import minimize
|
||
|
||
optimizer = partial(minimize, method="L-BFGS-B")
|
||
```
|
||
|
||
The following attributes can be set via the initializer but can also be read and updated once the `SamplingVQE` object has been constructed.
|
||
|
||
### sampler
|
||
|
||
<Attribute id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.sampler">
|
||
The sampler primitive to sample the circuits.
|
||
|
||
**Type**
|
||
|
||
[BaseSampler](qiskit.primitives.BaseSampler "qiskit.primitives.BaseSampler")
|
||
</Attribute>
|
||
|
||
### ansatz
|
||
|
||
<Attribute id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.ansatz">
|
||
A parameterized quantum circuit to prepare the trial state.
|
||
|
||
**Type**
|
||
|
||
[QuantumCircuit](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")
|
||
</Attribute>
|
||
|
||
### optimizer
|
||
|
||
<Attribute id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.optimizer">
|
||
A classical optimizer to find the minimum energy. This can either be a Qiskit [`Optimizer`](qiskit.algorithms.optimizers.Optimizer "qiskit.algorithms.optimizers.Optimizer") or a callable implementing the [`Minimizer`](qiskit.algorithms.optimizers.Minimizer "qiskit.algorithms.optimizers.Minimizer") protocol.
|
||
|
||
**Type**
|
||
|
||
[Optimizer](qiskit.algorithms.optimizers.Optimizer "qiskit.algorithms.optimizers.Optimizer") | [Minimizer](qiskit.algorithms.optimizers.Minimizer "qiskit.algorithms.optimizers.Minimizer")
|
||
</Attribute>
|
||
|
||
### aggregation
|
||
|
||
<Attribute id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.aggregation">
|
||
A float or callable to specify how the objective function evaluated on the basis states should be aggregated. If a float, this specifies the $\alpha \in [0,1]$ parameter for a CVaR expectation value \[1].
|
||
|
||
**Type**
|
||
|
||
float | Callable\[\[list\[float]], float] | None
|
||
</Attribute>
|
||
|
||
### callback
|
||
|
||
<Attribute id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.callback">
|
||
A callback that can access the intermediate data at each optimization step. These data are: the evaluation count, the optimizer parameters for the ansatz, the evaluated value, and the metadata dictionary.
|
||
|
||
**Type**
|
||
|
||
Callable\[\[int, np.ndarray, float, dict\[str, Any]], None] | None
|
||
</Attribute>
|
||
|
||
**References**
|
||
|
||
**\[1]: Barkoutsos, P. K., Nannicini, G., Robert, A., Tavernelli, I., and Woerner, S.,**
|
||
|
||
“Improving Variational Quantum Optimization using CVaR” [arXiv:1907.04769](https://arxiv.org/abs/1907.04769)
|
||
|
||
**Parameters**
|
||
|
||
* **sampler** ([*BaseSampler*](qiskit.primitives.BaseSampler "qiskit.primitives.BaseSampler")) – The sampler primitive to sample the circuits.
|
||
* **ansatz** ([*QuantumCircuit*](qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit")) – A parameterized quantum circuit to prepare the trial state.
|
||
* **optimizer** ([*Optimizer*](qiskit.algorithms.optimizers.Optimizer "qiskit.algorithms.optimizers.Optimizer") *|*[*Minimizer*](qiskit.algorithms.optimizers.Minimizer "qiskit.algorithms.optimizers.Minimizer")) – A classical optimizer to find the minimum energy. This can either be a Qiskit [`Optimizer`](qiskit.algorithms.optimizers.Optimizer "qiskit.algorithms.optimizers.Optimizer") or a callable implementing the [`Minimizer`](qiskit.algorithms.optimizers.Minimizer "qiskit.algorithms.optimizers.Minimizer") protocol.
|
||
* **initial\_point** (*Sequence\[float] | None*) – An optional initial point (i.e. initial parameter values) for the optimizer. The length of the initial point must match the number of [`ansatz`](#qiskit.algorithms.minimum_eigensolvers.SamplingVQE.ansatz "qiskit.algorithms.minimum_eigensolvers.SamplingVQE.ansatz") parameters. If `None`, a random point will be generated within certain parameter bounds. `SamplingVQE` will look to the ansatz for these bounds. If the ansatz does not specify bounds, bounds of $-2\pi$, $2\pi$ will be used.
|
||
* **aggregation** (*float | Callable\[\[list\[float]], float] | None*) – A float or callable to specify how the objective function evaluated on the basis states should be aggregated.
|
||
* **callback** (*Callable\[\[int, np.ndarray, float, dict\[str, Any]], None] | None*) – A callback that can access the intermediate data at each optimization step. These data are: the evaluation count, the optimizer parameters for the ansatz, the estimated value, and the metadata dictionary.
|
||
|
||
## Methods
|
||
|
||
### compute\_minimum\_eigenvalue
|
||
|
||
<Function id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.compute_minimum_eigenvalue" signature="SamplingVQE.compute_minimum_eigenvalue(operator, aux_operators=None)">
|
||
Compute the minimum eigenvalue of a diagonal operator.
|
||
|
||
**Parameters**
|
||
|
||
* **operator** (*BaseOperator |* [*PauliSumOp*](qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")) – Diagonal qubit operator.
|
||
* **aux\_operators** (*ListOrDict\[BaseOperator |* [*PauliSumOp*](qiskit.opflow.primitive_ops.PauliSumOp "qiskit.opflow.primitive_ops.PauliSumOp")*] | None*) – Optional list of auxiliary operators to be evaluated with the final state.
|
||
|
||
**Return type**
|
||
|
||
[SamplingMinimumEigensolverResult](qiskit.algorithms.minimum_eigensolvers.SamplingMinimumEigensolverResult "qiskit.algorithms.minimum_eigensolvers.SamplingMinimumEigensolverResult")
|
||
|
||
**Returns**
|
||
|
||
A [`SamplingMinimumEigensolverResult`](qiskit.algorithms.minimum_eigensolvers.SamplingMinimumEigensolverResult "qiskit.algorithms.minimum_eigensolvers.SamplingMinimumEigensolverResult") containing the optimization result.
|
||
</Function>
|
||
|
||
### supports\_aux\_operators
|
||
|
||
<Function id="qiskit.algorithms.minimum_eigensolvers.SamplingVQE.supports_aux_operators" signature="SamplingVQE.supports_aux_operators()" modifiers="classmethod">
|
||
Whether computing the expectation value of auxiliary operators is supported.
|
||
|
||
If the minimum eigensolver computes an eigenstate 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.SamplingVQE.initial_point">
|
||
Return the initial point.
|
||
</Attribute>
|
||
</Class>
|
||
|