フェルミオン-量子ビットのマッピング
量子コンピュータで物理系のダイナミクスをシミュレーションするために、電子のハミルトニアンを量子ビットにマッピングする必要があります。通常、量子化学で使用されるフェルミオン系のハミルトニアンは、反交換子の生成と消滅演算子を使用して表現されます:第2量子化のもとでは, です。生成演算子と消滅演算子を量子ビットに働くパウリ演算子として書き直すことができるのならば、量子コンピュータでそれらを表現することができます。
ここでは、, が反交換関係を満たします。
, は演算子が働く自由度のラベルを示します。
フェルミオン波動関数は反対称性を示しますが、量子コンピュータでの量子ビットへのスピン軌道からの直接的なマッピングの時は、スピン軌道の電子の存在するとき、存在しないときと表現され、反対称性は維持されません。この不一致は電子が識別不可能な粒子であるが、量子ビットは識別可能であるからです。フェルミオンの振る舞いを正しく表現するために、必要な反交換関係を保持するマッピング技術が複数開発されています。
このチュートリアルでは、OperFermion
のFermionOperator
からQURI PartsのOperator
にマッピングする方法について説明します。QURI Partsには3種類のマッピング手法があります:
- Jordan-Wignerマッピング
- Bravyi-Kitaevマッピング
- Symmetry-conserving Bravyi-Kitaevマッピング
前提条件
このチュートリアルで使用するQURI Partsモジュール:quri-parts-core
, quri-parts-openfermion
以下のようにインストールできます:
!pip install "quri_parts[openfermion]"
概要
ここでデモンストレーションのためにフェルミ-ハバード・ハミルトニアンを設定します:
from openfermion import fermi_hubbard
n_site = 2
hamiltonian = fermi_hubbard(x_dimension=n_site, y_dimension=1, tunneling=1, coulomb=2)
print("Fermi-Hubbard Hamiltonian:")
print(hamiltonian)
#output
Fermi-Hubbard Hamiltonian:
2.0 [0^ 0 1^ 1] +
-1.0 [0^ 2] +
-1.0 [1^ 3] +
-1.0 [2^ 0] +
2.0 [2^ 2 3^ 3] +
-1.0 [3^ 1]
^はをは[・]でのを示しています。例えば、[0^ 2]はを指します。これは第2量子化の形式で書かれたハミルトニアンであることに注意してください。
QURI Partsでは、以下を生成するマッピングオブジェクトを提供しています:
-
OpenFermion
演算子のmapper (operator mapper):openfermion.ops.FermionOperator
openfermion.ops.InteractionOperator
openfermion.ops.MajoranaOperator
をQURI Partsの
Operator
にマッピングする関数 -
state mapper: 占有数の状態
を
ComputationalBasisState
にマッピングする関数 -
inverse state mapper:
ComputationalBasisState
を占有数の状態にマッピングする関数
例としてJordan-Wignerマッピングを考えます。QURI Partsでmapperを得るためのステップは以下のようになります。
- マッピングオブジェクトの作成