Skip to main content
IBM Quantum Platform

qiskit.circuit.library.hamiltonian_variational_ansatz

qiskit.circuit.library.hamiltonian_variational_ansatz(hamiltonian, reps=1, insert_barriers=False, name='HVA', parameter_prefix='t')

GitHub

Construire un ansatz variationnel hamiltonien.

Pour un hamiltonien H=k=1KHkH = \sum_{k=1}^K H_k dont les termes HkH_k ne sont constitués que de Paulis commutés, mais dont les termes ne commuent pas entre eux [Hk,Hk]0[H_k, H_{k'}] \neq 0, l'ansatz variationnel hamiltonien (HVA) est le suivant

r=1R(k=K1eiθk,rHk)\prod_{r=1}^{R} \left( \prod_{k=K}^1 e^{-i\theta_{k, r} H_k} \right)

où les exponentielles exp(iθHk)exp(-i\theta H_k) sont implémentées exactement [1, 2.] Notez que cela diffère de evolved_operator_ansatz()où aucune hypothèse n'est faite sur la structure des opérateurs.

L'hamiltonien peut être passé sous la forme SparsePauliOpdans ce cas, nous divisons l'hamiltonien en termes commutés {Hk}k\{H_k\}_k. Notez que cela peut ne pas être optimal et que si l'ensemble minimal de termes commutatifs est connu, il peut être transmis sous forme de séquence à cette fonction.

Exemples :

Un opérateur unique sera automatiquement divisé en périodes de navette :

from qiskit.quantum_info import SparsePauliOp
from qiskit.circuit.library import hamiltonian_variational_ansatz

# this Hamiltonian will be split into the two terms [ZZI, IZZ] and [IXI]
hamiltonian = SparsePauliOp(["ZZI", "IZZ", "IXI"])
ansatz = hamiltonian_variational_ansatz(hamiltonian, reps=2)
ansatz.draw("mpl")
Schéma de circuit produit par le code précédent.

Nous pouvons également fournir directement les conditions :

from qiskit.quantum_info import SparsePauliOp
from qiskit.circuit.library import hamiltonian_variational_ansatz

zz = SparsePauliOp(["ZZI", "IZZ"])
x = SparsePauliOp(["IXI"])
ansatz = hamiltonian_variational_ansatz([zz, x], reps=2)
ansatz.draw("mpl")
Schéma de circuit produit par le code précédent.

Paramètres

  • hamiltonian (SparsePauliOp |Sequence[SparsePauliOp]) – Le hamiltonien à faire évoluer. S'il est donné comme opérateur unique, il sera divisé en termes commutatifs. Si une séquence de SparsePauliOp, alors on suppose que chaque élément est constitué de termes commutatifs, mais que les éléments ne commutent pas entre eux.
  • reps (int) – Le nombre de fois qu'il faut répéter les opérateurs évolués.
  • insert_barriers (bool) – L'insertion ou non de barrières entre chaque évolution.
  • name (str) – Le nom du circuit.
  • parameter_prefix (str) – Définissez les noms des paramètres du circuit. S'il s'agit d'une chaîne de caractères, le même préfixe sera utilisé pour chaque paramètre. Il peut également s'agir d'une liste permettant de spécifier un préfixe pour chaque opérateur.

Type de retour

QuantumCircuit

Références :

[1] D. Wecker et al. Progress towards practical quantum variational algorithms (2015) Phys Rev A 92, 042303

[2] R. Wiersema et al. Exploration de l'intrication et de l'optimisation dans le cadre de l'Ansatz variationnel hamiltonien (2020) arXiv:2008.02941

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.