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

Construir un ansatz variacional hamiltoniano.

Para un Hamiltoniano H=k=1KHkH = \sum_{k=1}^K H_k donde los términos HkH_k consisten sólo en Paulis conmutativos, pero los términos no conmutan entre sí [Hk,Hk]0[H_k, H_{k'}] \neq 0, el Hamiltonian variational ansatz (HVA) es

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

donde los exponenciales exp(iθHk)exp(-i\theta H_k) se implementan exactamente [1, 2]. Obsérvese que esto difiere de evolved_operator_ansatz()donde no se hacen suposiciones sobre la estructura de los operadores.

El Hamiltoniano se puede pasar como SparsePauliOpen cuyo caso dividimos el Hamiltoniano en términos conmutativos {Hk}k\{H_k\}_k. Tenga en cuenta, que esto puede no ser óptimo y si el conjunto mínimo de términos conmutables es conocido se puede pasar como secuencia en esta función.

Ejemplos:

Un mismo operador se dividirá automáticamente en términos de desplazamiento:

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")
Diagrama del circuito generado por el código anterior.

También podemos facilitarle directamente las condiciones:

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")
Diagrama del circuito generado por el código anterior.

Parámetros

  • hamiltonian (SparsePauliOp |Sequence[SparsePauliOp]) – El hamiltoniano para evolucionar. Si se da como operador único, se dividirá en términos conmutativos. Si una secuencia de SparsePauliOp, entonces se supone que cada elemento consta de términos conmutativos, pero los elementos no conmutan entre sí.
  • reps (int) – El número de veces que se repetirán los operadores evolucionados.
  • insert_barriers (bool) – Si se insertan barreras entre cada evolución.
  • name (str) – El nombre del circuito.
  • parameter_prefix (str) – Establece los nombres de los parámetros del circuito. Si se trata de una cadena, se utilizará el mismo prefijo para cada parámetro. También puede ser una lista para especificar un prefijo por operador.

Tipo de retorno

QuantumCircuit

Referencias:

[1] D. Wecker et al. Avances hacia algoritmos variacionales cuánticos prácticos (2015) Phys Rev A 92, 042303

[2] R. Wiersema et al. Exploración del entrelazamiento y la optimización dentro del Hamiltonian Variational Ansatz (2020) arXiv:2008.02941

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.