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)
Bases : ProductFormula
La formule du produit de Suzuki-Trotter (d'ordre supérieur).
Les formules de Suzuki-Trotter améliorent l'erreur de l'approximation de Lie-Trotter. Par exemple, la décomposition de second ordre est la suivante
Les décompositions d'ordre supérieur sont basées sur des récursions, voir Réf. [1] pour plus de détails.
Dans cette mise en œuvre, les opérateurs sont fournis sous forme de termes de somme d'un opérateur de Pauli. Par exemple, dans la décomposition de Suzuki-Trotter du second ordre, nous obtenons une approximation de
Références
[1] : D. Berry, G. Ahokas, R. Cleve et B. Sanders, "Efficient quantum algorithms for simulating sparse Hamiltonians" (2006). arXiv:quant-ph/0508139 [2] : N. Hatano et M. Suzuki, "Finding Exponential Product Formulas of Higher Orders" (2005). arXiv:math-ph/0506007
Paramètres
- order (int) – L'ordre de la formule du produit.
- reps (int) – Le nombre de pas de temps.
- insert_barriers (bool) – Insérer ou non des barrières entre les évolutions atomiques.
- cx_structure (str) – La façon de disposer les portes CX pour les évolutions de Pauli peut être
"chain", où les connexions avec le voisin le plus proche sont utilisées, ou"fountain", où tous les qubits sont connectés à un seul. Cela ne prend effet que lorsqueatomic_evolution is None. Pauliatomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Une fonction permettant d'appliquer l'évolution d'un seul terme, ouSparsePauliOpuniquement des termes commutatifs, à un circuit. La fonction prend trois arguments : le circuit auquel ajouter l'évolution, l'opérateur de Pauli à faire évoluer et le temps d'évolution. Par défaut, une évolution de Pauli unique est décomposée en une chaîne deCXportes et en une seuleRZporte.- wrap (bool) – Indique s'il faut envelopper les évolutions atomiques dans des objets de porte personnalisés. Cela ne prend effet que lorsque
atomic_evolution is None. - preserve_order (bool) – Si
False, il est possible de réorganiser les termes de l'opérateur afin d'obtenir un circuit d'évolution moins profond. Non pertinent lors de la synthèse d'un opérateur avec un seul terme. - atomic_evolution_sparse_observable (bool) – Si un
atomic_evolutionpersonnalisé est transmis, qui ne supporte pas encore lesSparseObservableen entrée, donnez à cet argument la valeurFalsepour appliquer automatiquement une conversion enSparsePauliOp. Cet argument est pris en charge jusqu'à ce que Qiskit 2.2, date à laquelle toutes les évolutions atomiques doivent prendre en chargeSparseObservableen entrée.
Augmentations
ValueError - Si l'ordre n'est pas égal
Attributs
settings
Renvoie les paramètres dans un dictionnaire, qui peut être utilisé pour reconstruire l'objet.
Retours
Un dictionnaire contenant les paramètres de cette formule de produit.
Augmentations
NotImplementedError - Si une évolution atomique personnalisée est définie, qui ne peut pas être sérialisée.
Méthodes
expand
expand(evolution)
Développez l'hamiltonien en une séquence de portes éparses de Suzuki-Trotter.
Par exemple, l'hamiltonien H = IX + ZZ pour un temps d'évolution t et 1 répétition pour une formule d'ordre 2 serait décomposé en une liste de 3 tuples contenant (pauli, indices, rz_rotation_angle), c'est-à-dire :
("X", [0], t), ("ZZ", [0, 1], 2t), ("X", [0], t)Il convient de noter que l'angle de rotation comporte un facteur 2, de sorte que l'évolution dans le temps d'une de Pauli , qui est , est représentée par (P, indices, 2 * t).
Pour N répétitions, cette séquence serait répétée N fois et les coefficients divisés par N.
Paramètres
evolution (PauliEvolutionGate) – La porte de l'évolution pour s'étendre.
Retours
Le réseau de Pauli mettant en œuvre l'expansion de Trotter.
Type de retour
synthesize
synthesize(evolution)
Synthétiser un PauliEvolutionGate.
Paramètres
evolution (PauliEvolutionGate) – La porte d'évolution pour synthétiser.
Retours
Un circuit mettant en œuvre l'évolution.
Type de retour