Operator backpropagation (OBP) for estimation of expectation values
หน้านี้ยังไม่ได้รับการแปล คุณกำลังดูเวอร์ชันต้นฉบับภาษาอังกฤษ
Usage estimate: 16 minutes on an Eagle r3 processor (NOTE: This is an estimate only. Your runtime might vary.)
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-addon-obp qiskit-addon-utils qiskit-ibm-runtime rustworkx
# This cell is hidden from users;
# it disables linting rules.
# ruff: noqa
Background
Operator backpropagation is a technique which involves absorbing operations from the end of a quantum circuit into the measured observable, generally reducing the depth of the circuit at the cost of additional terms in the observable. The goal is to backpropagate as much of the circuit as possible without allowing the observable to grow too large. A Qiskit-based implementation is available in the OBP Qiskit addon, more details can be found in the corresponding docs with a simple example to get started.
Consider an example circuit for which an observable is to be measured, where are Paulis and are coefficients. Let us denote the circuit as a single unitary which can be logically partitioned into as shown in the figure below.

Operator backpropagation absorbs the unitary into the observable by evolving it as . In other words, part of the computation is performed classically via the evolution of the observable from to . The original problem can now be reformulated as measuring the observable for the new lower depth circuit whose unitary is .
The unitary is represented as a number of slices . There are multiple ways for defining a slice. For instance, in the above example circuit, each layer of and each layer of gates can be considered as an individual slice. Backpropagation involves calculation of classically. Each slice can be represented as , where is a -qubit Pauli and is a scalar. It is easy to verify that
In the above example, if , then we need to execute two quantum circuits, instead of one, to calculate the expectation value. Therefore, backpropagation may increase the number of terms in the observable, leading to higher number of circuit execution. One way to allow for deeper backpropagation into the circuit, while preventing the operator from growing too large, is to truncate terms with small coefficients, rather than adding them to the operator. For instance, in the above example, one may choose to truncate the term involving provided that