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

ハミルトニアン変分アサッツを構築する。

ハミルトニアン H=k=1KHkH = \sum_{k=1}^K H_k の場合、項 HkH_k は通約するポーリスのみで構成されるが、項同士は通約しない [Hk,Hk]0[H_k, H_{k'}] \neq 0、ハミルトニアン・ヴァリアショナル・アサッツ(HVA)は次のようになる

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

ここで、指数 exp(iθHk)exp(-i\theta H_k) は正確に [1, 2で]実装されている。 とは異なることに注意されたい。 evolved_operator_ansatz()とは異なり、演算子の構造を仮定しない。

ハミルトニアンは SparsePauliOpこの場合、ハミルトニアンを通約項に分割する {Hk}k\{H_k\}_k。これは最適ではないかもしれないので、もし通約項の最小集合がわかっていれば、それをシーケンスとしてこの関数に渡すことができることに注意してください。

例:

1人のオペレーターは自動的に通勤期間に分割される:

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")
先のコードで出力された回路図。

あるいは、直接条件を提示することもできる:

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")
先のコードで出力された回路図。

パラメーター

  • hamiltonian (SparsePauliOp |Sequence[SparsePauliOp]) – 進化するハミルトニアン。 単一の演算子として与えられた場合、それは交換可能な項に分割される。 もしが列であるならば SparsePauliOp、各要素は互いに可換な項から成ると仮定されるが、要素同士は互いに可換ではない。
  • reps (int) – 進化した演算子を繰り返す回数。
  • insert_barriers (bool) – 各進化の間にバリアを挿入するかどうか。
  • name (str) – 回路の名前。
  • parameter_prefix (str) – 回路パラメータの名前を設定します。 文字列の場合、各パラメータに同じ接頭辞が使用されます。 演算子ごとに接頭辞を指定するためのリストとしても使用できます。

戻りの型

QuantumCircuit

参照資料:

[1] D. ヴェッカーら 実用的な量子変分アルゴリズムへの進展 (2015) Phys Rev A 92, 042303

[2] R. Wiersema et al. ハミルトン変分法的アナザッツにおけるエンタングルメントと最適化の探求(2020年) arXiv:2008.02941

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。