79 lines
5.1 KiB
Plaintext
79 lines
5.1 KiB
Plaintext
---
|
|
title: variational
|
|
description: API reference for qiskit.algorithms.time_evolvers.variational
|
|
in_page_toc_min_heading_level: 2
|
|
python_api_type: module
|
|
python_api_name: qiskit.algorithms.time_evolvers.variational
|
|
---
|
|
|
|
<span id="module-qiskit.algorithms.time_evolvers.variational" />
|
|
|
|
<span id="qiskit-algorithms-time-evolvers-variational" />
|
|
|
|
# qiskit.algorithms.time\_evolvers.variational
|
|
|
|
<span id="variational-quantum-time-evolutions-qiskit-algorithms-time-evolvers-variational" />
|
|
|
|
## Variational Quantum Time Evolutions
|
|
|
|
<span id="module-qiskit.algorithms.time_evolvers.variational" />
|
|
|
|
`qiskit.algorithms.time_evolvers.variational`
|
|
|
|
Algorithms for performing Variational Quantum Time Evolution of quantum states, which can be tailored to near-term devices. `VarQTE` base class exposes an interface, compliant with the Quantum Time Evolution Framework in Qiskit Terra, that is implemented by [`VarQRTE`](qiskit.algorithms.VarQRTE "qiskit.algorithms.VarQRTE") and [`VarQITE`](qiskit.algorithms.VarQITE "qiskit.algorithms.VarQITE") classes for real and imaginary time evolution respectively. The variational approach is taken according to a variational principle chosen by a user.
|
|
|
|
**Example**
|
|
|
|
```python
|
|
import numpy as np
|
|
|
|
from qiskit.algorithms import TimeEvolutionProblem, VarQITE
|
|
from qiskit.algorithms.time_evolvers.variational import ImaginaryMcLachlanPrinciple
|
|
from qiskit.circuit.library import EfficientSU2
|
|
from qiskit.quantum_info import SparsePauliOp
|
|
|
|
observable = SparsePauliOp.from_list(
|
|
[
|
|
("II", 0.2252),
|
|
("ZZ", 0.5716),
|
|
("IZ", 0.3435),
|
|
("ZI", -0.4347),
|
|
("YY", 0.091),
|
|
("XX", 0.091),
|
|
]
|
|
)
|
|
|
|
ansatz = EfficientSU2(observable.num_qubits, reps=1)
|
|
init_param_values = np.zeros(len(ansatz.parameters))
|
|
for i in range(len(ansatz.parameters)):
|
|
init_param_values[i] = np.pi / 2
|
|
var_principle = ImaginaryMcLachlanPrinciple()
|
|
time = 1
|
|
evolution_problem = TimeEvolutionProblem(observable, time)
|
|
var_qite = VarQITE(ansatz, var_principle, init_param_values)
|
|
evolution_result = var_qite.evolve(evolution_problem)
|
|
```
|
|
|
|
### Variational Principles
|
|
|
|
With variational principles we can project time evolution of a quantum state onto the parameters of a model, in our case a variational quantum circuit.
|
|
|
|
They can be divided into two categories: Variational Quantum \_Real\_ Time Evolution, which evolves the variational ansatz under the standard Schroediger equation and Variational Quantum \_Imaginary\_ Time Evolution, which evolves under the normalized Wick-rotated Schroedinger equation.
|
|
|
|
| | |
|
|
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- |
|
|
| [`VariationalPrinciple`](qiskit.algorithms.time_evolvers.variational.VariationalPrinciple "qiskit.algorithms.time_evolvers.variational.VariationalPrinciple")(qgt, gradient) | A Variational Principle class. |
|
|
| [`RealVariationalPrinciple`](qiskit.algorithms.time_evolvers.variational.RealVariationalPrinciple "qiskit.algorithms.time_evolvers.variational.RealVariationalPrinciple")(qgt, gradient) | Class for a Real Variational Principle. |
|
|
| [`ImaginaryVariationalPrinciple`](qiskit.algorithms.time_evolvers.variational.ImaginaryVariationalPrinciple "qiskit.algorithms.time_evolvers.variational.ImaginaryVariationalPrinciple")(qgt, gradient) | Abstract class for an Imaginary Variational Principle. |
|
|
| [`RealMcLachlanPrinciple`](qiskit.algorithms.time_evolvers.variational.RealMcLachlanPrinciple "qiskit.algorithms.time_evolvers.variational.RealMcLachlanPrinciple")(\[qgt, gradient]) | Class for a Real McLachlan's Variational Principle. |
|
|
| [`ImaginaryMcLachlanPrinciple`](qiskit.algorithms.time_evolvers.variational.ImaginaryMcLachlanPrinciple "qiskit.algorithms.time_evolvers.variational.ImaginaryMcLachlanPrinciple")(\[qgt, gradient]) | Class for an Imaginary McLachlan's Variational Principle. |
|
|
|
|
### ODE solvers
|
|
|
|
ODE solvers that implement the SciPy ODE Solver interface. The Forward Euler Solver is a preferred choice in the presence of noise. One might also use solvers provided by SciPy directly, e.g. RK45.
|
|
|
|
| | |
|
|
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- |
|
|
| [`ForwardEulerSolver`](qiskit.algorithms.time_evolvers.variational.ForwardEulerSolver "qiskit.algorithms.time_evolvers.variational.ForwardEulerSolver")(function, t0, y0, t\_bound) | Forward Euler ODE solver. |
|
|
|