量子化学

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)

可以使用所选接口优化电路参数。

注意

有关VQE和在qchem中可用的量子化学功能的更多详细信息,请查看PennyLane 量子化学教程

量子化学函数和类

PennyLane 支持以下量子化学函数和类。

分子积分和矩阵

attraction_integral

返回一个计算两个收缩高斯函数之间核吸引积分的函数。

attraction_matrix

返回一个计算给定基函数集的电子-核吸引矩阵的函数。

contracted_norm

计算收敛高斯函数的归一化常数。

core_matrix

返回一个计算给定基函数集合的核心矩阵的函数。

dipole_integrals

返回一个计算分子轨道上偶极矩积分的函数。

electron_integrals

返回一个计算分子轨道基中一电子和二电子积分的函数。

electron_repulsion

计算四个原始高斯函数之间的电子-电子排斥积分。

expansion

递归计算两个高斯函数的赫米特高斯展开系数。

gaussian_kinetic

计算两个原始高斯函数的动能积分。

gaussian_moment

计算两个原始高斯函数的二维多极矩积分。

gaussian_overlap

计算两个原始高斯函数的重叠积分。

hermite_moment

递归计算 Hermite 矩(moment) 积分。

kinetic_integral

返回一个计算两个收缩高斯函数的动积分的函数。

kinetic_matrix

返回一个计算给定基函数集的动量矩阵的函数。

mol_density_matrix

计算分子密度矩阵。

moment_integral

返回一个函数,该函数计算两个收敛高斯函数的多极矩积分。

moment_matrix

返回一个计算一组基函数的多极矩阵的函数。

nuclear_attraction

计算原始高斯函数之间的核吸引积分。

overlap_integral

返回一个函数,计算两个收缩高斯函数的重叠积分。

overlap_matrix

返回一个计算给定基函数集合的重叠矩阵的函数。

primitive_norm

计算原始高斯函数的归一化常数。

repulsion_integral

返回一个计算四个收缩高斯函数之间电子-电子斥力积分的函数。

repulsion_tensor

返回一个计算给定基函数集的电子排斥张量的函数。

可微分哈特里-福克

hf_energy

返回一个计算哈特里-福克能量的函数。

nuclear_energy

返回一个计算核斥能量的函数。

scf

返回一个执行自洽场计算的函数。

Hartree-Fock与外部包

decompose

使用OpenFermion工具将分子哈密顿量分解为泡利算符的线性组合。

meanfield

生成一个文件,从中可以获取分子的均场电子结构。

one_particle

生成表示给定单粒子算符的FermionOperator,该算符用于构建多体量子比特可观测量。

two_particle

生成表示给定双粒子算符的FermionOperator,以构建多体量子比特可观察量。

可微的可观察量

diff_hamiltonian

返回一个计算量子比特哈密顿量的函数。

dipole_moment

返回一个计算量子比特偶极矩可观察量的函数。

fermionic_dipole

返回一个构建费米子偶极矩可观测量的函数。

fermionic_hamiltonian

返回一个计算费米哈密顿量的函数。

fermionic_observable

根据分子轨道积分创建费米子可观测量。

jordan_wigner

使用乔丹-维格纳映射将费米子算符转换为量子比特算符。

molecular_hamiltonian

生成分子的量子比特哈密顿量。

qubit_observable

将费米子可观测量转换为PennyLane量子比特可观测量。

其他可观察量

dipole_of

计算泡利基中的电偶极矩算符。

observable

构建可以在PennyLane中测量期望值的费米子多体可观测量。

particle_number

在泡利基底中计算粒子数可观察量 \(\hat{N}=\sum_\alpha \hat{n}_\alpha\)

spin2

计算总自旋可观察量 \(\hat{S}^2\)

spinz

计算总自旋投影可观测量 \(\hat{S}_z\)

量子比特缩减

clifford

根据一组生成元和保利-X算符计算一个克利福德算符。

optimal_sector

获取包含基态的最佳扇区。

paulix_ops

生成每个对称性 \(\tau_j\) 的单量子比特 Pauli-X 算子 \(\sigma^{x}_{i}\),使其与 \(\tau_j\) 反对易,并与所有其他对称性 \(\tau_{k\neq j}\) 互易。

symmetry_generators

计算二进制域 \(\mathbb{Z}_2\) 上哈密顿量的生成元 \(\{\tau_1, \ldots, \tau_k\}\)

taper

使用Clifford运算符变换哈密顿量,然后缩减量子比特。

taper_hf

使用Clifford算子变换Hartree-Fock状态,然后收缩量子比特。

taper_operation

使用克利福德算子变换一个门操作,然后收缩量子位。

工具函数

active_space

为给定数量的活跃电子和活跃轨道构建活跃空间。

excitations

从哈特利-福克参考态生成单激发和双激发。

excitations_to_wires

将通过函数 excitations() 生成的单激发和双激发表示的索引映射到单位耦合簇(UCCSD)模板将作用的线路上。

factorize

返回空间基中的双因子的两个电子积分张量的形式。

givens_decomposition

将一个酉矩阵分解为一系列带相位偏移的Givens旋转门和一个对角相位矩阵。

hf_state

根据选择的基准生成哈特里-福克态矢量。

import_operator

将外部算子转换为PennyLane算子。

import_state

将外部波函数转换为状态向量。

mol_data

从PubChem数据库获取化合物的符号和几何信息。

read_structure

从文件中读取多原子系统的结构,并返回一个包含分子中原子符号的列表和一个包含它们位置的1D数组 \([x_1, y_1, z_1, x_2, y_2, z_2, \dots]\),单位为原子单位(波尔半径 = 1)。

分子类和基函数

atom_basis_data

为一个原子生成默认基组参数。

BasisFunction

创建一个基函数对象。

分子

创建一个分子对象,用于存储分子信息和默认基态参数。

mol_basis_data

为分子生成默认的基组参数。