Opcode 模拟器详解#

什么时候进入本页#

当你需要了解底层模拟器的实现细节、支持的后端类型、量子门列表或直接操作 opcode 列表时,进入本页。

本页是 本地模拟 的延伸阅读,适合已经完成基础模拟验证、需要深入理解后端行为或排查底层问题的读者。

如果你还未完成基础线路构建与本地模拟,建议先阅读 本地模拟

OpcodeSimulator 是 UnifiedQuantum 的底层模拟器,直接操作 opcode 列表进行量子线路模拟。它通过 C++ 扩展(pybind11)实现高性能计算。

创建模拟器#

from uniqc.simulator import OpcodeSimulator

# 状态向量后端(默认)
sim = OpcodeSimulator(backend_type='statevector')

# 密度矩阵后端(支持噪声模拟)
sim = OpcodeSimulator(backend_type='density_matrix')

# 基于 QuTip 的密度矩阵后端(用于交叉验证)
sim = OpcodeSimulator(backend_type='density_matrix_qutip')

支持的后端类型#

后端

类型别名

说明

噪声支持

statevector

state_vector

纯态状态向量模拟

density_matrix

density_operator, densitymatrix

C++ 密度矩阵模拟

density_matrix_qutip

density_operator_qutip

QuTip 密度矩阵(验证用)

支持的量子门#

单量子比特门#

门名

操作

参数

H

Hadamard

X

Pauli-X (NOT)

Y

Pauli-Y

Z

Pauli-Z

S

S 门 (√Z)

SDG

S†

T

T 门 (∜Z)

TDG

T†

SX

√X

RX

绕 X 轴旋转

theta

RY

绕 Y 轴旋转

theta

RZ

绕 Z 轴旋转

theta

U1

相位门

lambda

U2

U2 门

phi, lambda

U3

通用单比特门

theta, phi, lambda

双量子比特门#

门名

操作

参数

CNOT / CX

受控 NOT

CZ

受控 Z

SWAP

SWAP

ISWAP

iSWAP

XY

XY 交互

theta

XX

XX 交互

theta

YY

YY 交互

theta

ZZ

ZZ 交互

theta

三量子比特门#

门名

操作

参数

TOFFOLI / CCX

Toffoli

CSWAP / Fredkin

受控 SWAP

特殊门#

门名

操作

参数

RPhi

绕 Bloch 球面 φ 角旋转

theta, phi

RPhi90

90° RPhi

phi

RPhi180

180° RPhi

phi

UU15

双比特通用门(15 参数)

15 个角度参数

PHASE2Q

双比特相位

theta

受控门支持#

所有门都支持通过 control_qubits_set 参数添加控制量子比特:

# 对 qubit 0 施加 X 门,以 qubit 1 为控制位
sim.x(qubit=0, control_qubits_set=[1], is_dagger=False)

模拟结果获取#

# 初始化量子比特数
sim.init_n_qubit(n_qubit)

# ... 施加门操作 ...

# 获取概率分布(指定测量比特)
prob = sim.pmeasure(measure_qubits)

# 获取状态向量(仅 statevector 后端)
sv = sim.state

# 获取密度矩阵(仅 density_matrix 后端)
dm = sim.state

直接使用 Opcode 列表#

Opcode 列表是 (operation, qubit, cbit, parameter, is_dagger, control_qubits_set) 元组的列表:

opcodes = [
    ('H', [0], None, None, False, []),
    ('CNOT', [0, 1], None, None, False, []),
    ('RX', [0], None, [1.57], False, []),
]

sim = OpcodeSimulator()
sim.init_n_qubit(2)
for opcode in opcodes:
    operation, qubit, cbit, parameter, is_dagger, control_qubits_set = opcode
    sim.simulate_gate(operation, qubit, cbit, parameter, is_dagger, control_qubits_set)

已知限制#

  • statevector 后端:所有门均已通过测试