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)
Bases : SuzukiTrotter
La formule du produit de Lie-Trotter.
La formule de Lie-Trotter approxime l'exponentielle de deux opérateurs non commutatifs avec les produits de leurs exponentielles jusqu'à une erreur de second ordre :
Dans cette mise en œuvre, les opérateurs sont fournis sous forme de termes de somme d'un opérateur de Pauli. Par exemple, nous approximons
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
- reps (int) – Le nombre de pas de temps.
- insert_barriers (bool) – Indique s'il faut insérer des barrières entre les évolutions atomiques.
- cx_structure (str) – Comment organiser les portes CX pour les évolutions de Pauli? On peut choisir soit
"chain", où l'on utilise des connexions entre voisins immédiats, soit"fountain", où tous les qubits sont connectés à un seul. Cela ne prend effet que lorsqueatomic_evolution is None. - atomic_evolution (Callable[[QuantumCircuit, qiskit.quantum_info.Pauli |SparsePauliOp, float], None] | None) – Une fonction permettant d'appliquer l'évolution d'un seul terme
Pauli, ou uniquement deSparsePauliOptermes 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 est décomposée en une chaîne de portesCXet en une seule porteRZ. - wrap (bool) – Indique s'il faut encapsuler 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, cela permet de réorganiser les termes de l'opérateur afin d'obtenir éventuellement un circuit d'évolution moins profond. Ce n'est pas pertinent lors de la synthèse d'un opérateur comportant un seul terme. - atomic_evolution_sparse_observable (bool) – Si un paramètre personnalisé
atomic_evolutionest transmis, mais qu'il ne prend pas encore en charge le format «SparseObservables » en entrée, définissez cet argument sur « »Falsepour appliquer automatiquement une conversion vers «SparsePauliOp». Cet argument est valable jusqu'à la version 2.2 de Qiskit; à partir de cette version, toutes les évolutions atomiques doivent prendre «SparseObservables » en entrée.
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 et qu'elle 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) – Le portail d'évolution pour s'étendre.
Retours
Le réseau de Pauli mettant en œuvre l'expansion de Trotter.
Type de retour
liste [ tuple [ chaîne, liste [ entier ], ParameterValueType ]]
synthesize
synthesize(evolution)
Synthétiser a PauliEvolutionGate.
Paramètres
evolution (PauliEvolutionGate) – La porte d'évolution pour synthétiser.
Retours
Un circuit mettant en œuvre l'évolution.
Type de retour