氢分子案例计算#

  为了快速上手pyChemiQ,我们先来看下 \(H_2\) 分子的案例计算。在设置参数前,我们先来了解两个名词:映射和拟设。为了在量子计算机上模拟电子结构问题,我们需要一套转换方式,将电子的费米子算符编码到量子计算机的泡利算符,这就是映射(mapping)。为了获得与体系量子终态相近的试验波函数,我们需要一个合适的波函数假设,我们称之为拟设(Ansatz)。并且理论上,假设的试验态与理想波函数越接近,越有利于后面得到正确基态能量。

  下面氢分子的例子中我们使用sto-3g基组,映射方式使用JW变换,拟设采用UCCSD,经典优化器方法采用SLSQP。这里我们暂不展开每种方法背后的理论背景,详细的介绍参见理论背景章节:

# 先导入需要用到的包
from pychemiq import Molecules,ChemiQ,QMachineType
from pychemiq.Transform.Mapping import jordan_wigner,MappingType
from pychemiq.Optimizer import vqe_solver
from pychemiq.Circuit.Ansatz import UCC
import numpy as np

# 初始化分子的电子结构参数,包括电荷、基组、原子坐标(angstrom)、自旋多重度
multiplicity = 1
charge = 0
basis =  "sto-3g"
geom = "H 0 0 0,H 0 0 0.74"

mol = Molecules(
    geometry = geom,
    basis    = basis,
    multiplicity = multiplicity,
    charge = charge)

# 利用JW变换得到泡利算符形式的氢分子哈密顿量
fermion_H2 = mol.get_molecular_hamiltonian()
pauli_H2 = jordan_wigner(fermion_H2)

# 准备量子线路,需要指定的参数有量子虚拟机类型machine_type,拟设映射类型mapping_type,
# 泡利哈密顿量的项数pauli_size,电子数目n_elec与量子比特的数目n_qubits
chemiq = ChemiQ()
machine_type = QMachineType.CPU_SINGLE_THREAD
mapping_type = MappingType.Jordan_Wigner
pauli_size = len(pauli_H2.data())
n_qubits = mol.n_qubits
n_elec = mol.n_electrons
chemiq.prepare_vqe(machine_type,mapping_type,n_elec,pauli_size,n_qubits)

# 设置拟设类型,这里我们使用UCCSD拟设
ansatz = UCC("UCCSD",n_elec,mapping_type,chemiq=chemiq)

# 指定经典优化器与初始参数并迭代求解
method = "SLSQP"
init_para = np.zeros(ansatz.get_para_num())
solver = vqe_solver(
        method = method,
        pauli = pauli_H2,
        chemiq = chemiq,
        ansatz = ansatz,
        init_para=init_para)
result = solver.fun_val
n_calls = solver.fcalls
print(result,f"函数共调用{n_calls}次")
energies = chemiq.get_energy_history()
print(energies)

打印得到的结果为:

-1.1372838317140834 函数共调用9次
[-1.1167593073964257, -1.0382579032966825, -1.137282968297819, -1.137282968297819, -1.1372838302540205, -1.137283647727291, -1.1372838297780967, -1.1372838317140834, -1.1372838317140834]

  我们将pyChemiQ打印出来的数据作图,与同基组下的经典Full CI进行对比。可以看到随着函数迭代次数的增加,电子能量逐渐收敛至Full CI的能量,如下图所示。而且当函数迭代到第二次时电子能量已经达到了化学精度 \(1.6\times 10^{-3}\) Hartree。

../_images/energy_convergence_H2.png

图 : 氢分子能量收敛曲线