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

Construa um ansatz variacional hamiltoniano.

Para um Hamiltoniano H=k=1KHkH = \sum_{k=1}^K H_k em que os termos HkH_k consistem apenas em Paulis comutáveis, mas os termos não comutam entre si [Hk,Hk]0[H_k, H_{k'}] \neq 0, o ansatz variacional 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)

onde os exponenciais exp(iθHk)exp(-i\theta H_k) 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 {Hk}k\{H_k\}_k. 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")
Diagrama de circuito gerado pelo código anterior.

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")
Diagrama de circuito gerado pelo código anterior.

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

QuantumCircuit

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

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.