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

Konstruieren Sie einen Hamiltonschen Variationsansatz.

Für einen Hamiltonian H=∑k=1KHkH = \sum_{k=1}^K H_k, bei dem die Terme HkH_k nur aus kommutierenden Paulis bestehen, aber die Terme untereinander nicht kommutieren [Hk,Hk′]≠0[H_k, H_{k'}] \neq 0, lautet der Hamiltonian Variational Ansatz (HVA)

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

wobei die Exponentiale exp(−iθHk)exp(-i\theta H_k) genau [1, 2] implementiert sind. Beachten Sie, dass dies ein Unterschied ist zu evolved_operator_ansatz(), wo keine Annahmen über die Struktur der Operatoren gemacht werden.

Der Hamiltonian kann übergeben werden als SparsePauliOpübergeben werden. In diesem Fall wird der Hamiltonian in kommutierende Terme zerlegt {Hk}k\{H_k\}_k. Beachten Sie, dass dies möglicherweise nicht optimal ist. Wenn der minimale Satz von Kommutanten bekannt ist, kann er als Sequenz in diese Funktion eingegeben werden.

Beispiele:

Ein einzelner Betreiber wird automatisch in Pendeltermine aufgeteilt:

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")
Schaltplan, der durch den vorherigen Code ausgegeben wurde.

Alternativ können wir die Bedingungen auch direkt angeben:

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")
Schaltplan, der durch den vorherigen Code ausgegeben wurde.

Parameter

  • hamiltonian (SparsePauliOp |Sequence[SparsePauliOp]) – Der Hamilton-Operator, der sich weiterentwickelt. Wenn es als einzelner Operator angegeben wird, wird es in kommutierende Terme aufgeteilt. Wenn eine Folge von SparsePauliOpist, wird angenommen, dass jedes Element aus kommutierenden Termen besteht, die Elemente jedoch untereinander nicht kommutieren.
  • reps (int) – Die Anzahl der Wiederholungen der entwickelten Operatoren.
  • insert_barriers (bool) – Ob zwischen den einzelnen Evolutionsstufen Barrieren eingefügt werden sollen.
  • name (str) – Der Name des Stromkreises.
  • parameter_prefix (str) – Legen Sie die Namen der Schaltungsparameter fest. Wenn es sich um eine Zeichenkette handelt, wird für jeden Parameter dasselbe Präfix verwendet. Es kann sich auch um eine Liste handeln, in der für jeden Operator ein Präfix angegeben wird.

Rückgabetyp

QuantumCircuit

Quellenangaben:

[1] D. Wecker et al. Fortschritte auf dem Weg zu praktischen Quanten-Variationsalgorithmen (2015) Phys Rev A 92, 042303

[2] R. Wiersema et al. Erforschung von Verschränkung und Optimierung im Rahmen des Hamiltonian Variational Ansatzes (2020) arXiv:2008.02941

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.