4. 仿真环境搭建与工具选型

E91协议的核心是纠缠态分发、基矢选择、贝尔不等式检验与密钥筛选,因此仿真环境必须同时具备三方面能力:量子态的制备与演化、测量与统计采样、以及经典后处理与可视化。Python生态中,QuTiP与Qiskit是最常用的两类工具,但它们的定位并不相同,选型前需要先明确本节要仿真什么。

工具定位与选型判断

QuTiP(Quantum Toolbox in Python)面向开放量子系统的数值求解,擅长用密度矩阵、算符和超算符描述量子态及其演化,内置 Qobj、tensor、expect、mesolve 等对象与函数,非常适合刻画E91中纠缠源的不完美、信道噪声和测量算符。Qiskit则以量子线路为中心,提供 QuantumCircuit、AerSimulator、Statevector 等组件,适合把E91的测量过程写成线路并做统计采样。对于本课程,推荐以QuTiP为主做态与测量的精确计算,以Qiskit Aer做采样与线路级验证,二者互补而非替代。

E91仿真环境分层架构 ① 物理建模层(QuTiP) 贝尔态 |Φ⁺⟩ 制备 测量算符 A₀/A₁/B₀/B₁ 噪声信道(退极化) 密度矩阵 ρ 演化 ② 采样与线路层(Qiskit Aer) 基矢随机选择 测量线路 + shots 联合计数 N(a,b) 关联值 E(a,b) ③ 经典后处理层(NumPy / Pandas) S 值计算 误码率 QBER 密钥筛选与纠错 结果可视化 输出:S 值、QBER、密钥率 判断是否满足 S > 2 且 QBER 低于阈值 数据流方向:物理态 → 采样计数 → 统计量 → 安全性判定

安装与最小可用环境

建议使用独立虚拟环境,避免QuTiP与Qiskit的依赖版本互相干扰。以下命令在Python 3.10环境下验证思路可行,具体版本号可按实际发布情况调整:

python -m venv e91env
source e91env/bin/activate        # Windows 使用 e91env\Scripts\activate
pip install "qutip>=4.7" qiskit qiskit-aer numpy pandas matplotlib
python -c "import qutip, qiskit; print(qutip.__version__, qiskit.__version__)"

安装完成后先做一次冒烟测试:用QuTiP构造贝尔态并计算某个测量算符的期望值,确认 Qobj 运算正常;再用Qiskit Aer运行一个两比特线路并取 counts,确认采样链路可用。冒烟测试通过后再进入协议代码,能显著减少后续排障成本。

E91关键对象的代码化

E91使用四个测量算符,通常取A侧为A₀=σz、A₁=σx,B侧为B₀=(σz+σx)/√2、B₁=(σz−σx)/√2,对应CHSH组合 S=E(A₀,B₀)+E(A₀,B₁)+E(A₁,B₀)−E(A₁,B₁)。在QuTiP中可直接用 tensor(sigmaz(), qeye(2)) 这类写法构造两比特算符,再用 expect 求期望值。纠缠源用 bell_state('00') 或手工构造 |Φ⁺⟩=(|00⟩+|11⟩)/√2,噪声则通过退极化信道或混合态 ρ=(1−p)|Φ⁺⟩⟨Φ⁺|+p·I/4 引入,p为噪声比例。

采样层的关键是把“基矢选择”和“测量结果”对应起来。一种清晰做法是:对每一对光子随机抽取a∈{0,1}、b∈{0,1},按对应算符计算联合概率 P(±1,±1),再用 numpy.random.choice 按概率抽样,累计得到计数矩阵 N(a,b,ra,rb)。当样本量达到例如20000对时,关联值 E(a,b)=[N(+,+)+N(−,−)−N(+,−)−N(−,+)]/N_total 的统计涨落约在1/√N量级,足以观察S值是否越过2。

代码结构规划

建议按“配置—物理—采样—分析—入口”五层组织,目录不必复杂,但职责要清晰:

  • config.py:集中存放测量算符定义、噪声参数p、样本数shots、随机种子,保证实验可复现。
  • states.py:贝尔态制备、退极化噪声施加、密度矩阵有效性检查(迹为1、半正定)。
  • measure.py:四个算符的构造、联合概率计算、按基矢分组的采样函数。
  • analyze.py:由计数矩阵计算E(a,b)、S值、QBER,并输出判定结论。
  • run_e91.py:串起“制备→加噪→采样→统计→判定”,支持命令行传入p与shots。
把随机种子固定为同一值,先跑p=0的理想情形,确认S≈2√2≈2.828;再逐步增大p,观察S值下降与QBER上升的对应关系。这一条基线能帮助区分“代码错误”与“物理效应”。

结果观察与判定依据

仿真跑通后,至少观察三个量:理想无噪声时S应接近2.828,若明显偏离说明算符或计数映射有误;随噪声p增大,S单调下降,当S降至2附近时纠缠已不足以支撑安全密钥;QBER在无窃听、无噪声时应接近0,随p上升而增大。工程上常把QBER约11%作为安全边界参考,S>2与QBER低于阈值需同时满足才判定链路可用。把这些量打印成表并画成S–p曲线,是验证仿真环境是否正确的最直接方式。

QuTiP与Qiskit的比特序约定可能不同,tensor 的顺序与Qiskit线路中qubit编号的对应关系必须在 config.py 中统一说明并固定,否则测量算符会作用到错误的比特上,表现为S值异常但代码不报错。