3. 仿真环境搭建
量子网络仿真平台的选型与搭建,决定了后续所有实验的可行边界。本节聚焦三个主流平台:NetSquid(离散事件、Python、面向量子中继与链路层协议)、QuISP(OMNeT++ 模块化、面向量子互联网路由与资源调度)、SimulaQron(轻量、面向分布式量子计算与量子程序开发)。三者定位不同,安装路径与首个可运行示例也各不相同。
一、平台定位与选择依据
选择平台时,先明确仿真目标:若研究纠缠分发、退相干、门误差对链路吞吐的影响,NetSquid 的物理模型最细;若研究多节点路由、纠缠交换调度与经典-量子混合控制平面,QuISP 的模块化网络栈更合适;若目标是验证分布式量子算法(如远程 CNOT、量子隐形传态程序),SimulaQron 的编程接口最直接。三者并非互斥,很多研究会用 SimulaQron 做协议原型,再用 NetSquid 做性能评估。
二、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 中的端口是否被占用。环境验证通过后,即可进入后续的协议建模与性能评估环节。