qiskit.circuit.library.hamiltonian_variational_ansatz
qiskit.circuit.library.hamiltonian_variational_ansatz(hamiltonian, reps=1, insert_barriers=False, name='HVA', parameter_prefix='t')
Construir un ansatz variacional hamiltoniano.
Para un Hamiltoniano donde los términos consisten sólo en Paulis conmutativos, pero los términos no conmutan entre sí , el Hamiltonian variational ansatz (HVA) es
donde los exponenciales 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 . 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")
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")
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
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