# QAOA 算法详解:量子近似优化算法 QAOA(Quantum Approximate Optimization Algorithm,量子近似优化算法)由 Edward Farhi、Jeffrey Goldstone 和 Sam Gutmann 于 2014 年提出,是针对组合优化问题设计的变分量子算法。它在 NISQ(Noisy Intermediate-Scale Quantum,近期含噪中等规模量子)设备上具有实际可行性,并且是少数在理论上可以严格刻画其近似能力的量子算法之一。 ## 问题背景:组合优化 许多重要的计算问题可以表述为组合优化:给定定义在 $n$ 位比特串上的成本函数 $C(\mathbf{z})$,我们要找 $$\mathbf{z}^* = \arg\max_{\mathbf{z} \in \{0,1\}^n} C(\mathbf{z}).$$ 典型的例子包括: - MaxCut:把图的顶点分成两组,使两端分属不同组的边("被切断的边")尽可能多; - Max-SAT:给定布尔公式,找到满足最多子句的变量赋值; - 旅行商问题(Traveling Salesman Problem, TSP):找到访问所有城市的最短回路; - 图着色、背包问题、调度问题等。 这些问题大多是 NP-Hard:经典精确算法在最坏情形下需要指数时间,而经典近似算法的近似比存在理论限制(例如 MaxCut 在唯一博弈猜想下的 0.878 上限对应 Goemans-Williamson 算法)。 QAOA 的目标是:用 $p$ 层量子电路($p$ 为小整数),以多项式资源找到质量可随 $p$ 提升的近似解。 ## 核心思想:交替演化 QAOA 把优化问题编码为两个哈密顿量,通过交替演化来搜索最优解。 第一个是问题哈密顿量(problem Hamiltonian)$H_C$,它把目标函数编码为对角矩阵: $$H_C = \sum_{\mathbf{z}} C(\mathbf{z})\, |\mathbf{z}\rangle\langle\mathbf{z}|,$$ 即 $H_C|\mathbf{z}\rangle = C(\mathbf{z})|\mathbf{z}\rangle$。对于 MaxCut 这类问题,$H_C$ 还可以等价地写成泡利算符 $Z_i Z_j$ 的和(下一节我们从 $C(\mathbf{z})$ 出发完整推导这一形式)。 第二个是混合哈密顿量(mixer Hamiltonian)$H_B$,它驱动量子态在计算基之间跃迁: $$H_B = \sum_{i=1}^{n} X_i.$$ 需要注意一个细节:$|+\rangle^{\otimes n}$ 是 $\sum_i X_i$ 的最高本征态(本征值 $+n$),而不是基态。为了与绝热演化的叙述一致,本教程把混合哈密顿量取为 $H_B = -\sum_i X_i$,此时 $|+\rangle^{\otimes n}$ 是 $H_B$ 的基态(本征值 $-n$)。两种约定只差替换 $\beta \to -\beta$,得到的能量期望完全相同。 **$p$ 层 QAOA 态**定义为 $$|\vec{\gamma}, \vec{\beta}\rangle = \prod_{l=1}^{p} \Big[ e^{-i\beta_l H_B}\cdot e^{-i\gamma_l H_C} \Big]\cdot |+\rangle^{\otimes n},$$ 其中参数向量 $\vec{\gamma} = (\gamma_1, \ldots, \gamma_p)$、$\vec{\beta} = (\beta_1, \ldots, \beta_p)$ 待优化。矩阵乘积从右向左作用,因此最右边的 $e^{-i\gamma_1 H_C}$ 最先执行。 这一结构的直觉是:$e^{-i\gamma H_C}$ 在计算基上施加依赖于成本值的相位——$C(\mathbf{z})$ 越大的分量相位转得越多,相当于"标记好解";$e^{-i\beta H_B}$ 把各计算基分量混合起来,让好解的相位模式转化为振幅上的增强。交替施加两类算符,好解的振幅逐层干涉增强,这与 Grover 振幅放大有相似的机制,但每层的"转动量"由可调参数控制。 ## 算法步骤详解 ### 第一步:问题编码——从比特串到 $Z_i Z_j$ 我们以 MaxCut 为例,完整推导从目标函数到泡利哈密顿量的每一步。 给定图 $G = (V, E)$,赋值是每个顶点上的比特 $b_i \in \{0, 1\}$。一条边 $(i,j)\in E$ 被切断,当且仅当 $b_i \neq b_j$。我们引入自旋变量 $s_i \in \{+1, -1\}$,约定 $b_i = \frac{1 - s_i}{2}$(即 $b_i = 0 \leftrightarrow s_i = +1$,$b_i = 1 \leftrightarrow s_i = -1$)。对每条边,切断指示符有两种等价写法: $$\mathbb{1}[b_i \neq b_j] = b_i + b_j - 2\,b_i b_j = \frac{1 - s_i s_j}{2}.$$ 我们验证一下:右边的第一式,当 $(b_i, b_j) = (0,0)$ 或 $(1,1)$ 时取 $0$,当 $(0,1)$ 或 $(1,0)$ 时取 $1$;第二式中,$b_i = b_j$ 时 $s_is_j = +1$、取值为 $0$,$b_i \neq b_j$ 时 $s_is_j = -1$、取值为 $1$。再把 $b_i = (1-s_i)/2$ 代入第一式: $$\frac{1-s_i}{2} + \frac{1-s_j}{2} - 2\cdot\frac{(1-s_i)(1-s_j)}{4} = \frac{2 - s_i - s_j}{2} - \frac{1 - s_i - s_j + s_is_j}{2} = \frac{1 - s_is_j}{2},$$ 两个表达式确实一致。MaxCut 的目标函数是所有边的切断指示符之和: $$C(\mathbf{b}) = \sum_{(i,j)\in E} \frac{1 - s_i s_j}{2}.$$ 现在把经典变量提升为算符。计算基 $|\mathbf{b}\rangle = |b_1 b_2 \cdots b_n\rangle$ 满足 $Z_i|\mathbf{b}\rangle = (1 - 2b_i)|\mathbf{b}\rangle = s_i|\mathbf{b}\rangle$(由 $Z|0\rangle = +|0\rangle$、$Z|1\rangle = -|1\rangle$ 直接得到)。因此 $Z_i$ 正是自旋变量 $s_i$ 对应的算符,而 $Z_iZ_j$ 对基矢的本征值就是 $s_is_j$。把逐边求和中的 $s_i s_j$ 替换为 $Z_iZ_j$,得到量子化的成本哈密顿量 $$H_C = \sum_{(i,j)\in E} \frac{1 - Z_i Z_j}{2} = \frac{|E|}{2}\,I - \frac{1}{2}\sum_{(i,j)\in E} Z_i Z_j.$$ 它是对角的,且 $H_C|\mathbf{b}\rangle = C(\mathbf{b})|\mathbf{b}\rangle$:每条边贡献一个 $-\frac{1}{2}Z_iZ_j$ 项加上常数 $\frac{1}{2}$,一一对应。 对一般的 QUBO(Quadratic Unconstrained Binary Optimization,二次无约束二值优化)问题,同样的推导逐项展开即可。设 $$C(\mathbf{b}) = \sum_{i} Q_{ii}\, b_i + \sum_{ii} Q_{ij} - \frac{1}{4}\sum_{j 返回目录:[量子计算算法教程系列](https://chenzhaoyun.com/index.php/archives/54/)