4. QAOA量子线路原理
QAOA(Quantum Approximate Optimization Algorithm)的量子线路并不复杂,它的核心只有两个算子:问题哈密顿量演化算子与混合哈密顿量演化算子。二者以固定顺序交替出现,形成一层(layer),重复 p 层后对初态进行测量。理解这条线路,关键不是记住门序列,而是看清“相位编码代价、混合算子制造干涉”这一对互补作用。
一、从代价函数到问题哈密顿量
设组合优化问题有 n 个二值变量,目标是最小化代价函数 C(z),其中 z ∈ {0,1}^n。QAOA 的第一步是把经典代价函数“对角化”为量子哈密顿量:
H_C = Σ_z C(z) |z⟩⟨z|
由于 H_C 在计算基下是对角的,它的本征值就是每个比特串对应的代价。以 MaxCut 为例,图 G=(V,E) 的代价为被切断边数,其哈密顿量可写成:
H_C = Σ_(i,j)∈E (1 - Z_i Z_j) / 2
这里 Z_i 是作用在第 i 个量子比特上的泡利 Z 算符。注意符号约定:我们采用“最小化”视角,因此常把最大化问题取负号转为最小化,全文保持一致。
二、问题演化算子 U_C(γ)
问题算子定义为 U_C(γ) = exp(-i γ H_C),其中 γ 是待优化参数。由于 H_C 对角,它在计算基上的作用只是给每个基态 |z⟩ 附加一个相位:
U_C(γ)|z⟩ = exp(-i γ C(z)) |z⟩
这个相位不改变测量概率,却为后续干涉埋下“代价信息”。在门级实现上,ZZ 项通过 CNOT–RZ–CNOT 结构完成:以边 (i,j) 为例,先 CNOT(i→j),再对 j 施加 RZ(2γ),最后 CNOT(i→j) 还原。单比特 Z 项则直接施加 RZ 门。所有项对易,因此顺序可任意,这为线路编译提供了灵活性。
三、混合演化算子 U_B(β)
混合算子通常取 U_B(β) = exp(-i β H_B),H_B = Σ_i X_i。它在计算基上不是对角的,作用是把振幅在相邻比特串之间“搅拌”:
exp(-i β X_i) = cos β · I - i sin β · X_i
单比特上等价于 RX(2β) 门。混合算子的作用是让不同代价的基态振幅发生干涉,使低代价解的振幅逐步增强。若没有 U_B,U_C 只改相位、不改概率,测量结果始终是均匀分布;若没有 U_C,U_B 只是无信息地旋转。二者缺一不可。
四、线路构造与演化过程
完整线路的构造顺序如下:首先对全部 n 个量子比特施加 Hadamard 门,得到均匀叠加态 |+⟩^⊗n,这是“所有候选解等概率”的起点。随后进入 p 层循环,第 k 层依次施加 U_C(γ_k) 与 U_B(β_k)。最终在计算基下测量,得到比特串样本。
以 4 节点环图 MaxCut 为例,边集为 (0,1)、(1,2)、(2,3)、(3,0)。取 p=1、γ=0.6、β=0.4,则线路为:H⊗4 → 对四条边各做 CNOT–RZ(1.2)–CNOT → 对四个比特各做 RX(0.8) → 测量。这里 RZ 角度为 2γ=1.2,RX 角度为 2β=0.8,这是示例参数,用于说明角度换算关系,并非实测最优值。
演化过程可以这样理解:U_C 把每个基态的代价写进相位,代价越低的态相位越“整齐”;U_B 把这些相位差转化为振幅差,使低代价态在干涉中增强。p 越大,线路表达力越强,但参数维度为 2p,优化难度和噪声影响也随之上升。
五、参数优化闭环
量子线路本身不“求解”,它只是把参数 (γ, β) 映射为一个量子态。真正的求解发生在经典侧:多次运行线路,统计测量样本,估计期望代价:
⟨H_C⟩ ≈ (1/M) Σ_(s=1..M) C(z_s)
其中 M 为采样次数,z_s 为第 s 次测量得到的比特串。经典优化器(如 COBYLA、Nelder–Mead 或梯度方法)据此更新参数,再送回量子线路,形成闭环。判断是否收敛,可观察连续若干轮期望代价的相对变化是否小于阈值(例如 1e-3),同时检查最优样本的代价是否稳定。
六、常见实现要点
- 角度换算:U_C 中 ZZ 项的 RZ 角度为 2γ,U_B 中 RX 角度为 2β,写代码时容易漏掉因子 2。
- 符号一致:若把最大化问题转为最小化,H_C 取负号,则 γ 的符号约定需全文统一,否则优化方向相反。
- 对易性利用:H_C 各 ZZ 项对易,可任意排序;H_B 各 X 项也对易。但 U_C 与 U_B 之间不对易,交替顺序不能随意调换。
- 初态选择:标准 QAOA 用 |+⟩^⊗n;若问题有约束(如恰好选 k 个),可改用约束满足的初态,但混合算子也需相应调整。
掌握这条“相位编码—干涉搅拌—测量估计—经典更新”的链路,就掌握了 QAOA 量子线路的全部骨架。后续的变体(如多角度 QAOA、约束感知混合算子)都是在这一骨架上替换或扩展某个算子,而非推翻结构。