qiskit.circuit.library.hamiltonian_variational_ansatz
qiskit.circuit.library.hamiltonian_variational_ansatz(hamiltonian, reps=1, insert_barriers=False, name='HVA', parameter_prefix='t')
Costruire un'ansatz variazionale hamiltoniana.
Per un'hamiltoniana in cui i termini consistono solo di paoli commutativi, ma i termini non commutano tra loro , l'ansatz variazionale hamiltoniano (HVA) è
dove gli esponenziali sono implementati esattamente [a 1 e 2]. Si noti che questo differisce da evolved_operator_ansatz()in cui non vengono fatte ipotesi sulla struttura degli operatori.
L'hamiltoniana può essere passata come SparsePauliOp, nel qual caso si divide l'hamiltoniana in termini commutativi . Si noti che questa soluzione potrebbe non essere ottimale e che, se si conosce l'insieme minimo di termini commutativi, è possibile passarlo come sequenza in questa funzione.
Esempi:
Un singolo operatore verrà suddiviso automaticamente in termini pendolari:
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")
In alternativa, possiamo fornire direttamente i termini:
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")
Parametri
- hamiltonian (SparsePauliOp |Sequence[SparsePauliOp]) – L'Hamiltoniano da evolvere. Se dato come operatore singolo, verrà suddiviso in termini commutativi. Se una sequenza di
SparsePauliOp, allora si presume che ciascun elemento sia costituito da termini commutativi, ma gli elementi non commutano tra loro. - reps (int) – Il numero di volte in cui ripetere gli operatori evoluti.
- insert_barriers (bool) – Se inserire o meno delle barriere tra ogni evoluzione.
- name (str) – Il nome del circuito.
- parameter_prefix (str) – Impostare i nomi dei parametri del circuito. Se si tratta di una stringa, verrà utilizzato lo stesso prefisso per ogni parametro. Può anche trattarsi di un elenco che specifica un prefisso per ciascun operatore.
Tipo di restituzione
Riferimenti:
[1] D. Wecker et al. Progressi verso algoritmi variazionali quantistici pratici (2015) Phys Rev A 92, 042303
[2] R. Wiersema et al. Esplorare l'entanglement e l'ottimizzazione nell'ambito dell'Hamiltonian Variational Ansatz (2020) arXiv:2008.02941