2. 哈密顿量工程

变分量子本征求解器(VQE)的第一步,是把化学问题翻译成量子计算机能读懂的“语言”。这个翻译过程就是哈密顿量工程:给定一个分子,写出它的电子哈密顿量,再把它映射成量子比特上的泡利字符串之和。最终形式通常写成

H = Σk ck Pk,Pk ∈ {I, X, Y, Z}⊗n

其中 ck 是实数系数,Pk 是作用在 n 个量子比特上的泡利字符串。VQE 的每一次能量测量,本质上都是在估计这些 ck 与对应泡利期望值的加权和。因此,哈密顿量工程的质量直接决定了后续线路深度、测量次数和最终精度。

二次量子化:用产生湮灭算符写分子

在 Born–Oppenheimer 近似下,固定原子核位置,分子电子哈密顿量在二次量子化形式下写作

H = Σ_{pq} h_{pq} a†_p a_q
  + 1/2 Σ_{pqrs} h_{pqrs} a†_p a†_q a_r a_s + E_nuc

这里 a†p、ap 是自旋轨道 p 上的产生、湮灭算符,遵循费米子反对易关系 {ap, a†q} = δpq。单电子积分 hpq 描述电子在核势场中的动能与势能,双电子积分 hpqrs 描述电子间库仑排斥,Enuc 是核–核排斥常数。以氢分子 H₂ 在 STO-3G 基组下为例,4 个自旋轨道(2 个成键、2 个反键,各含自旋向上/向下)对应 4 个量子比特,单、双电子积分可由 PySCF 或 OpenFermion 的 MolecularData 直接算出。

二次量子化形式虽然紧凑,但算符作用在费米子福克空间上,量子计算机操作的是量子比特,二者之间需要一层映射。映射的核心任务是:把 a†p、ap 表示成泡利算符的乘积,同时正确编码费米子的反对易符号。

Jordan–Wigner 与 Bravyi–Kitaev 映射

Jordan–Wigner(JW)映射是最直观的方案。它把第 p 个自旋轨道的占据数编码到第 p 个量子比特的 |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}

JW 的优点是局域性好、物理意义清晰,缺点是 Z 字符串长度随轨道序号线性增长,导致高序号轨道的算符权重(泡利字符串中非恒等因子的个数)较大,测量与线路实现代价偏高。

Bravyi–Kitaev(BK)映射通过一种“二分树”编码,把占据信息分散存储,使 ap 的泡利权重从 O(p) 降到 O(log p)。代价是占据数不再直接对应单个量子比特,需要额外的基变换才能读出粒子数。对于小分子(如 H₂、LiH 的活性空间),JW 与 BK 的字符串数量相近,JW 更易调试;对于轨道数较多的体系,BK 能显著压缩线路深度。工程上通常先用 JW 验证正确性,再视资源情况切换到 BK。

分子哈密顿量 → 泡利字符串的映射与系数计算流程 分子几何 H₂ / LiH 基组 STO-3G 积分计算 h_pq, h_pqrs E_nuc 二次量子化 H a†_p a_q a†_p a†_q a_r a_s 费米子→量子比特映射 Jordan–Wigner / Bravyi–Kitaev a_p → 泡利字符串 泡利字符串集合(示例:H₂,4 量子比特) H = c₀·IIII + c₁·ZIII + c₂·IZII + c₃·IIZI + c₄·IIIZ + c₅·ZZII + … + c_k·XXYY 系数 c_k 由积分与映射规则共同决定,需逐项计算并合并同类项 系数计算要点 • 单电子项 → 权重 2 的字符串 • 双电子项 → 权重 4 的字符串 工程注意 • 对称性可裁剪冗余项 • 合并同字符串,减少测量基

泡利字符串生成与系数计算

映射完成后,哈密顿量变成一组泡利字符串的线性组合。以 JW 映射下的 H₂ 为例,4 个自旋轨道对应 4 个量子比特,最终得到的泡利字符串通常包含:

  • 恒等项 IIII:对应核排斥能与部分单电子积分贡献,系数为常数;
  • 单 Z 项(如 ZIII、IZII 等):来自单电子积分 hpq 的对角部分,描述轨道能量;
  • 双 Z 项(如 ZZII、ZIZI 等):来自双电子积分的库仑与交换贡献;
  • XXYY、YYXX 等权重 4 项:来自双电子积分的非对角部分,是产生电子关联的关键项。

系数计算可以手工推导,也可以借助 OpenFermion 的 jordan_wigner() 或 bravyi_kitaev() 函数自动完成。以 OpenFermion 为例:

from openfermion import MolecularData, jordan_wigner
from openfermionpyscf import run_pyscf

geom = [('H', (0,0,0)), ('H', (0,0,0.74))]
mol = MolecularData(geom, 'sto-3g', 1, 0)
mol = run_pyscf(mol)
H_fermi = mol.get_molecular_hamiltonian()
H_qubit = jordan_wigner(H_fermi)
print(H_qubit)

输出是一串形如 (-0.8125+0j) [] + (0.1714+0j) [Z0 Z1] + … 的项。每一项的方括号内是泡利字符串,前面的复数即系数。工程上需要做三件事:

  1. 合并同类项:不同积分路径可能产生相同泡利字符串,必须累加系数,否则会重复测量;
  2. 裁剪小系数项:系数绝对值低于阈值(如 1e-8)的项可安全丢弃,减少测量基数量;
  3. 按测量基分组:对易的泡利字符串可以共享同一组测量线路,例如所有只含 I 和 Z 的项可在计算基下同时测量。
对于 H₂/STO-3G,JW 映射后通常得到 15 个泡利字符串(含恒等项),其中权重 4 的项有 4 个。若使用 BK 映射,字符串数量相近,但权重分布更均匀,适合后续做测量分组优化。

从字符串到可执行测量

得到泡利字符串列表后,VQE 的测量环节需要为每个字符串设计测量基。规则是:若字符串中某量子比特上是 X,则测量前对该比特施加 H 门;若是 Y,则施加 S†H 门;若是 Z 或 I,则保持计算基。这样,原本的泡利期望值就转化为计算基下的测量统计。

例如,字符串 XXYY 作用在 4 个量子比特上,测量线路为:q0 加 H,q1 加 H,q2 加 S†H,q3 加 S†H,然后统一测量。若两个字符串对易,可以合并到同一组测量中,减少总测量次数。对于 H₂ 的 15 个字符串,经过分组后通常只需 3~5 组测量基即可覆盖全部项。

注意:JW 映射下,ap 的 Z 字符串方向是“前面所有轨道”,即 Z0…Zp−1。若在代码中手动实现映射,务必确认索引顺序与量子比特编号一致,否则会出现符号错误,导致能量偏差。

哈密顿量工程的最终交付物是一份“泡利字符串清单”:每条记录包含字符串本身、系数、测量基分组编号。这份清单直接输入 VQE 的测量模块,决定了每次迭代需要执行多少组测量、每组测量需要多少 shots。对于 H₂,典型清单如下表所示(示例数据,来自 STO-3G 基组下的 JW 映射):

泡利字符串 系数(示例) 权重 测量基分组
IIII-0.81250—
ZIII0.17141G1
IZII-0.17141G1
IIZI0.17141G1
IIIZ-0.17141G1
ZZII0.12052G1
ZIZI0.12052G1
XXYY0.04524G2
YYXX0.04524G2

表中 G1 组只含 I 和 Z,可在计算基下直接测量;G2 组含 X、Y,需要施加相应的单比特门。实际工程中,系数值会随核间距变化,因此每次改变分子几何后都需要重新计算积分并更新清单。掌握这套从分子到泡利字符串的完整链路,是后续实现 VQE 线路和优化器的前提。