QDrift
class qiskit.synthesis.QDrift(reps=1, insert_barriers=False, cx_structure='chain', atomic_evolution=None, seed=None, wrap=False, preserve_order=True, *, atomic_evolution_sparse_observable=False)
Bases : ProductFormula
La méthode de trotterisation QDrift, qui sélectionne chaque terme de la trotterisation de manière aléatoire, avec une probabilité proportionnelle à son poids. Basé sur le travail de Earl Campbell dans Ref. [1].
Références
[1] : E. Campbell, "A random compiler for fast Hamiltonian simulation" (2018). arXiv:quant-ph/1811.08017
Paramètres
- reps (int) – Le nombre de fois qu'il faut répéter le circuit de trottisation.
- 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.- seed (int | None) – Une graine facultative pour la reproductibilité du processus d'échantillonnage aléatoire.
- 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.
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)
Appliquez la formule du produit pour développer l'hamiltonien dans la porte d'évolution.
Paramètres
evolution (PauliEvolutionGate) – Le PauliEvolutionGatedont nous développons l'hamiltonien.
Retours
Une liste de rotations de Pauli dans un format clairsemé, où chaque élément est (paulistring, qubits, coefficient). Par exemple, l'expansion de Lie-Trotter de H = XI + ZZ renverrait [("X", [1], 1), ("ZZ", [0, 1], 1)].
Type de retour
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