Japanese
言語
English
Japanese
German
Korean
Portuguese, Brazilian
French
Shortcuts

注釈

当ページは、 tutorials/chemistry/01_electronic_structure.ipynb から生成されました。

IBM Quantum lab でインタラクティブに実行します。

電子構造

はじめに

ある分子のハミルトニアンは、以下の数式で表されます。

\[\mathcal{H} = - \sum_I \frac{\nabla_{R_I}^2}{M_I} - \sum_i \frac{\nabla_{r_i}^2}{m_e} - \sum_I\sum_i \frac{Z_i \sum_{j>i}{|R_I-r_i|} + \frac{e^2}{|r_i-r_j|} + \sum_I\sum_{J>I} \frac{Z_I Z_J e^2}{|R_I-R_J|}\]

原子核は電子よりも非常に重い質量を有するため、原子核は電子に比べて非常に遅い運動速度となります。したがって、原子核や電子の運動は分離しているとみなして考えることができます。 これはボルン・オッペンハイマー近似と呼ばれています。

Therefore, one can first tackle the electronic problem with nuclear coordinate entering only as parameters. The energy levels of the electrons in the molecule can be found by solving the non-relativistic time independent Schroedinger equation,

\[\mathcal{H}_{\text{el}} |\Psi_{n}\rangle = E_{n} |\Psi_{n}\rangle\]

ここで

\[\mathcal{H}_{\text{el}} = - \sum_i \frac{\nabla_{r_i}^2}{m_e} - \sum_I\sum_i \frac{Z_I e^2}{|R_I-r_i|} + \sum_i \sum_{j>i} \frac{e^2}{|r_i-r_j|}.\]

特に、電子の基底状態エネルギーは下記で与えられます。

\[E_0 = \frac{\langle \Psi_0 | H_{\text{el}} | \Psi_0 \rangle}{\langle \Psi_0 | \Psi_0 \rangle}\]

ここで \(\Psi_0\) は、系の基底状態です。

しかし、この問題の有する次元数は、分子/電子の自由度に応じて指数関数的に増大します。そのため、 こうした計算の次元数の増加を押さえるアプローチとして、 \(\Psi_0\) を量子コンピューター上に用意してハミルトンの期待値(または \(E_0\) )を直接測定する方法が考えられています。

では具体的にはどのようなアプローチなのでしょうか?

ハートリーフォック法による初期推測

この問題を解くアプローチの出発点として、ハー トリー・フォック法が用いられます。 この手法では、電子N体を独立したN個体の問題に近似(平均場近似)します。古典コンピューター上でハートリー・フォック方程式を解くことは効率的であり、正確な交換エネルギーにつながりますが、クーロン力による電子同士の相関は考慮されていません。 したがって、電子同士の相関を計算に考慮するのは良い議論の出発点とされています。

The Hamiltonian can then be re-expressed in the basis of the solutions of the HF method, also called Molecular Orbitals (MOs):

\[\hat{H}_{elec}=\sum_{pq} h_{pq} \hat{a}^{\dagger}_p \hat{a}_q + \frac{1}{2} \sum_{pqrs} h_{pqrs} \hat{a}^{\dagger}_p \hat{a}^{\dagger}_q \hat{a}_r \hat{a}_s\]

一体積分は次の通りです。

\[h_{pq} = \int \phi^*_p(r) \left( -\frac{1}{2} \nabla^2 - \sum_{I} \frac{Z_I}{R_I- r} \right) \phi_q(r)\]

二体積分は次の通りです。

\[h_{pqrs} = \int \frac{\phi^*_p(r_1) \phi^*_q(r_2) \phi_r(r_2) \phi_s(r_1)}{|r_1-r_2|}.\]

分子軌道法(\(\phi_u\))では、被占軌道もしくは空軌道の状態を取ることができます。ある一つの分子軌道には2つの電子まで入ることができます。しかし、下記では、2つのスピン軌道状態(上向き:math:alpha`または下向き:math:beta`)のどちらかを取り扱います。したがって、あるスピン軌道状態では1つの電子を含むかもしくは空軌道となります。

We now show how to concretely realise these steps with Qiskit.

Qiskitは、ハートリー・フォック法関連のソリューションを有する様々な既存ライブラリに接続されています。 既にQiskit上では以下のライブラリを利用することができます: * Gaussian * Psi4 * PyQuante * PySCF

以下では、平衡結合距離 (0.735angstrom) にある電荷なしでシングレット状態の水素分子で、PySCFドライバーを設定しました。

[4]:
from qiskit.chemistry.drivers import PySCFDriver, UnitsType, Molecule
molecule = Molecule(geometry=[['H', [0., 0., 0.]],
                              ['H', [0., 0., 0.735]]],
                     charge=0, multiplicity=1)
driver = PySCFDriver(molecule = molecule, unit=UnitsType.ANGSTROM, basis='sto3g')

ドライバの詳細については、https://qiskit.org/documentation/apidoc/qiskit.chemistry.drivers.html を参照してください。

フェルミ粒子から量子ビットへのマッピング

062f9bf9a48b4ddcb683acf0a6f54518

前項で示したハミルトニアンはフェルミオン演算子で表されています。 対象とする問題を量子コンピュータの状態にエンコードするには、これらの演算子をスピン演算子にマッピングする必要があります(実際の量子ビットはスピン統計に従います)。

異なるプロパティを持つ様々なマッピングの種類が存在します。Qiskitはすでに以下のマッピングをサポートしています。* The Jordan-Wigner ‘jordan_wigner’ マッピング (über das paulische äquivalenzverbot. In The Collected Works of Eugene Paul Wigner (pp. 109-129). Springer, Berlin, Heidelberg (1993)). * The Parity ‘parity’ (The Journal of chemical physics, 137(22), 224109 (2012)) * The Bravyi-Kitaev ‘bravyi_kitaev’ (Annals of Physics, 298(1), 210-226 (2002)) * The Bravyi-Kitaev Super Fast ‘bksf’ (Annals of Physics, 298(1), 210-226 (2002))

Jordan-Wignerのマッピングは、特に、各スピンの軌道状態を量子ビットにエンコードには有用とされています (上記図参照)。

ここで、フェルミ粒子のハミルトニアンから量子ビットのハミルトニアンへの変換に関するすべての情報を含むオブジェクトを設定します。 下記の例では、簡単なJordan-Wigner のマッピングを求めます。

[3]:
from qiskit.chemistry.transformations import (FermionicTransformation,
                                              FermionicTransformationType,
                                              FermionicQubitMappingType)

fermionic_transformation = FermionicTransformation(
            transformation=FermionicTransformationType.FULL,
            qubit_mapping=FermionicQubitMappingType.JORDAN_WIGNER,
            two_qubit_reduction=False,
            freeze_core=False)

上記で定義されたドライバに対してハミルトニアンの変換を実行すると、量子ビットの演算子が得られます。

[4]:
qubit_op, _ = fermionic_transformation.transform(driver)
print(qubit_op)
print(fermionic_transformation.molecule_info)
SummedOp([
  -0.8105479805373266 * IIII,
  0.17218393261915552 * IIIZ,
  -0.22575349222402472 * IIZI,
  0.1721839326191556 * IZII,
  -0.22575349222402466 * ZIII,
  0.1209126326177663 * IIZZ,
  0.16892753870087912 * IZIZ,
  0.045232799946057854 * XXYY,
  0.045232799946057854 * YYYY,
  0.045232799946057854 * XXXX,
  0.045232799946057854 * YYXX,
  0.16614543256382414 * ZIIZ,
  0.16614543256382414 * IZZI,
  0.17464343068300453 * ZIZI,
  0.1209126326177663 * ZZII
])
{'num_particles': [1, 1], 'num_orbitals': 4, 'two_qubit_reduction': False, 'z2_symmetries': <qiskit.aqua.operators.legacy.weighted_pauli_operator.Z2Symmetries object at 0x123f6d940>}

最小基底系(STO-3G) では4量子ビットが必要です。 対称性を考慮することで量子ビットの削減を可能にするパリティ・マッピングを活用し、演算に必要な量子ビット数を削減することができます。

[5]:
fermionic_transformation_2 = FermionicTransformation(
            transformation=FermionicTransformationType.FULL,
            qubit_mapping=FermionicQubitMappingType.PARITY,
            two_qubit_reduction=True,
            freeze_core=False)
qubit_op_2, _ = fermionic_transformation_2.transform(driver)
print(qubit_op_2)
SummedOp([
  -1.052373245772859 * II,
  0.39793742484318007 * IZ,
  -0.39793742484318007 * ZI,
  -0.01128010425623538 * ZZ,
  0.18093119978423136 * XX
])

したがって、この計算では2量子ビットのみが必要となります。

Another possibility is to use the Particle-Hole transformation (Physical Review A, 98(2), 022322 (2018)). This shifts the vacuum state to a state lying in the N-particle Fock space. In this representation the HF (reference) state has a null energy and the optimization procedure is more faster.

[6]:
fermionic_transformation_3 = FermionicTransformation(
            transformation=FermionicTransformationType.PARTICLE_HOLE,
            qubit_mapping=FermionicQubitMappingType.JORDAN_WIGNER,
            two_qubit_reduction=False,
            freeze_core=False)
qubit_op_3, _ = fermionic_transformation_3.transform(driver)
print(qubit_op_3)
SummedOp([
  1.0264200106656571 * IIII,
  0.17218393261915554 * IIIZ,
  -0.22575349222402463 * IIZI,
  0.17218393261915554 * IZII,
  -0.22575349222402458 * ZIII,
  0.16892753870087912 * IZIZ,
  0.045232799946057854 * YYYY,
  0.045232799946057854 * XXYY,
  0.045232799946057854 * YYXX,
  0.045232799946057854 * XXXX,
  0.1209126326177663 * IIZZ,
  0.16614543256382414 * IZZI,
  0.16614543256382414 * ZIIZ,
  0.17464343068300453 * ZIZI,
  0.1209126326177663 * ZZII
])

Qiskitにて利用可能なマッピングと量子ビットへの変換のリストは下記になります。

[7]:
print('*Transformations')
for fer_transform in FermionicTransformationType:
    print(fer_transform)

print('\n*Mappings')
for fer_mapping in FermionicQubitMappingType:
    print(fer_mapping)
*Transformations
FermionicTransformationType.FULL
FermionicTransformationType.PARTICLE_HOLE

*Mappings
FermionicQubitMappingType.JORDAN_WIGNER
FermionicQubitMappingType.PARITY
FermionicQubitMappingType.BRAVYI_KITAEV

以上でハミルトニアンを導出する準備は完了です。量子アルゴリズムを使用することで、対応する分子の電子構造に関する情報を明らかにすることができます。 Qiskitでの実行方法については、基底状態と励起状態の計算に関するチュートリアルをご覧ください!

[1]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
Qiskit0.23.0
Terra0.16.0
Aer0.7.0
Ignis0.5.0
Aqua0.8.0
IBM Q Provider0.11.0
System information
Python3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 13:42:17) [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]
OSDarwin
CPUs2
Memory (Gb)16.0
Tue Oct 20 18:02:17 2020 CEST

This code is a part of Qiskit

© Copyright IBM 2017, 2020.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

[ ]: