本地模拟 {#guide-simulation}¶
什么时候进入本页 {#guide-simulation-when-to-read}¶
当你已经有一条线路,想在本地验证结果、查看概率分布、做多次采样,或比较不同模拟后端时,进入本页。
本页解决的核心问题是:如何把已经写好的线路跑起来,并根据目标选择合适的模拟方式与后端。
本页解决的问题 {#guide-simulation-problems}¶
如何把已有线路送入模拟器
如何查看概率测量、状态向量、多次采样等不同输出
如何选择 Simulator、OpcodeSimulator 等不同模拟入口
如何根据目标选择 statevector、density matrix、density matrix_qutip 等后端
如何在本地验证时识别已知限制与风险
uniqc.simulator与Backend=dummy有什么区别、该用哪个
前置条件¶
阅读本页前,默认你已经完成以下至少一项:
已经会使用
Circuit构建基础线路已经拿到了
originir或qasm字符串已经完成 快速上手 中的最小示例
如果你还不清楚如何创建线路、添加量子门或导出线路格式,建议先阅读 构建量子线路。
推荐阅读顺序 {#guide-simulation-reading-order}¶
建议按以下顺序阅读本页内容:
Simulator — 先跑通最常见的本地模拟路径
概率测量 / 状态向量 / 多次采样 — 理解不同输出类型分别回答什么问题
Opcode 模拟器 — 需要底层控制或特定后端时再进入
带噪声模拟 — 当你需要加入噪声模型时阅读
后端对比 — 根据验证目标选择不同后端
simulator vs dummy —
uniqc.simulator与Backend=dummy的区别与选择已知限制 — 在使用 density matrix 或复杂噪声路径前优先确认
本地模拟入口总览 {#guide-simulation-entry-overview}¶
在 UnifiedQuantum 中,“本地模拟”指的是不提交远端任务、直接在当前环境运行线路并查看结果。常见入口可以先按输入格式与验证目标来分:
本地模拟入口 |
输入形式 |
适合先看什么问题 |
|---|---|---|
|
|
已经用 |
|
opcode 列表 |
需要更底层控制、特定后端或排查后端差异 |
|
|
想在本地模拟阶段加入噪声模型并观察结果变化 |
|
|
比特数较多但纠缠/键维 ( |
|
|
想把模拟接入 PyTorch 计算图、做端到端可微分实验 |
MPSSimulator与TorchQuantumSimulator也可通过统一工厂入口构造:create_simulator(backend='mps')/create_simulator(backend='torchquantum')。
如果你还在决定线路该如何表达,先回到 构建量子线路;如果你已经完成本地验证,准备提交到云平台或真机执行,转到 提交任务。
uniqc.simulator 与 Backend=dummy 的区别 {#guide-simulation-vs-dummy}¶
uniqc.simulator(Simulator / NoisySimulator)与 submit_task(backend='dummy:*') 都在本地用经典计算模拟量子线路,但面向不同场景。
维度 |
|
|
|---|---|---|
入口方式 |
|
|
工作流程 |
直接调用本地模拟方法 |
经过 submit → query → wait 任务管道(与真实后端一致) |
噪声控制 |
通过 |
自动从 |
输出类型 |
pmeasure / statevector / density_matrix / shots |
|
适用场景 |
快速调试、算法验证、查看中间态 |
验证编译→提交→查询的完整链路 |
后端选择 |
|
|
选择建议:
快速验证概率分布或状态向量 → 用
Simulator,可直接拿到 pmeasure、statevector 等中间结果。验证从编译到结果获取的完整链路 → 用
submit_task(backend='dummy:*'),走与真实提交相同的管道。需要噪声但想手动配置 → 用
NoisySimulator+ErrorLoader。需要噪声且想模拟真实芯片特征 → 用
submit_task(backend='dummy:<platform>:<backend>'),噪声自动从 chip 校准数据派生。
Backend=dummy的详细用法见 提交任务 — Dummy 模式。
Simulator {#guide-simulation-originir}¶
最常用的模拟器,统一接受 Circuit 对象、originir 字符串或 qasm 字符串,并自动检测输入格式。无论是 OriginIR 还是 OpenQASM 2.0 线路,都可以直接使用同一个 Simulator 类。
from uniqc import Circuit
from uniqc.simulator import Simulator
circuit = Circuit()
circuit.h(0)
circuit.cnot(0, 1)
circuit.measure(0, 1)
sim = Simulator()
概率测量¶
prob = sim.simulate_pmeasure(circuit.originir)
# 返回各测量结果的概率分布
状态向量¶
sv = sim.simulate_statevector(circuit.originir)
# 返回状态向量
多次采样¶
result = sim.simulate_shots(circuit.originir, shots=1000)
# 返回 1000 次采样的统计结果
Opcode 模拟器与本地模拟后端 {#guide-simulation-opcode}¶
底层模拟器,直接操作 opcode 列表。支持多后端(每个后端都接受多种别名,便于在 CLI、Python API、文档之间互换):
规范名 (canonical) |
别名 (aliases) |
说明 |
|---|---|---|
|
|
状态向量(无噪声) |
|
|
密度矩阵(支持噪声) |
|
|
基于 QuTiP 的密度矩阵;需要 |
别名在
uniqc.simulator.backend_alias()中统一解析;OpcodeSimulator、create_simulator与 CLIuniqc simulate --backend接受同一组别名。
from uniqc.simulator import OpcodeSimulator
sim = OpcodeSimulator(backend_type='statevector')
Opcode 的详细文档见 Opcode。
带噪声的本地模拟 {#guide-simulation-noisy}¶
from uniqc.simulator import NoisySimulator
sim = NoisySimulator(
backend_type='density_matrix', # 噪声模拟必须使用 density_matrix 后端
error_loader=my_error_loader,
readout_error={0: [0.01, 0.02], 1: [0.01, 0.02]}
)
prob = sim.simulate_pmeasure(circuit.originir)
噪声模拟必须显式指定
backend_type='density_matrix';默认的statevector后端不支持噪声通道,调用simulate_pmeasure时会抛ValueError。
噪声模型的详细配置见 噪声模拟。
后端对比¶
后端 |
适用场景 |
噪声支持 |
性能 |
|---|---|---|---|
|
无噪声快速模拟,小规模线路(< 30 量子比特) |
❌ |
最快 |
|
含噪声模拟,双比特门为主 |
✅ |
较慢(内存 O(4^n)) |
|
复杂噪声模型,高精度需求 |
✅ |
较慢,依赖 Qutip |
CLI 与 Python API 的别名一致性:CLI
uniqc simulate --backend density与 Python API 的density_matrix/density_operator/densitymatrix/density都是同一种密度矩阵后端的别名(在uniqc.simulator.backend_alias()内部归一化为density_operator)。density_operator_qutip与其别名density_matrix_qutip同理。
选择建议:
一般无噪声模拟 →
uniqc.simulator.Simulator(基于 statevector)需要噪声模拟 →
uniqc.simulator.NoisySimulator(基于 density_matrix)复杂多比特噪声模型 →
density_matrix_qutip
已知限制 {#guide-simulation-known-limitations}¶
statevector后端无法模拟噪声。多比特门(> 2)在 density matrix 后端支持有限。
API 参考¶
完整的模拟器 API 见:
uniqc.simulator— 模拟器模块uniqc.simulator.OpcodeSimulatoruniqc.simulator.Simulatoruniqc.simulator.NoisySimulatoruniqc.simulator.mps_simulator.MPSSimulator/MPSConfig— MPS 后端,详见 MPS 模拟器uniqc.simulator.torchquantum_simulator.TorchQuantumSimulator— 基于 torchquantum 的可微分后端(需要unified-quantum[pytorch]extra 以及 git 安装的torchquantum)create_simulator(backend=...)— 统一工厂入口,backend支持'statevector' | 'density_matrix' | 'mps' | 'torchquantum'等
下一步¶
相关测试¶
test_simulator.py:噪声模拟器单元测试test_random_OriginIR.py:随机回归测试(密度矩阵对比)test_random_QASM.py:随机回归测试(statevector/density matrix 对比)test_demos.py:示例端到端测试
详见 测试覆盖说明。