LieTrotter
class qiskit.synthesis.LieTrotter(reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, wrap=False, preserve_order=True, *, atomic_evolution_sparse_observable=False)
Basen: SuzukiTrotter
Die Lie-Trotter-Produktformel.
Die Lie-Trotter-Formel approximiert das Exponential von zwei nicht-kommutierenden Operatoren mit Produkten ihrer Exponentiale bis zu einem Fehler zweiter Ordnung:
In dieser Implementierung werden die Operatoren als Summenterme eines Pauli-Operators bereitgestellt. Wir approximieren zum Beispiel
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
- 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 unteratomic_evolution is Nonewirksam. Pauliatomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Eine Funktion, mit der die Entwicklung eines einzelnen Terms oderSparsePauliOpnur 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 vonCXGates und ein einzelnesRZGate zerlegt.- wrap (bool) – Ob die atomaren Entwicklungen in benutzerdefinierte Gate-Objekte verpackt werden sollen. Dies wird nur unter
atomic_evolution is Nonewirksam. - 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ürSparseObservables als Eingabe unterstützt, setzen Sie dieses Argument aufFalse, um automatisch eine Konvertierung inSparsePauliOp. Dieses Argument wird bis Qiskit 2.2 unterstützt. Ab diesem Zeitpunkt müssen alle atomaren EvolutionenSparseObservables als Eingabe unterstützen.
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)
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- s , die sich zu 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
synthesize
synthesize(evolution)
Synthetisieren Sie ein PauliEvolutionGate.
Parameter
evolution (PauliEvolutionGate) – Das Evolutionstor zum Synthetisieren.
Rückgabe
Eine Schaltung, die die Evolution umsetzt.
Rückgabetyp