54 lines
6.6 KiB
Plaintext
54 lines
6.6 KiB
Plaintext
---
|
||
title: evolutions
|
||
description: API reference for qiskit.opflow.evolutions
|
||
in_page_toc_min_heading_level: 2
|
||
python_api_type: module
|
||
python_api_name: qiskit.opflow.evolutions
|
||
---
|
||
|
||
<span id="qiskit-opflow-evolutions" />
|
||
|
||
# qiskit.opflow\.evolutions
|
||
|
||
## Operator Evolutions
|
||
|
||
<span id="module-qiskit.opflow.evolutions" />
|
||
|
||
`qiskit.opflow.evolutions`
|
||
|
||
Evolutions are converters which traverse an Operator tree, replacing any [`EvolvedOp`](qiskit.opflow.evolutions.EvolvedOp "qiskit.opflow.evolutions.EvolvedOp") e with a Schrodinger equation-style evolution [`CircuitOp`](qiskit.opflow.primitive_ops.CircuitOp "qiskit.opflow.primitive_ops.CircuitOp") equalling or approximating the matrix exponential of -i \* the Operator contained inside (e.primitive). The Evolutions are essentially implementations of Hamiltonian Simulation algorithms, including various methods for Trotterization.
|
||
|
||
The [`EvolvedOp`](qiskit.opflow.evolutions.EvolvedOp "qiskit.opflow.evolutions.EvolvedOp") is simply a placeholder signifying that the Operator inside it should be converted to its exponential by the Evolution converter. All Operators (not [`state_fns`](qiskit.opflow.state_fns#module-qiskit.opflow.state_fns "qiskit.opflow.state_fns")) have `.exp_i()` methods which either return the exponential of the Operator directly, or an [`EvolvedOp`](qiskit.opflow.evolutions.EvolvedOp "qiskit.opflow.evolutions.EvolvedOp") containing the Operator.
|
||
|
||
<Admonition title="Note" type="note">
|
||
Evolutions work with parameterized Operator coefficients, so `my_expectation.convert((t * H).exp_i())`, where t is a scalar or Terra Parameter and H is an Operator, will produce a [`CircuitOp`](qiskit.opflow.primitive_ops.CircuitOp "qiskit.opflow.primitive_ops.CircuitOp") equivalent to e^iHt.
|
||
</Admonition>
|
||
|
||
### Evolution Base Class
|
||
|
||
The EvolutionBase class gives an interface for algorithms to ask for Evolutions as execution settings. For example, if an algorithm contains an Operator evolution step within it, such as [`QAOA`](qiskit.algorithms.QAOA "qiskit.algorithms.QAOA"), the algorithm can give the opportunity for the user to pass an EvolutionBase of their choice to be used in that evolution step.
|
||
|
||
| | |
|
||
| ---------------------------------------------------------------------------------------------------- | -------------------------------- |
|
||
| [`EvolutionBase`](qiskit.opflow.evolutions.EvolutionBase "qiskit.opflow.evolutions.EvolutionBase")() | A base for Evolution converters. |
|
||
|
||
### Evolutions
|
||
|
||
| | |
|
||
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| [`EvolutionFactory`](qiskit.opflow.evolutions.EvolutionFactory "qiskit.opflow.evolutions.EvolutionFactory")() | A factory class for convenient automatic selection of an Evolution algorithm based on the Operator to be converted. |
|
||
| [`EvolvedOp`](qiskit.opflow.evolutions.EvolvedOp "qiskit.opflow.evolutions.EvolvedOp")(primitive\[, coeff]) | Class for wrapping Operator Evolutions for compilation (`convert`) by an EvolutionBase method later, essentially acting as a placeholder. |
|
||
| [`MatrixEvolution`](qiskit.opflow.evolutions.MatrixEvolution "qiskit.opflow.evolutions.MatrixEvolution")() | Performs Evolution by classical matrix exponentiation, constructing a circuit with `UnitaryGates` or `HamiltonianGates` containing the exponentiation of the Operator. |
|
||
| [`PauliTrotterEvolution`](qiskit.opflow.evolutions.PauliTrotterEvolution "qiskit.opflow.evolutions.PauliTrotterEvolution")(\[trotter\_mode, reps]) | An Evolution algorithm replacing exponentiated sums of Paulis by changing them each to the Z basis, rotating with an rZ, changing back, and Trotterizing. |
|
||
|
||
### Trotterizations
|
||
|
||
| | |
|
||
| ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||
| [`TrotterizationBase`](qiskit.opflow.evolutions.TrotterizationBase "qiskit.opflow.evolutions.TrotterizationBase")(\[reps]) | A base for Trotterization methods, algorithms for approximating exponentiations of operator sums by compositions of exponentiations. |
|
||
| [`TrotterizationFactory`](qiskit.opflow.evolutions.TrotterizationFactory "qiskit.opflow.evolutions.TrotterizationFactory")() | A factory for conveniently creating TrotterizationBase instances. |
|
||
| [`Trotter`](qiskit.opflow.evolutions.Trotter "qiskit.opflow.evolutions.Trotter")(\[reps]) | Simple Trotter expansion, composing the evolution circuits of each Operator in the sum together `reps` times and dividing the evolution time of each by `reps`. |
|
||
| [`Suzuki`](qiskit.opflow.evolutions.Suzuki "qiskit.opflow.evolutions.Suzuki")(\[reps, order]) | Suzuki Trotter expansion, composing the evolution circuits of each Operator in the sum together by a recursive “bookends” strategy, repeating the whole composed circuit `reps` times. |
|
||
| [`QDrift`](qiskit.opflow.evolutions.QDrift "qiskit.opflow.evolutions.QDrift")(\[reps]) | The QDrift Trotterization method, which selects each each term in the Trotterization randomly, with a probability proportional to its weight. |
|
||
|