3. 仿真环境搭建

量子网络仿真平台的选型与搭建,决定了后续所有实验的可行边界。本节聚焦三个主流平台:NetSquid(离散事件、Python、面向量子中继与链路层协议)、QuISP(OMNeT++ 模块化、面向量子互联网路由与资源调度)、SimulaQron(轻量、面向分布式量子计算与量子程序开发)。三者定位不同,安装路径与首个可运行示例也各不相同。

一、平台定位与选择依据

选择平台时,先明确仿真目标:若研究纠缠分发、退相干、门误差对链路吞吐的影响,NetSquid 的物理模型最细;若研究多节点路由、纠缠交换调度与经典-量子混合控制平面,QuISP 的模块化网络栈更合适;若目标是验证分布式量子算法(如远程 CNOT、量子隐形传态程序),SimulaQron 的编程接口最直接。三者并非互斥,很多研究会用 SimulaQron 做协议原型,再用 NetSquid 做性能评估。

三大平台定位与仿真层次对照 NetSquid 离散事件 · Python • 量子比特物理模型 • 退相干 / T1 / T2 • 门误差与测量误差 • 纠缠分发协议 • 链路层吞吐评估 典型输出 保真度-距离曲线 纠缠率 / 时延分布 QuISP OMNeT++ · 模块化 • 量子互联网路由 • 纠缠交换调度 • 资源管理策略 • 经典-量子控制平面 • 多节点拓扑仿真 典型输出 路由成功率 / 吞吐 资源利用率热图 SimulaQron 轻量 · 分布式量子计算 • 量子隐形传态 • 远程 CNOT • 量子程序开发 • 经典-量子接口 • 快速原型验证 典型输出 算法正确性验证 量子比特状态快照

二、NetSquid 安装与首个仿真

NetSquid 需要注册获取许可证,安装依赖 Python 3.8+ 与 pip。推荐在虚拟环境中安装,避免与系统包冲突:

python -m venv nsq-env
source nsq-env/bin/activate        # Windows: nsq-env\Scripts\activate
pip install netsquid
python -c "import netsquid; print(netsquid.__version__)"

若输出类似 1.1.5 的版本号,说明安装成功。NetSquid 的核心抽象是节点(Node)、连接(Connection)与协议(Protocol)。下面是一个最小可运行示例:两个节点通过量子信道连接,模拟纠缠分发并统计保真度。

import netsquid as ns
from netsquid.nodes import Node, Network
from netsquid.components import QuantumChannel
from netsquid.protocols import NodeProtocol

# 创建两个节点
node_a = Node("A", port_names=["q"])
node_b = Node("B", port_names=["q"])

# 建立量子信道,长度 10 km,退相干时间 1 ms
channel = QuantumChannel("ch", length=10, models={"delay": 1e-3})
network = Network("demo")
network.add_nodes([node_a, node_b])
network.add_connection(node_a, node_b, channel, port_name_a="q", port_name_b="q")

# 运行仿真 1000 ns
ns.sim_reset()
ns.set_random_state(42)
ns.sim_run(duration=1000)
print("仿真完成,当前时间:", ns.sim_time())

运行后输出 仿真完成,当前时间: 1000.0。这个骨架可以逐步扩展:加入 DepolarNoiseModel 模拟门误差,加入 FibreLossModel 模拟光纤衰减,再用 EntanglementSwappingA 协议实现中继。判断仿真是否合理,关键看保真度随距离的衰减曲线是否符合预期——例如在 10 km 处保真度约 0.95,50 km 处降至 0.75 左右(示例值,实际取决于噪声参数)。

三、QuISP 安装与网络配置

QuISP 基于 OMNeT++,安装分两步:先装 OMNeT++ 6.0,再编译 QuISP。Linux 下典型流程:

# 安装 OMNeT++
wget https://github.com/omnetpp/omnetpp/releases/download/omnetpp-6.0/omnetpp-6.0-linux-x86_64.tgz
tar xzf omnetpp-6.0-linux-x86_64.tgz
cd omnetpp-6.0 && source setenv && ./configure && make -j$(nproc)

# 编译 QuISP
git clone https://github.com/sfc-aqua/quisp.git
cd quisp && source /path/to/omnetpp-6.0/setenv
make MODE=release -j$(nproc)

QuISP 的仿真由 .ini 配置文件驱动。一个最小拓扑配置如下:

[General]
network = QuantumNetwork
sim-time-limit = 10s

[Config SimpleChain]
*.numNodes = 3
*.node[*].numQubits = 10
*.node[*].quantumChannelLength = 20km
*.node[*].quantumChannelLoss = 0.2dB/km
*.node[*].gateErrorRate = 0.01
*.node[*].measurementErrorRate = 0.005

运行 ./quisp -u Cmdenv -c SimpleChain 后,OMNeT++ 会输出 .sca 与 .vec 结果文件。用 IDE 打开可查看纠缠交换成功率、端到端时延与量子比特占用率。若成功率低于 0.5,优先检查 gateErrorRate 是否过大,或信道损耗是否超过纠缠交换的容忍阈值。

四、SimulaQron 安装与量子程序运行

SimulaQron 安装最轻量,适合快速验证量子协议:

pip install simulaqron
simulaqron set network-config-file examples/network.json
simulaqron start --nodes Alice,Bob

启动后,Alice 与 Bob 是两个独立的量子节点进程。下面用 Python 编写一个远程制备纠缠并测量的示例:

from simulaqron.sdk.protocol import SimulaQronClient
from netqasm.sdk import EPRSocket
from netqasm.sdk.external import NetQASMConnection

def alice():
    epr = EPRSocket("Bob")
    conn = NetQASMConnection("Alice", epr_sockets=[epr])
    epr.recv_qubit()  # 接收纠缠比特
    conn.flush()

def bob():
    epr = EPRSocket("Alice")
    conn = NetQASMConnection("Bob", epr_sockets=[epr])
    epr.recv_qubit()
    conn.flush()

运行后,SimulaQron 会输出每个节点的量子比特状态快照。判断程序是否正确,可检查纠缠保真度是否接近 1(理想仿真下),以及测量相关性是否满足贝尔不等式违背。若保真度明显偏低,通常是 EPR 对生成或信道噪声配置有误。

五、环境验证与常见问题

三个平台安装完成后,建议用统一的最小测试用例验证环境:创建一个两节点网络,执行一次纠缠分发,输出保真度与耗时。若 NetSquid 报 LicenseError,检查许可证文件是否放在 ~/.netsquid;若 QuISP 编译失败,确认 OMNeT++ 的 setenv 已 source;若 SimulaQron 节点无法通信,检查 network.json 中的端口是否被占用。环境验证通过后,即可进入后续的协议建模与性能评估环节。