qiskit.circuit.library.hamiltonian_variational_ansatz
qiskit.circuit.library.hamiltonian_variational_ansatz(hamiltonian, reps=1, insert_barriers=False, name='HVA', parameter_prefix='t')
Construire un ansatz variationnel hamiltonien.
Pour un hamiltonien dont les termes ne sont constitués que de Paulis commutés, mais dont les termes ne commuent pas entre eux , l'ansatz variationnel hamiltonien (HVA) est le suivant
où les exponentielles 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 . 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")
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")
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
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