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

Costruire un'ansatz variazionale hamiltoniana.

Per un'hamiltoniana H=k=1KHkH = \sum_{k=1}^K H_k in cui i termini HkH_k consistono solo di paoli commutativi, ma i termini non commutano tra loro [Hk,Hk]0[H_k, H_{k'}] \neq 0, l'ansatz variazionale hamiltoniano (HVA) è

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

dove gli esponenziali exp(iθHk)exp(-i\theta H_k) 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 {Hk}k\{H_k\}_k. 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")
Schema del circuito prodotto dal codice precedente.

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")
Schema del circuito prodotto dal codice precedente.

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

QuantumCircuit

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

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.