3. 从分子哈密顿量到量子比特哈密顿量

在 VQE 分子基态计算中,我们真正要最小化的对象并不是化学家熟悉的二次量子化哈密顿量,而是经过费米子-量子比特映射后得到的量子比特哈密顿量。二次量子化形式里出现的是产生算符 a†p 与湮灭算符 aq,它们满足反对易关系,而量子计算机上的门操作作用在量子比特上,遵循的是张量积结构。映射方法要做的,就是把“费米子统计”这一约束翻译成量子比特上的泡利算符串,同时尽量不引入过深的电路。

以氢分子 STO-3G 基组为例,4 个自旋轨道对应 4 个量子比特,其电子哈密顿量在二次量子化下可写成:

H = h0 * I
  + Σ_pq h_pq a†_p a_q
  + 1/2 Σ_pqrs h_pqrs a†_p a†_q a_r a_s

其中 h0 是核排斥能与单电子积分贡献的常数项,h_pq 是单电子积分,h_pqrs 是双电子积分。映射的任务,就是把 a†、a 替换成由 X、Y、Z 组成的泡利串,并保持费米子反对易关系。

Jordan-Wigner 映射:直观但串长随轨道数线性增长

Jordan-Wigner(JW)映射的核心思想是:用单个量子比特的 |0⟩ 表示轨道空、|1⟩ 表示轨道占据,同时用一条 Z 算符“尾巴”来记录前面所有轨道的占据数,从而把费米子的交换符号编码进去。其形式为:

a_p = (X_p + iY_p)/2 ⊗ Z_0 ⊗ Z_1 ⊗ ... ⊗ Z_{p-1}
a†_p = (X_p - iY_p)/2 ⊗ Z_0 ⊗ Z_1 ⊗ ... ⊗ Z_{p-1}

对 4 量子比特的氢分子,单激发项 a†_0 a_2 会映射成类似 (X_0 Y_2 - Y_0 X_2)/2 ⊗ Z_1 的泡利串。可以看到,JW 的优点是物理意义清晰、实现简单,但每个算符都带一条长度为 p 的 Z 链。对于 n 个轨道,最坏情况下泡利串长度可达 O(n),双激发项甚至会出现 O(n) 个非恒等因子。这意味着在量子线路中,每个泡利项都需要一串 CNOT 来对角化,线路深度随轨道数线性增长。

Bravyi-Kitaev 映射:用奇偶校验降低串长

Bravyi-Kitaev(BK)映射换了一种编码方式:它不直接存储每个轨道的占据数,而是把占据信息分散到“部分和”与“奇偶校验”两类比特中。这样,单个费米子算符的泡利串长度从 O(n) 降到 O(log n)。对于 4 量子比特,JW 下长度为 4 的串在 BK 下可能缩短为长度 2 或 3。代价是:BK 的比特含义不再直观,占据数需要额外解码,且部分项的结构更复杂。

实际工程中,选择 JW 还是 BK,往往不是单纯看串长,而是看整体电路深度、CNOT 数量和测量分组。JW 的项结构规整,便于按泡利串分组测量;BK 虽然单串更短,但项之间的对易关系更复杂,分组测量时可能反而增加测量次数。因此,在中小分子(如 H2、LiH)上,JW 常因实现简单而优先;在轨道数较多、串长成为瓶颈时,BK 或更进一步的 Parity 映射、BK-tree 变体才更有优势。

费米子哈密顿量 → 量子比特哈密顿量:JW 与 BK 映射对比 二次量子化哈密顿量 H = h₀ + Σ h_pq a†_p a_q + 1/2 Σ h_pqrs a†_p a†_q a_r a_s 4 自旋轨道 → 4 量子比特 映射 Jordan-Wigner a_p = (X_p + iY_p)/2 · Z₀…Z_{p-1} a†_p = (X_p − iY_p)/2 · Z₀…Z_{p-1} 泡利串长度:O(n) 比特含义直观:|0⟩空 |1⟩占据 CNOT 深度随轨道数线性增长 Bravyi-Kitaev 占据信息分散到部分和/奇偶校验 泡利串长度:O(log n) 比特含义需解码,不直观 项结构复杂,测量分组更难 适合轨道数较多的场景 量子比特哈密顿量 H = Σ c_k P_k P_k ∈ {I, X, Y, Z}⊗ⁿ VQE 中逐项测量 ⟨P_k⟩ 对电路深度的影响 JW:串长 O(n) → 每个泡利项需 O(n) 个 CNOT 对角化 → 深度随轨道数线性增长 BK:串长 O(log n) → 单串 CNOT 更少,但项间对易关系复杂,测量分组可能增加额外开销

映射选择对 VQE 电路深度的实际影响

在 VQE 中,量子比特哈密顿量通常写成 H = Σ c_k P_k,其中 P_k 是泡利串。为了测量 ⟨P_k⟩,需要把 P_k 对角化,即对每个非恒等因子施加相应的基变换门,再用 CNOT 链把奇偶校验集中到一个辅助比特上测量。JW 下,一个长度为 L 的泡利串需要 L−1 个 CNOT 来构造奇偶校验链;BK 下,虽然串长更短,但不同 P_k 之间的对易关系更复杂,分组测量时可能无法把多个项合并到同一组,导致测量次数增加。

以一个 8 量子比特的 LiH 简化模型为例:JW 下最长泡利串长度为 8,单个项对角化约需 7 个 CNOT;BK 下最长串长度约为 4,单个项约需 3 个 CNOT。但 JW 下约 60% 的项可以按泡利串的 Z 支撑集分组,每组只需一次测量;BK 下可分组比例可能降到 40% 左右。因此,实际总 CNOT 数并不一定随串长线性下降,需要结合具体分子和测量分组策略评估。

工程建议:在中小分子(≤12 量子比特)上,优先使用 JW 映射,因为其项结构规整、测量分组简单、调试直观;当轨道数超过 20 且串长成为主要瓶颈时,再考虑 BK 或 Parity 映射,并配合测量分组优化工具(如 Qiskit 的 group_commuting)评估实际 CNOT 数与测量次数。

实操:用 OpenFermion 查看两种映射的泡利串

下面以氢分子为例,展示如何用 OpenFermion 生成 JW 与 BK 映射后的哈密顿量,并观察泡利串长度差异:

from openfermion import MolecularData, jordan_wigner, bravyi_kitaev
from openfermion.transforms import get_fermion_operator

# 构造 H2 STO-3G,4 自旋轨道
mol = MolecularData(geometry=[('H', (0,0,0)), ('H', (0,0,0.74))],
                    basis='sto-3g', multiplicity=1, charge=0)
mol = run_pyscf(mol)
fermion_ham = get_fermion_operator(mol.get_molecular_hamiltonian())

# JW 映射
jw_ham = jordan_wigner(fermion_ham)
# BK 映射
bk_ham = bravyi_kitaev(fermion_ham)

# 统计泡利串长度分布
def pauli_length_stats(qubit_ham):
    lengths = []
    for term in qubit_ham.terms:
        length = sum(1 for op in term if op != 'I')
        lengths.append(length)
    return max(lengths), sum(lengths)/len(lengths)

print("JW max/avg:", pauli_length_stats(jw_ham))
print("BK max/avg:", pauli_length_stats(bk_ham))

运行后通常会看到:JW 的最大串长为 4,平均串长约 2.5;BK 的最大串长为 3,平均串长约 2.0。差异在 4 量子比特时并不悬殊,但随着轨道数增加,JW 的最大串长会线性增长到 n,而 BK 只增长到 O(log n)。这正是映射选择在规模化 VQE 中必须提前评估的原因。

注意:映射后的哈密顿量必须保持厄米性,且常数项 h0 在 JW 和 BK 下都映射为恒等算符的系数,不参与量子线路测量,但在计算能量期望值时必须加回。忽略常数项会导致基态能量整体偏移,是 VQE 实现中常见的错误来源。

总结来说,JW 与 BK 的选择本质上是“串长”与“结构规整度”之间的权衡。JW 用更长的泡利串换来了直观的比特含义和简单的测量分组;BK 用更短的串长换来了更复杂的项结构和更高的解码成本。在 VQE 工程中,建议先用 JW 快速搭建可运行版本,再根据实际 CNOT 数、测量次数和硬件连通性,评估是否切换到 BK 或混合映射策略。