Skip to main content
IBM Quantum Platform

SuzukiTrotter

class qiskit.synthesis.SuzukiTrotter(order=2, reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False, preserve_order=True, *, atomic_evolution_sparse_observable=False)

GitHub

Basen: ProductFormula

Die Suzuki-Trotter-Produktformel (höherer Ordnung).

Die Suzuki-Trotter-Formeln verbessern den Fehler der Lie-Trotter-Approximation. Die Zerlegung zweiter Ordnung ist zum Beispiel

eA+B≈eB/2eAeB/2.e^{A + B} \approx e^{B/2} e^{A} e^{B/2}.

Zerlegungen höherer Ordnung beruhen auf Rekursionen, siehe Ref. [1] für weitere Einzelheiten.

In dieser Implementierung werden die Operatoren als Summenterme eines Pauli-Operators bereitgestellt. Bei der Suzuki-Trotter-Zerlegung zweiter Ordnung nähern wir uns zum Beispiel an

e−it(XI+ZZ)=e−it/2XIe−itZZe−it/2XI+O(t3).e^{-it(XI + ZZ)} = e^{-it/2 XI}e^{-it ZZ}e^{-it/2 XI} + \mathcal{O}(t^3).

Referenzen

[1] : D. Berry, G. Ahokas, R. Cleve und B. Sanders, "Effiziente Quantenalgorithmen für die Simulation von spärlichen Hamiltonianern" (2006). arXiv:quant-ph/0508139 [2] : N. Hatano und M. Suzuki, "Finden von Exponentialproduktformeln höherer Ordnungen" (2005). arXiv:math-ph/0506007

Parameter

  • order (int) – Die Reihenfolge der Produktformel.
  • reps (int) – Die Anzahl der Zeitschritte.
  • insert_barriers (bool) – Ob Barrieren zwischen den atomaren Entwicklungen eingefügt werden sollen.
  • cx_structure (str) – Die Anordnung der CX-Gatter für die Pauli-Evolutionen kann entweder "chain" sein, wobei die Verbindungen der nächsten Nachbarn verwendet werden, oder "fountain", wobei alle Qubits mit einem verbunden sind. Dies wird nur unter atomic_evolution is None wirksam.
  • Pauliatomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Eine Funktion, mit der die Entwicklung eines einzelnen Terms oder SparsePauliOp nur der kommutierenden Terme auf eine Schaltung angewendet wird. Die Funktion nimmt drei Argumente entgegen: den Schaltkreis, an den die Entwicklung angehängt werden soll, den zu entwickelnden Pauli-Operator und die Entwicklungszeit. Standardmäßig wird eine einzelne Pauli-Evolution in eine Kette von CX Gates und ein einzelnes RZ Gate zerlegt.
  • wrap (bool) – Ob die atomaren Entwicklungen in benutzerdefinierte Gate-Objekte verpackt werden sollen. Dies wird nur wirksam, wenn atomic_evolution is None.
  • preserve_order (bool) – Wenn False, können die Begriffe des Operators neu geordnet werden, um einen flacheren Evolutionskreislauf zu erhalten. Nicht relevant bei der Synthese von Operatoren mit einem einzigen Begriff.
  • atomic_evolution_sparse_observable (bool) – Wenn ein benutzerdefiniertes atomic_evolution übergeben wird, das noch keine Unterstützung für SparseObservables als Eingabe unterstützt, setzen Sie dieses Argument auf False , um automatisch eine Konvertierung in SparsePauliOp. Dieses Argument wird bis Qiskit 2.2 unterstützt. Ab diesem Zeitpunkt müssen alle atomaren Evolutionen SparseObservables als Eingabe unterstützen.

Erhöht

ValueError - Wenn die Bestellung nicht einmal


Attribute

settings

Rückgabe der Einstellungen in einem Wörterbuch, das zur Rekonstruktion des Objekts verwendet werden kann.

Rückgabe

Ein Wörterbuch, das die Einstellungen für diese Produktformel enthält.

Erhöht

NotImplementedError - Wenn eine benutzerdefinierte atomare Entwicklung festgelegt wird, die nicht serialisiert werden kann.


Methoden

expand

expand(evolution)

GitHub

Erweitern Sie den Hamiltonian in eine Suzuki-Trotter-Sequenz von spärlichen Gattern.

Zum Beispiel würde der Hamiltonian H = IX + ZZ für eine Evolutionszeit t und 1 Wiederholung für eine Formel der Ordnung 2 in eine Liste von 3 Tupeln zerlegt werden, die (pauli, indices, rz_rotation_angle) enthält:

("X", [0], t), ("ZZ", [0, 1], 2t), ("X", [0], t)

Beachte, dass der Drehwinkel einen Faktor 2 enthält, sodass die zeitliche Entwicklung eines Pauli- PP s tt, die sich zu eitPe^{itP} ergibt, durch dargestellt (P, indices, 2 * t) wird.

Für N Wiederholungen würde diese Sequenz N mal wiederholt und die Koeffizienten durch N geteilt.

Parameter

evolution (PauliEvolutionGate) – Das Evolutionstor zu erweitern.

Rückgabe

Das Pauli-Netzwerk zur Umsetzung der Trotter-Erweiterung.

Rückgabetyp

list[ tuple[ str, list[ int ], ParameterValueType ]]

synthesize

synthesize(evolution)

GitHub

Synthetisieren Sie ein PauliEvolutionGate.

Parameter

evolution (PauliEvolutionGate) – Das Evolutionstor zum Synthetisieren.

Rückgabe

Eine Schaltung, die die Entwicklung umsetzt.

Rückgabetyp

QuantumCircuit

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.