QPCA 主成分分析(Quantum Principal Component Analysis)¶
English · 简体中文
类别 C3 · 模块
oracq.algorithms.qml.qpca· 阶段 V1
概述¶
读出密度矩阵 \(\rho\) 的谱:对酉步 \(e^{-i\rho\Delta t}\) 做相位估计,本征态 \(|\lambda\rangle\) 对应的相位读出为
解码即得本征值 \(\lambda\)。酉步由 LMR 密度矩阵指数化提供(见密度矩阵指数化),一次调用共消耗 \(2^{\text{precision}} - 1\) 份 \(\rho\) 拷贝。实现依据 Lloyd–Mohseni–Rebentrost 2014("Quantum principal component analysis", Nature Physics 10, 631)。
接口与输入模型¶
qpca(preparation, *, precision, step_time, system=None, swap_width=None, name=None)
API 入口:qpca
preparation:\(\rho\) 拷贝的态制备(StatePreparation),input model 为 SP + QRAM:纯态用gate_state_prep(amplitudes),混合态经density.gate_purification(rho)的PurificationAccess.as_state_preparation()适配;制备必须零 work。precision:相位寄存器位数,范围 1..6;拷贝数随精度指数增长(precision = 6 时已达 63 份,与density_matrix_exponentiation的 copies 上限 63 一致)。step_time:单步演化时间 \(\Delta t\),必须为正;须满足 \(\lambda\Delta t \ll 2\pi\) 以免读出混叠。system:可选的系统输入态制备(缺省 \(|0\rangle\)),宽度必须等于 swap_width;输入不同的本征态,读出对应不同的本征值峰。swap_width:参与交换的前缀位宽,语义同density_matrix_exponentiation(纯化场景取 \(\rho\) 的系统位宽)。
返回 Operation,寄存器为 system、copies、phase。读出 phase 后用 eigenvalue_from_phase(value, precision, step_time) 解码本征值:按 \(\lambda \in [0, \pi/\Delta t)\) 分支取两补码相位,\(\lambda\Delta t\) 超出该范围时混叠由调用方负责。模块属性:
属性 |
含义 |
|---|---|
|
|
|
|
|
总拷贝数 \(2^{\text{precision}} - 1\) |
|
单步演化时间 \(\Delta t\) |
|
|
实现要点¶
生成链为:可选系统初态制备 → 全部拷贝从全零由制备 oracle 填充 → phase 制备均匀叠加 → 相位估计的受控幂展开:phase 第 \(b\) 位控制 \(2^b\) 次连续部分交换(拷贝按固定游标顺序逐份消费,恰好用完 \(2^p - 1\) 份)→ 对 phase 施加 inverse_qft(precision)。寄存器布局 system(swap_width) | copies((2^p-1)\cdot w) | phase(p),\(w\) 为制备宽度。
部分交换的逐位精确分解(XX+YY+ZZ = 2·SWAP − I)与指数化原语共用,细节见密度矩阵指数化。
设计决策与适用边界:大 \(\Delta t\) 的 LMR 一阶误差表现为峰展宽而不移峰位——峰位(众数)解码仍精确、分布的圆周均值仍在容差内(见验证方案),因此见证允许直接按峰位读出。解码分支限定 \(\lambda\Delta t \in [0, \pi)\),更大的本征值需调用方预缩放 \(\Delta t\)。
验证方案¶
类别 C3(概率分布语义,判定准则见 ../development/validation-plan.md §2):读出分布的峰位须与 \(\rho\) 的闭式谱对拍。三层证据:
结构:
tests/core/test_qpca.py:QpcaTests.test_invalid_inputs_fail_at_generation覆盖 precision 越界(0 / 7)、step_time = 0、swap_width 越界、system 宽度不符、解码值越界等全部入口违例。数值:
test_pure_state_eigenvalues——\(\rho = |+\rangle\langle+|\)(本征值 1、0):系统输入 \(|+\rangle\)(拷贝态本身,部分交换作用在 SWAP 对称本征态上对任意 \(\Delta t\) 精确)时取 precision = 3、\(\Delta t = \pi/4\)(\(\varphi = 7/8\) 落在 QPE 栅格上),读出确定(places = 9)、解码 \(\lambda = 1\)(places = 12);输入 \(|-\rangle\) 时峰展宽,分布圆周均值仍以 \(\lambda = 0\) 为中心(delta = 0.15)。test_mixed_state_eigenvalue_via_purification——\(\rho = \mathrm{diag}(0.75, 0.25)\) 经纯化适配,系统输入 \(|0\rangle\) 读出主本征值:峰位解码恰为 0.75(places = 12,峰高 > 0.4),圆周均值 delta = 0.15。绑定:混合态的 DM 输入经
gate_purification(...).as_state_preparation()适配为 SP 进入电路,由test_mixed_state_eigenvalue_via_purification覆盖。
已知缺口与计划阶段¶
无已知缺口,阶段 V1 见证已齐(纯态/混合态特征值峰对拍 + 指数化侧 \(\Delta t\) 一阶率与 copies 标度见证)。按 validation-plan §5 的 V3 计划,QPCA 待登记 catalog 案例并接入真实后端对拍。
相关链接¶
源码:
src/oracq/algorithms/qml/qpca.py同模块页面:密度矩阵指数化
API 参考:QPCA 量子主成分分析
验证矩阵:验证覆盖矩阵
数值验证¶
论文级数值实验见 tests/verification/verify_misc_algorithms.py(misc_algorithms 组),全部在真实后端上执行。
实验设计:三个 QPCA 读出案例,本征值预言机为 numpy eigvalsh(与被测实现独立)。(a) 纯态 \(\rho = \lvert+\rangle\langle+\rvert\)、系统输入 \(\lvert+\rangle\):precision = 3、\(\Delta t = \pi/4\)(\(\varphi = 7/8\) 落在 QPE 栅格),共 11 量子位;(b) 混合态 \(\rho = \mathrm{diag}(0.75, 0.25)\) 经纯化适配、系统输入 \(\lvert 0\rangle\):\(\Delta t = 2\pi/6\)(\(\lambda = 0.75\) 恰在栅格),共 18 量子位;(c) 同 \(\rho\)、系统输入 \(\lvert 1\rangle\) 读次本征值 \(\lambda = 0.25\)(该 \(\Delta t\) 下不在 3 位栅格,以圆周均值对照)。后端路径:reference、rir-pysparq、adapter-pysparq、originir-ext(UniQC 全振幅),相位分布以 TVD 对拍。
关键指标:
案例 |
规模 |
路径 |
峰位解码 λ |
峰高 |
圆周均值 λ |
跨后端 TVD |
|---|---|---|---|---|---|---|
qpca-pure-plus-deterministic |
11 量子位,7 拷贝 |
四路径分布对拍 |
1(误差 0,确定性读出) |
1.0000 |
— |
≤ 1.2e-16 |
qpca-mixed-primary |
18 量子位,7 拷贝 |
四路径分布对拍 |
0.75(误差 0) |
0.4997 |
0.8306(偏差 0.081) |
≤ 1.0e-15 |
qpca-mixed-secondary |
18 量子位,7 拷贝 |
四路径分布对拍 |
0.75(离栅格信息项) |
0.2874 |
0.3909(偏差 0.141,≤ 0.15) |
≤ 2.4e-15 |
大 \(\Delta t\) 的 LMR 一阶误差只展宽峰而不移峰位:主本征值由众数精确解码,次本征值的圆周均值偏差(0.141)源于展宽偏斜,与核心测试的容差口径一致。
复现:
PYTHONPATH=src /home/agony/projects/qcfd-dev/quantum-cfd-software/.venv/bin/python tests/verification/verify_misc_algorithms.py
产物:out/verification/misc_algorithms.json(24 个案例全过,本页对应 qpca-* 三个案例)。