1. 状态向量模拟的工程定位
在量子程序的实际执行链路中,状态向量并不是一个抽象的数学符号,而是贯穿编译、调度、执行与结果读取全过程的核心数据结构。理解它的工程定位,需要先回答三个问题:它表示什么、它适合表示什么规模的系统、以及它在线路执行中如何被逐步改写。
一个 n 量子比特的纯态可以写成 2ⁿ 个复数振幅的线性组合:
|ψ⟩ = Σ α_i |i⟩, i = 0 … 2ⁿ−1
约束:Σ |α_i|² = 1
在模拟器中,这个式子落地为一个长度为 2ⁿ 的复数数组 state[],下标 i 对应计算基态 |i⟩,元素值对应振幅 α_i。例如 3 量子比特系统,state 长度为 8,初始态 |000⟩ 对应 state[0] = 1+0j,其余为 0。所有单比特门、受控门、测量都表现为对这个数组的读写与线性组合,这就是状态向量模拟的本质。
与密度矩阵、稳定子模拟的适用边界
状态向量模拟只描述纯态,规模上限由内存决定:每个振幅占 16 字节(双精度复数),n 比特需要 2ⁿ × 16 字节。30 比特约 16 GB,32 比特约 64 GB,因此工程上通常把 30 比特左右视为单机状态向量模拟的实用边界。
密度矩阵模拟用 ρ = Σ p_k |ψ_k⟩⟨ψ_k| 描述混合态,维度为 2ⁿ × 2ⁿ,内存是状态向量的 2ⁿ 倍。它适合需要噪声建模、退相干、部分迹或非纯态初态的场景,但规模通常只能到十几比特。
稳定子模拟(Clifford 模拟)利用 Gottesman–Knill 定理,用多项式规模的生成元表描述 Clifford 群作用下的态,可轻松处理上千比特,但只能精确模拟 Clifford 门(H、S、CNOT 等)。一旦引入 T 门、任意旋转门或一般测量,就需要魔态注入或稳定子分解,代价迅速上升。
| 模拟方式 | 可表示状态 | 内存量级 | 典型适用场景 |
|---|---|---|---|
| 状态向量 | 纯态 | O(2ⁿ) | 通用门线路、算法验证、小中规模精确模拟 |
| 密度矩阵 | 混合态 | O(4ⁿ) | 噪声建模、退相干、开放量子系统 |
| 稳定子 | Clifford 态 | O(n²) | 大比特数 Clifford 线路、纠错码验证 |
选择依据可以归纳为:需要通用门且比特数在 30 以内,选状态向量;需要噪声或混合态且比特数在 15 以内,选密度矩阵;线路以 Clifford 门为主且比特数很大,选稳定子。三者不是互斥的,工程中常在同一框架内按线路片段切换后端。
从量子线路到状态向量演化的工程链路
一条量子线路进入模拟器后,会经历一条清晰的工程链路。以 3 比特线路 H(0); CNOT(0,1); RY(2, π/4); MeasureAll 为例:
- 线路解析:把门序列解析为带比特索引和参数的操作列表,如
[H, q0], [CNOT, q0, q1], [RY, q2, 0.785], [MEASURE, all]。 - 状态初始化:分配长度 8 的复数数组,置
state[0]=1,其余为 0,对应 |000⟩。 - 门作用:单比特门只改写与目标比特相关的振幅对;受控门按控制位为 1 的条件改写目标位振幅。例如 H(0) 把
state[0]与state[1]变为 (α₀+α₁)/√2 与 (α₀−α₁)/√2。 - 测量与采样:按 |α_i|² 得到概率分布,采样得到经典比特串,并把状态坍缩到对应基态。
- 结果读取:输出概率分布、采样计数或期望值,供上层算法判断。
这条链路中,状态向量是唯一被反复读写的核心对象,门是变换,测量是投影与采样,线路是变换序列的声明。工程实现的关键在于:振幅索引与比特顺序的映射必须全局一致,否则 CNOT 的控制位与目标位会错位;归一化必须在每步后保持,否则概率解释失效。
工程实现中的关键约定
比特顺序是最容易出错的地方。常见约定有两种:小端序把 q0 放在最低位,索引 i 的二进制第 0 位对应 q0;大端序则相反。无论选哪种,线路解析、门作用、测量采样和结果输出必须使用同一约定。例如 CNOT(0,1) 在小端序下,控制位是索引的第 0 位,目标位是第 1 位,只有当 (i & 1) != 0 时才翻转第 1 位。
归一化检查应作为调试手段:每执行若干门后计算 Σ|α_i|²,若偏离 1 超过 1e−10,说明门实现或索引映射有误。概率读取时,prob[i] = |state[i]|²,采样可用累积分布加随机数实现,也可用别名法加速。