基于采样的量子对角化(SQD)

SQD 使用 ffsim 采样以 CCSD 为种子的 LUCJ 态。它用 qiskit-addon-sqd 求解恢复的子空间。两个公开入口均返回 SQDResult,其中各项对比使用同一哈密顿量。这种经典模拟不证明量子优势或硬件执行。

安装与平台

在 Linux x86_64 上使用此源码仓库运行 SQD 实现和示例:

uv sync --frozen --extra sqd
export OMP_NUM_THREADS=1 MKL_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
export NUMEXPR_NUM_THREADS=1 JAX_PLATFORMS=cpu

公开监督执行器使用 /proc 及带 fork 的 multiprocessing,因此要求 Linux x86_64。它会在执行前拒绝其他平台。

sqd extra 安装 ffsim 和 qiskit-addon-sqd。Catalyst 为可选项。使用 uv.lock 复现依赖版本。

src/q2m3/sqd/resource_calibration.json 定义实测资源模型和依赖版本。模型不覆盖其他平台或任意依赖版本。若安装 Catalyst,其版本必须匹配校准版本。也可以不安装 Catalyst。

按 SQD:H₂、甘氨酸与嵌入 依次运行示例。函数签名和配置类型见 SQD API。

普通 import q2m3 仍导入 PennyLane。SQD 算法不调用 PennyLane 或 Catalyst。SQD 工作流导出在访问时加载。缺少可选依赖时,它们抛出带安装命令的 ImportError。检查可用性时,测试 "run_sqd" in q2m3.__all__。不要使用 hasattr,因为它可能触发该错误。配置和结果类型不导入 ffsim 或 Qiskit。

两个可运行的公开入口

将任一 Python 代码块保存为文件。完成上述安装后,运行 uv run --no-sync python FILE.py。两者均使用 0.74 Å/STO-3G 的 H₂,并显式指定 (2 electrons, 2 spatial orbitals),对应四个系统量子比特。小规模 128 次采样冒烟案例使用种子 31 和两次 LUCJ 重复,达到完整的四行列式空间。与 CASCI 一致属于回归检查,不能证明采样优于经典求解器。

几何入口构建积分及同轨道框架的 CCSD 种子:

import numpy as np
from q2m3 import run_sqd
from q2m3.sqd import LUCJConfig

result = run_sqd(
    ["H", "H"],
    np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 0.74]]),
    active_electrons=2,
    active_orbitals=2,
    basis="sto-3g",
    lucj=LUCJConfig(n_reps=2, shots=128),
    seed=31,
    verbose=False,
)
result.validate()
assert result.baseline_tier == "T0"
assert abs(result.sqd_energy - result.baseline_energy) < 1e-10
print(result.sqd_energy, result.baseline_method, result.delta_mHa)

积分入口接受已组装的 chemist 顺序张量。本示例使用具有资源保护的生成函数,提供经过认证的轨道框架和 CCSD 数据。host_available_mb 是保守内存上限,不是要求分配等量内存。此处以当前 Linux 可用内存限制它。

from pathlib import Path

from q2m3.molecule import MoleculeConfig
from q2m3.sqd import LUCJConfig, run_sqd_from_integrals
from q2m3.sqd.ansatz import build_ccsd_seed
from q2m3.sqd.integrals import build_integrals

available_kib = next(
    int(line.split()[1])
    for line in Path("/proc/meminfo").read_text().splitlines()
    if line.startswith("MemAvailable:")
)
cap_mb = min(4096.0, available_kib * 1024 / 1e6)
molecule = MoleculeConfig(
    name="H2", symbols=["H", "H"],
    coords=[[0.0, 0.0, 0.0], [0.0, 0.0, 0.74]],
    charge=0, active_electrons=2, active_orbitals=2,
)
data = build_integrals(molecule, host_available_mb=cap_mb)
seed_data = build_ccsd_seed(data, host_available_mb=cap_mb)
result = run_sqd_from_integrals(
    data.h1, data.h2, data.e_core,
    norb=data.norb, nelec=data.nelec,
    context=data.context, seed_data=seed_data,
    lucj=LUCJConfig(n_reps=2, shots=128), seed=31,
)
result.validate()
assert result.baseline_tier == "T0"
assert abs(result.sqd_energy - result.baseline_energy) < 1e-10
print(result.sqd_energy, result.baseline_method, result.delta_mHa)

在实测配置中,两个示例均得到约 −1.13728383449 Ha。run_sqd_from_integrals 要求传入 context。裸 t1/t2 数组不能替代 CCSDSeed。求解器检查以下输入:

  • 形状

  • 有限数值

  • 平衡电子数

  • 哈密顿量 / 轨道框架标识

  • HF/CCSD 能量

  • CCSD 残差

种子失败或未收敛时抛出错误。有意仅运行基准时,设置 mode="reference_only",并在积分入口设置 seed_data=None。工作流绝不会静默用 HF 替代失败的 SQD 运行。

固定轨道框架与 MM 嵌入

坐标包括 mm_coords,单位为 Å。mm_charges 单位为元电荷。能量和积分常数单位为 Hartree。高层入口接受两组 MM 数组,以及 embedding_mode="diagonal"``(默认)或 ``"full_oneelectron"。后者要求 MM 电荷。真空分子轨道框架和双电子张量保持不变。对角模式仅添加活性空间对角单电子项,完整模式还保留非对角项。

各求解分支共享活性空间、哈密顿量、框架和芯常数。e_core 已包含 MM 核贡献,底层入口不得再次添加。底层 h2 使用化学家顺序,不再次转置。在嵌入的固定框架中,hf_energy 表示参考行列式期望值,不是弛豫嵌入 SCF 最小值。测试覆盖静态 MM 和 H₂O 适配器。此实现不包含 SQD MC 集成、关联 RDM 反馈或可极化 MM。

参考阶梯与结果使用方

ReferenceConfig 默认设置为 900 秒和 8192 十进制 MB。参考阶梯的各次尝试共享剩余预算:

层级

方法

含义

T0

exact_casci

在该有限活性哈密顿量内精确

T1

选择 CI

严格截断结果。截断差异不能界定其误差

T1+

显式启用的插件

求解器特定近似与不确定性

T2

CCSD(T)

带诊断和可信性标记的近似后备计算

不得通过禁用 T0 强制降级。仅在明确不可用、预算耗尽或受控超时时,才允许尝试较低层级。工作流必须报告数值失败。每个非 T0 结果均包含 baseline_downgrade_reason 和警告。

不确定性未知时,结果记录 None 及原因,不得记录零。T2 报告 T1 诊断、收敛、三重激发校正及三重激发 / 相关能比值。标记可将它判为不可信。T0 不确定性为零不包含基组、模型或实验误差。

使用 baseline_energy、baseline_method、baseline_tier、baseline_uncertainty_mHa、baseline_downgrade_reason、warnings 和 null_reasons。输出模式 sqd.result.v1 有 40 个字段,只写入规范的 baseline_* 键。旧 shci_energy 数值本身无法说明它来自 CASCI 还是 SHCI。读取方必须要求显式方法、层级、单位和不确定性含义,并拒绝冲突别名。

delta_mHa = 1000 * (sqd_energy - baseline_energy) 和 delta_vs_sci_mHa = 1000 * (sqd_energy - iso_ndet_sci_energy):正值表示 SQD 更差。ratio_sqd_over_sci 仅在 T0 及有效非零 SCI 误差下定义。SCI 和随机分支匹配每种自旋的子空间维数。subspace_dim 是其笛卡尔积。unique_dets_vs_shots 统计采样对,是另一种量。

仅参考输出对未执行的采样 / 对照字段记录 None 和明确原因。q2m3.utils.io 中的 save_json_results 接受完整数据类,并保留这些字段。它拒绝非有限 JSON 值。

资源限制

校准后的 Linux 模型要求串行执行和平衡闭壳层。适用域允许:

  • 2–10 个活性轨道。

  • 每个自旋最多 252 个行列式,总计最多 63504 个行列式对。

  • 最多 36 个 UCJ 因子、两个批次、两次迭代和 100000 次采样。

各阶段的其他输入与适用域检查仍然有效。公开对角化使用两个批次、两次迭代,每批 min(300, shots) 个样本。未知或域外边界会在分配前抛出 ResourceModelDomainError。allow_large 无法绕过适用域、主机上限或硬上限。

分配策略在 2048 MB 发出警告,通常在 8192 MB 拒绝。其绝对上限为 12288 MB。公开执行器另设 8192 MB 组件上限。有效限制取组件、主机和用户上限的最小值。预测达到有效限制时,程序在分配前拒绝。allow_large 无法绕过该限制。

所有限制使用十进制 MB。历史基准判据为 peak_bytes < 2_000_000_000。

实测结果和研究状态见 SQD 实测结果。全部结果字段见 SQD 结果字段。