QSVT 哈密顿模拟(QSVT Hamiltonian Simulation)

English · 简体中文

类别 C2 · 模块 oracq.algorithms.common.qsvt · 阶段 V2

概述

对厄米矩阵 \(A\) 的块编码构造 \(e^{itA/\alpha}\) 的块编码(\(\alpha\) 为输入 BE 归一化)。实现依据 QSVT 框架(Gilyén et al. 2019, arXiv:1806.01838,模块 docstring 引用)与 \(e^{itx}\) 的 Jacobi–Anger 展开 \(e^{itx} = \cos(tx) + i\sin(tx)\):偶支近似 \(\cos(tx)\)、奇支近似 \(\sin(tx)\),两支分别经 QSP 相位合成(见 QSP 相位合成),各用 \((U_\Phi + U_{-\Phi})/2\) 提取实部,最后按系数 1 与 \(i\) 做 LCU 组合。返回 BE 的零信号块约为 \(e^{itA/\alpha}/\text{sim\_scale}\)。

接口与输入模型

qsvt_hamiltonian_simulation(a, t, *, error=0.01)

API 入口:qsvt_hamiltonian_simulation

  • a:BlockEncoding,被模拟哈密顿量的块编码(input model 为 BE)。

  • t:演化时间,必须是非零有限实数。

  • error:多项式近似误差,必须在 \((0, 1)\) 内。

返回 BlockEncoding。模块属性:

属性

含义

algorithm

"qsvt_hamiltonian_simulation"

be_alpha

输出 BE 的归一化(1 与 \(i\) 两支 LCU,为 2.0)

time / error

调用参数回显

qsp_degree

Bessel 截断度数 \(K\)(两支实际合成度数为不超过 \(K\) 的偶 / 奇度数)

sim_scale

输出缩放 \(2s\)(零信号块约为 \(e^{itA/\alpha}/\text{sim\_scale}\))

实现要点

截断度数自适应:\(J_k(t)\) 用幂级数(纯 Python)计算,\(K\) 取 Bessel 尾项绝对值之和不超过 error/4 的最小度数,上界封顶 40。两支统一缩放 \(s = 1.5\max(\lVert f_c\rVert_\infty, \lVert f_s\rVert_\infty, 10^{-3})\),为虚部补全留出余量,\(\text{sim\_scale} = 2s\)。奇偶性校验(cos 支为偶函数、sin 支为奇函数)违例抛 ValidationError;虚部补全候选族(cos 支为常数加单偶次幂、sin 支为单奇次幂)逐个尝试,取首个可合成的候选。

适用边界:\(t = 0\) 被拒绝(平凡情形);\(|t|\) 很大时所需截断度数会先于误差条件触及 40 上限,此时 error 界可能不被满足而不报错,调用方需自行核对。输出以 sim_scale 缩放,读出后需除回。

验证方案

类别 C2(近似连续语义,判定准则见 ../../development/validation-plan.md §2):作用算子需在容差内逼近目标连续函数。三层证据:

  • 结构:tests/core/test_qsvt.py:TransformWitnessTests.test_transform_input_validation(t = 0、error 越界等负例)与 PhaseSynthesisTests.test_input_validation(底层合成的输入校验)。

  • 数值:tests/core/test_qsvt.py:TransformWitnessTests.test_hamiltonian_simulation_block——2×2 对角矩阵(本征值 0.5、\(-0.25\),\(\alpha = 0.5\),谱变量 1.0 与 \(-0.5\)),t = 0.7、error = 0.01,逐列读出零信号块幅度与 \(e^{itx}/\text{sim\_scale}\) 对拍,delta = 5e-4。

  • 绑定:本算法无独立绑定见证(输入已要求具体 BE)。

已知缺口与计划阶段

与验证覆盖矩阵 qsvt.py 行一致:收敛性扫描缺失(误差随 t / 度数的批量曲线未自动化,待阶段 V2 的收敛性扫描框架接入);病态负例(度数 ≳ 16 或精度过低)的参数化测试已通过 input_validation 局部覆盖,单独的"病态输入必须抛错"批量参数化待补。

相关链接

数值验证

论文级数值实验见 tests/verification/verify_hamiltonian.py(真实后端执行,无模拟替身)。实验设计:输入 BE 为 matrix_pauli_encoding 编码的非对角厄米矩阵 \(A = \begin{pmatrix} 0.5 & 0.2 \\ 0.2 & -0.3 \end{pmatrix}\)(\(\alpha = 0.7\)),\(t \in \{0.7, 2.0\}\)、error = 0.01;在 reference / rir-pysparq / originir-ext 三条路径上逐列读出完整 \(2\times2\) 零信号块,与 scipy.linalg.expm 计算的 \(e^{itA/\alpha}/\text{sim\_scale}\) 对拍。实现误差(电路块 vs \(e^{itx}\) 参考)与方法误差(Jacobi–Anger 截断尾部上界 \(2\sum_{j>K}|J_j(t)|\),由 scipy.special.jv 独立求值)分列报告。

案例

规模

后端路径

指标

数值

qsvt-hamsim-t0.7

\(K = 4\),sim_scale ≈ 3.0

reference、rir-pysparq、originir-ext

impl_error

2.72e-5

同上

—

—

方法尾部上界 / 总误差界

9.10e-5 / 1.18e-4

qsvt-hamsim-t2.0

\(K = 6\)

reference、rir-pysparq、originir-ext

impl_error

5.42e-5

同上

—

—

方法尾部上界 / 总误差界

4.00e-4 / 4.54e-4

两个时间点上的总误差界(1.2e-4 与 4.5e-4)均远小于请求的 error = 0.01,且实现误差显著低于方法误差,表明截断度数选择是精度的主导项、相位合成与电路组装处于噪声量级。

复现命令:

PYTHONPATH=src <含 pysparq+uniqc 的解释器> tests/verification/verify_hamiltonian.py

产物:out/verification/hamiltonian.json。