量子化学¶
PennyLane 提供了 qchem 模块来进行量子化学模拟。它包含一个可微分的哈特里-福克求解器,以及构建一个完全可微分的分子哈密顿量的功能,该哈密顿量可以作为输入用于量子算法,例如变分量子特征值求解器 (VQE) 算法。qchem 模块还提供构建其他可观测量的工具,例如分子偶极矩、自旋和粒子数可观测量。PennyLane 中量子化学功能的理论基础在我们的 白皮书 中进行了说明。
构建电子哈密顿量¶
该 qchem 模块提供了一个驱动函数 molecular_hamiltonian(),可以在一次调用中生成电子哈密顿量。例如,
import pennylane as qml
from pennylane import numpy as np
symbols = ["H", "H"]
geometry = np.array([[0., 0., -0.66140414], [0., 0., 0.66140414]])
molecule = qml.qchem.Molecule(symbols, geometry)
hamiltonian, qubits = qml.qchem.molecular_hamiltonian(molecule)
其中:
hamiltonian是表示为 PennyLane 哈密顿量的分子的量子比特哈密顿量和qubits是进行量子模拟所需的量子比特数量。
函数 molecular_hamiltonian() 也可以用于构建分子哈密顿量,使用的外部后端包括OpenFermion-PySCF 插件或电子结构包PySCF,这需要单独安装。这些后端是不可微分的,可以通过在 molecular_hamiltonian 中设置 method='openfermion' 或 method='pyscf' 来选择。
此外,净电荷、自旋多重性、原子基函数、映射方法和活跃空间也可以为每个后端指定。
molecule = qml.qchem.Molecule(
symbols,
geometry,
charge=0,
mult=1,
basis_name='sto-3g')
hamiltonian, qubits = qml.qchem.molecular_hamiltonian(
molecule,
mapping='jordan_wigner',
active_electrons=2,
active_orbitals=2
)
导入哈密顿量和假设态¶
如果电子哈密顿量是使用OpenFermion工具独立构建的,它可以通过import_operator()函数轻松转换为PennyLane可观测量。还可以导入由传统量子化学方法预先计算的波函数(态),这些波函数来自PySCF,例如,可以用于提供量子算法的更好起点。状态导入可以使用import_state()实用函数完成。
导入分子结构数据¶
分子的原子结构可以被定义为一个数组,或通过使用read_structure()函数从外部文件导入:
symbols, geometry = qml.qchem.read_structure('h2.xyz')
变分量子特征求解器(VQE)模拟¶
变分量子特征求解器(VQE)是一个混合量子-经典计算方案,量子计算机用于准备分子的试探波函数并测量电子哈密顿量的期望值,而经典优化器则用于找到其基态。
PennyLane 支持将哈密顿量视为任何其他可观测量,并且哈密顿量的期望值可以使用 qml.expval 计算:
dev = qml.device('default.qubit', wires=4)
symbols = ["H", "H"]
geometry = np.array([[0., 0., -0.66140414], [0., 0., 0.66140414]])
molecule = qml.qchem.Molecule(symbols, geometry)
hamiltonian, qubits = qml.qchem.molecular_hamiltonian(molecule)
@qml.qnode(dev)
def circuit(params):
qml.BasisState(np.array([1, 1, 0, 0]), wires=[0, 1, 2, 3])
qml.DoubleExcitation(params, wires=[0, 1, 2, 3])
return qml.expval(hamiltonian)
params = np.array(0.20885146442480412, requires_grad=True)
circuit(params)
tensor(-1.13618912, requires_grad=True)
可以使用所选接口优化电路参数。
量子化学函数和类¶
PennyLane 支持以下量子化学函数和类。
分子积分和矩阵¶
返回一个计算两个收缩高斯函数之间核吸引积分的函数。 |
|
返回一个计算给定基函数集的电子-核吸引矩阵的函数。 |
|
计算收敛高斯函数的归一化常数。 |
|
返回一个计算给定基函数集合的核心矩阵的函数。 |
|
返回一个计算分子轨道上偶极矩积分的函数。 |
|
返回一个计算分子轨道基中一电子和二电子积分的函数。 |
|
计算四个原始高斯函数之间的电子-电子排斥积分。 |
|
递归计算两个高斯函数的赫米特高斯展开系数。 |
|
计算两个原始高斯函数的动能积分。 |
|
计算两个原始高斯函数的二维多极矩积分。 |
|
计算两个原始高斯函数的重叠积分。 |
|
递归计算 Hermite 矩(moment) 积分。 |
|
返回一个计算两个收缩高斯函数的动积分的函数。 |
|
返回一个计算给定基函数集的动量矩阵的函数。 |
|
计算分子密度矩阵。 |
|
返回一个函数,该函数计算两个收敛高斯函数的多极矩积分。 |
|
返回一个计算一组基函数的多极矩阵的函数。 |
|
计算原始高斯函数之间的核吸引积分。 |
|
返回一个函数,计算两个收缩高斯函数的重叠积分。 |
|
返回一个计算给定基函数集合的重叠矩阵的函数。 |
|
计算原始高斯函数的归一化常数。 |
|
返回一个计算四个收缩高斯函数之间电子-电子斥力积分的函数。 |
|
返回一个计算给定基函数集的电子排斥张量的函数。 |
Hartree-Fock与外部包¶
使用OpenFermion工具将分子哈密顿量分解为泡利算符的线性组合。 |
|
生成一个文件,从中可以获取分子的均场电子结构。 |
|
生成表示给定单粒子算符的FermionOperator,该算符用于构建多体量子比特可观测量。 |
|
生成表示给定双粒子算符的FermionOperator,以构建多体量子比特可观察量。 |
可微的可观察量¶
返回一个计算量子比特哈密顿量的函数。 |
|
返回一个计算量子比特偶极矩可观察量的函数。 |
|
返回一个构建费米子偶极矩可观测量的函数。 |
|
返回一个计算费米哈密顿量的函数。 |
|
根据分子轨道积分创建费米子可观测量。 |
|
使用乔丹-维格纳映射将费米子算符转换为量子比特算符。 |
|
生成分子的量子比特哈密顿量。 |
|
将费米子可观测量转换为PennyLane量子比特可观测量。 |
其他可观察量¶
计算泡利基中的电偶极矩算符。 |
|
构建可以在PennyLane中测量期望值的费米子多体可观测量。 |
|
在泡利基底中计算粒子数可观察量 \(\hat{N}=\sum_\alpha \hat{n}_\alpha\)。 |
|
计算总自旋可观察量 \(\hat{S}^2\)。 |
|
计算总自旋投影可观测量 \(\hat{S}_z\)。 |