qiskit.circuit.library.hamiltonian_variational_ansatz
qiskit.circuit.library.hamiltonian_variational_ansatz(hamiltonian, reps=1, insert_barriers=False, name='HVA', parameter_prefix='t')
Construa um ansatz variacional hamiltoniano.
Para um Hamiltoniano em que os termos consistem apenas em Paulis comutáveis, mas os termos não comutam entre si , o ansatz variacional Hamiltoniano (HVA) é
onde os exponenciais são implementados exatamente [em 1, 2]. Observe que isso difere de evolved_operator_ansatz()em que não são feitas suposições sobre a estrutura dos operadores.
O Hamiltoniano pode ser passado como SparsePauliOpnesse caso, dividimos o hamiltoniano em termos comutáveis . Observe que isso pode não ser o ideal e, se o conjunto mínimo de termos comutáveis for conhecido, ele poderá ser passado como sequência para essa função.
Exemplos:
Um único operador será dividido em termos de deslocamento automaticamente:
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")
Como alternativa, podemos fornecer os termos diretamente:
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]) – O hamiltoniano a evoluir. Se for dado como um único operador, será dividido em termos comutativos. Se uma sequência de
SparsePauliOp, então presume-se que cada elemento consiste em termos comutativos, mas os elementos não comutam entre si. - reps (int) – O número de vezes para repetir os operadores evoluídos.
- insert_barriers (bool) – Se deve inserir barreiras entre cada evolução.
- name (str) – O nome do circuito.
- parameter_prefix (str) – Defina os nomes dos parâmetros do circuito. Se for uma string, o mesmo prefixo será usado para cada parâmetro. Também pode ser uma lista para especificar um prefixo por operador.
Tipo de retorno
Referências
[1] D. Wecker et al. Progresso em direção a algoritmos variacionais quânticos práticos (2015) Phys Rev A 92, 042303
[2] R. Wiersema et al. Explorando o emaranhamento e a otimização no Hamiltonian Variational Ansatz (2020) arXiv:2008.02941