# 振幅估计(Amplitude Estimation)
English · **简体中文**
> 类别 C3 · 模块 [`oracq.algorithms.common.estimation`](../../api/algorithms/common/estimation.rst) · 阶段 V2
## 概述
估计态制备 $A$ 的好子空间概率:给定标记集合 $M\subset\{0,1\}^n$,$a=\sum_{i\in M}|\langle i|A|0\rangle|^2$。实现依据 Brassard 等人的振幅放大/估计框架([arXiv:quant-ph/0005055](https://arxiv.org/abs/quant-ph/0005055),另见算法目录"实现依据"节):对 Grover 迭代算子
$$
Q = A\,(2|0\rangle\langle 0|-I)\,A^\dagger\, S_{\mathrm{good}}
$$
做相位估计。$Q$ 的本征值为 $e^{\pm 2i\theta}$,$\sin^2\theta = a$;读出相位栅格值 $y$ 后按 $\hat a=\sin^2(\pi y/2^p)$ 解码。查询复杂度 $O(1/\varepsilon)$,相对经典 Monte Carlo 的 $O(1/\varepsilon^2)$ 呈二次改进。
## 接口与输入模型
```python
amplitude_estimation(preparation, marked, *, precision=3)
amplitude_from_phase(value, precision)
```
API 入口:{obj}`amplitude_estimation `、{obj}`amplitude_from_phase `
- `preparation`:零输入、复净工作区的态制备(SP),且必须支持伴随与受控调用——生成期经 {obj}`checked_state_preparation(adjoint=True, controlled=True) ` 检查契约。
- `marked`:目标空间中好状态的整数编号集合。
- `precision`:相位寄存器位数,范围 1..63。
返回 {obj}`Operation `,寄存器为 `target`、`work`、`phase`。模块属性:
| 属性 | 含义 |
|---|---|
| `algorithm` | `"amplitude_estimation"` |
| `readout_register` | `"phase"` |
| `decoder` | `"sin(pi*phase/2**precision)**2"` |
读出 `phase` 后调用 {obj}`amplitude_from_phase(value, precision) ` 解码:返回 $\sin^2(\pi\cdot\text{value}/2^p)\in[0,1]$,`value` 取 $0..2^p-1$。
## 实现要点
生成链为制备 → {obj}`phase_estimation(grover_iterate(preparation, marked)) `:Grover 迭代由 `search.py` 的 {obj}`grover_iterate ` 组装(标记来自 {obj}`phase_marks ` 生成的相位 oracle,见 [Grover 搜索](grover.md)),相位估计见[量子相位估计](qpe.md)。
镜像对称:本征相位 $+2\theta$ 与 $-2\theta$ 对应栅格点 $y$ 与 $2^p-y$,解码值相同——相位读出本身不区分两者。有限精度读出可能对应多个近似概率,采样与统计处理(含置信区间)由宿主负责,这是 docstring 的明确口径。
积分模块(`integration.py` 的 Heinrich 求和/积分)以本入口为读出核:比较器构造使好状态概率恰为 $E[v]/2^w$,再做标准振幅估计。
## 验证方案
类别 C3(判定准则见 `docs/development/validation-plan.md` §2)。三层证据与 `docs/development/validation-coverage.md` 的 `estimation.py` 行一致:
- 结构:`tests/core/test_algorithm_expansion.py:AlgorithmExpansionTests` 的构造与属性断言;制备的零输入/复净/伴随/受控契约违例在生成期抛错。
- 数值:`AlgorithmExpansionTests.test_amplitude_estimation_half_probability`——{obj}`uniform_state(1) ` 上标记 `(1,)`($a=1/2$ 恰在栅格上):相位分布全部质量落在 2 与 6 两点($p(2)+p(6)=1$,places=10),且 `amplitude_from_phase(2, 3)` 与 `amplitude_from_phase(6, 3)` 都精确等于 0.5。
- 绑定:模块行登记为"—"。
见证技术为精确态矢量模拟取相位边际分布,逐点对拍闭式(无采样断言)。
## 已知缺口与计划阶段
与 `docs/development/validation-coverage.md` 一致:QAE 置信区间声明未见证——现有见证只验证了点估计($a=1/2$ 的栅格精确情形)。validation-plan §2 将"估计值落在理论置信区间"列为 QAE 类的标准见证技术,有限精度相位读出的误差分布与置信区间对拍尚未落地。`estimation.py` 模块因此处于阶段 V2;补齐后须同步覆盖矩阵。
## 相关链接
- 源码:`src/oracq/algorithms/common/estimation.py`
- 教程:[搜索一个元素,并估计成功概率](../../tutorials/search-and-estimation.md)
- API 参考:[相位、振幅与重叠估计](../../api/algorithms/common/estimation.rst)
- 同组页面:[量子相位估计](qpe.md)、[量子计数](quantum-counting.md)、[Grover 搜索](grover.md)、[振幅放大](amplitude-amplification.md)、[Hadamard 检验](hadamard-test.md)、[SWAP 检验](swap-test.md)
- 验证矩阵:[验证覆盖矩阵](../../development/validation-coverage.md)
## 数值验证
`tests/verification/verify_estimation.py` 在真实后端上对本接口做分布级数值验证(QAE 部分共 7 个案例,全部通过)。实验设计:
- 实例:`uniform_state` 均匀制备($a=1/2$ 恰在解码栅格上;$a=3/8$ 不在栅格上)与 {obj}`gate_state_prep ` 非均匀制备($a=0.3$),精度 $p=3..6$。
- 经典参考:相位分布对照 Grover 双峰闭式 $P(y)=\tfrac12 D(y/2^p-\theta/\pi)+\tfrac12 D(y/2^p+\theta/\pi)$($D$ 为 Dirichlet 核,$\sin^2\theta=a$,独立推导);峰值解码误差对照 Brassard 界 $|\hat a-a|\le 2\pi\sqrt{a(1-a)}/2^p+\pi^2/4^p$。
- 后端路径:reference、rir-pysparq、adapter-pysparq、originir-ext 四条;每条路径独立取 `phase` 边际后两两交叉对拍。
| 案例 | 规模 | 路径 | 指标值 |
|---|---|---|---|
| $a=1/2$(栅格精确) | $p=3,4,5$ | 全部四条 | 双峰 $y=2^{p-2}$ 与 $2^p-2^{p-2}$ 各载 $1/2$;decode_error $=1.1\times10^{-16}$;max TVD $\le 3.3\times10^{-15}$ |
| $a=3/8$(栅格外) | $p=4,5,6$ | 全部四条 | decode_error $=0.0663/0.0275/0.0201$,Brassard 界 $0.2287/0.1047/0.0499$;max TVD $\le 1.9\times10^{-14}$ |
| $a=0.3$(非均匀制备) | $p=5$ | 全部四条 | decode_error $=0.00866$,界 $0.0996$;峰概率 $0.4851$;max TVD $=1.2\times10^{-15}$ |
复现命令:
```bash
PYTHONPATH=src /home/agony/projects/qcfd-dev/quantum-cfd-software/.venv/bin/python tests/verification/verify_estimation.py
```
产物路径:`out/verification/estimation.json`(案例名前缀 `qae-`)。