量子门与量子线路
1. 量子门
量子门是量子计算中的基本操作单元,用于对量子比特(qubit)施加特定变换,类似于经典计算中的逻辑门,但在作用机制上体现出量子叠加、纠缠与不可克隆等特性。
Cqlib 基于 QCIS (Quantum Computing Instruction Set)指令集构建,全面支持 QCIS 中定义的量子门,并在此基础上扩展了若干常用门操作,方便用户进行更灵活的线路构建与仿真测试。
1.1 QCIS 量子门
天衍量子计算云平台的物理机原生支持以下量子门操作:
- 基础原生门:X2P, X2M, Y2P, Y2M, RZ, I, B, M
- 平台内置复合门(将被自动转译为原生门):X, Y, S, SD, T, TD, Z, H, RX, RY, RXY.
注意事项: 在物理量子计算机上执行线路时,仅原生门会被直接下发执行,而复合门会根据特定转译规则被拆解为原生门序列。这一过程由平台自动完成。 若希望尽量保留原始电路结构、避免编译器进行改写,建议在线路设计时优先使用原生门进行构建。
表 1: QCIS原生门的使用规则
指令 | 说明 | QCIS 指令示例 | 验证规则 |
---|---|---|---|
X2P | X2P Q1 | 无 | |
X2M | X2M Q1 | 无 | |
Y2P | Y2P Q1 | 无 | |
Y2M | Y2M Q1 | 无 | |
XY2P | XY2P Q1 | 无 | |
XY2M | XY2M Q1 | 无 | |
CZ | CZ Q1 Q2 | Q1,Q2需满足 硬件连接条件 | |
RZ | RZ Q1 | 无 | |
I | 在一段时间t(ns)内无操作 | I Q1 t | t为整数,单位为0.5ns 即当t=1时,时间为0.5ns |
B | 对齐量子操作 | B Q1 Q2 | 无 |
注:
- RZ 指令中的
没有[ )的约束
表 2: QCIS复合门的编译规则
指令 | 说明 | QCIS 指令 | 编译规则 |
---|---|---|---|
X | X Q1 | X2P Q1 X2P Q1 | |
Y | Y Q1 | Y2P Q1 Y2P Q1 | |
S | S Q1 | RZ Q1 | |
SD | SD Q1 | RZ Q1 - | |
T | T Q1 | RZ Q1 | |
TD | TD Q1 | RZ Q1 - | |
Z | Z Q1 | RZ Q1 | |
H | H Q1 | Case1: RZ Q1 Y2P Q1 Case2:Y2M Q1 RZ Q1 | |
RX | RX Q1 | RZ Q1 X2P Q1 RZ Q1 X2M Q1 RZ Q1 | |
RY | RY Q1 | X2P Q1 RZ Q1 X2M Q1 | |
RXY | RXY Q1 | RZ Q1 X2P Q1 RZ Q1 X2M Q1 RZ Q1 |
注:
- H指令有两种编译形式,相互等效,在实际编译时按照1:1比例随机选取
1.2 Cqlib 定义的其他量子门
除了对 QCIS 原生门的支持,Cqlib 还内置了大量常见的量子门类型,用于构建更高阶量子线路、实验模型或算法模块。 这些拓展门类型在提交至云平台运行前,会由Cqlib编译器自动分解为平台支持的原生门组合,确保与硬件指令系统兼容,同时保留用户定义逻辑的准确性。
表 3: 其他复合门的编译规则
指令 | 说明 | QCIS 指令 | 编译规则 |
---|---|---|---|
CX | CX Q0 Q1 | Y2M Q1 CZ Q0 Q1 Y2P Q1 | |
CY | CY Q0 Q1 | RZ Q1 Y2P Q1 CZ Q0 Q1 Y2M Q1 RZ Q1 - | |
CRX | CRX Q0 Q1 | Y2M Q1 RZ Q1 $\theta/2 $ Y2P Q1 CZ Q0 Q1 Y2M Q1 RZ Q1 $ -\theta/2 $ Y2P Q1 CZ Q0 Q1 | |
CRY | CRY Q0 Q1 | Y2M Q1 RZ Q1 $pi/2 $ Y2P Q1 RZ Q1 $pi + \theta/2 $ Y2P Q1 CZ Q0 Q1 Y2M Q1 RZ Q1 $ -\theta/2 $ Y2P Q1 CZ Q0 Q1 RZ Q1 $pi/2 $ Y2P Q1 | |
CRZ | CRZ Q0 Q1 | RZ Q1 $pi + \theta/2 $ Y2P Q1 CZ Q0 Q1 Y2M Q1 RZ Q1 $ -\theta/2 $ Y2P Q1 CZ Q0 Q1 RZ Q1 $pi $ Y2P Q1 | |
SWAP | SWAP Q0 Q1 | Y2M Q1 CZ Q0 Q1 Y2P Q1 Y2M Q0 CZ Q1 Q0 Y2P Q0 Y2M Q1 CZ Q0 Q1 Y2P Q1 | |
CCX | CCX Q0 Q1 Q2 | CZ Q1 Q2 Y2M Q2 RZ Q2 - Y2P Q2 CZ Q0 Q2 Y2M Q2 RZ Q2 Y2P Q2 CZ Q1 Q2 RZ Q1 Y2P Q1 Y2M Q2 RZ Q2 - Y2P Q2 CZ Q0 Q2 CZ Q0 Q1 Y2M Q2 RZ Q2 Y2P Q2 Y2M Q1 RZ Q1 - Y2P Q1 RZ Q0 CZ Q0 Q1 Y2M Q1 RZ Q1 |
2. 量子比特
量子比特(Qubit,Quantum Bit)是量子计算的基本信息单元,类比于经典计算中的比特(Bit),但具备量子叠加、量子纠缠等量子力学特性,使其能够实现远超经典计算的能力。
- 可处于状态
|0⟩
、|1⟩
或它们的叠加态 - 支持量子纠缠和并行计算
2.1 量子比特的表示
量子比特的状态可用复数向量表示:
· 基态:
· 叠加态:
其中
2.2 应用量子门
以Hadamard门为例,作用于|0⟩后的结果为:
此时测量结果为0或1的概率均为50%。
2.3 量子计算机的拓扑结构
在量子芯片中,量子比特通常以特定的几何结构排列,构成一个拓扑网络。拓扑结构的设计直接影响到量子门操作的效率、量子纠错能力以及整体系统的可扩展性。以 天衍-176-Ⅱ
的芯片为例。

图片中的每一个点代表一个量子比特,连线表示比特间的耦合通道,支持它们之间的信息交换和量子操作。
3. 量子线路
量子线路是构建量子计算的核心结构,由量子比特(Qubits)和量子门(Quantum Gates)构成,描述了量子算法的执行流程。
3.1 第一个量子程序
下面介绍第一个量子程序:Bell 态制备。
贝尔态是量子力学中的一种重要纠缠态,涉及两个量子比特。贝尔态在量子信息和量子计算中具有重要的应用。贝尔态的制备过程是:用了量子门操作(Hadamard门和CX门)来生成一个 Bell 态,并对量子比特进行测量(M)。
from cqlib import Circuit
from cqlib.visualization import draw_text
circuit = Circuit(2)
circuit.h(0)
circuit.cx(0, 1)
circuit.measure_all()
print(draw_text(circuit))
Q0: ───H──■──M─
│
Q1: ──────X──M─
3.2 指定量子比特
当使用逻辑比特编程时,通常只需要指定量子比特的数量。
from cqlib import Circuit
circuit = Circuit(3)
当对指定的物理比特编程时,需要指定量子比特的编号。
from cqlib import Circuit, Qubit
circuit = Circuit([0, 7, 13])
# 或者使用 Qubit 对象
circuit = Circuit([Qubit(0), Qubit(7), Qubit(13)])
3.3 应用量子门
量子线路对象(Circuit)支持直接调用量子门操作,用于构建量子线路:
from cqlib import Circuit
from cqlib.visualization import draw_text
circuit = Circuit(3)
circuit.h(0)
circuit.h(1)
circuit.h(2)
circuit.cx(0, 1)
circuit.cx(1, 2)
circuit.cx(2, 0)
circuit.barrier(0, 1, 2)
circuit.measure_all()
print(draw_text(circuit))
Q0: ───H──■─────X──│──M─
│ │ │
Q1: ───H──X──■──┼──│──M─
│ │ │
Q2: ───H─────X──■──│──M─
3.4 线路参数
线路参数可用于控制量子门的具体数值,实现灵活的可编程线路。
Cqlib 提供 Parameter 类支持参数化线路。
· 少量参数示例(推荐直接指定参数变量):
from cqlib import Circuit, Parameter
from cqlib.visualization import draw_text
theta = Parameter('theta')
circuit = Circuit(3, parameters=[theta])
circuit.rx(0, theta)
circuit.ry(1, theta * 2)
circuit.rz(2, theta + 1)
circuit.barrier_all()
circuit.measure_all()
print(draw_text(circuit))
Q0: ─────RX(theta)────│──M─
│
Q1: ────RY(2*theta)───│──M─
│
Q2: ───RZ(theta + 1)──│──M─
· 多参数场景(例如运行时动态生成)建议使用列表:
from cqlib import Circuit, Parameter
from cqlib.visualization import draw_text
ps = [Parameter(f'p{i}') for i in range(3)]
circuit = Circuit(3, parameters=ps)
circuit.h(0)
circuit.h(1)
circuit.h(2)
circuit.cz(1, 0)
circuit.rx(0, theta=ps[0])
circuit.cz(2, 0)
circuit.rx(0, theta=ps[1])
circuit.cz(2, 1)
circuit.rx(1, theta=ps[2])
circuit.swap(0, 2)
circuit.barrier(0, 1, 2)
circuit.measure_all()
print(draw_text(circuit))
┌───────┐
Q0: ───H──■──RX(p0)──■──RX(p1)────────X──│──M─
│ │ │ │
Q1: ───H──■──────────┼────■─────RX(p2)┼──│──M─
│ │ │ │
Q2: ───H─────────────■────■───────────X──│──M─
└───────┘
· 三种等价的参数赋值方式:
c1 = circuit.assign_parameters({ps[0]: 0.1, ps[1]: 0.2, ps[2]: 0.3})
c2 = circuit.assign_parameters([0.1, 0.2, 0.3])
c3 = circuit.assign_parameters(p0=0.1, p1=0.2, p2=0.3)
print(draw_text(c3))
┌────────┐
Q0: ───H──■──RX(0.1)──■──RX(0.2)─────────X──│──M─
│ │ │ │
Q1: ───H──■───────────┼─────■─────RX(0.3)┼──│──M─
│ │ │ │
Q2: ───H──────────────■─────■────────────X──│──M─
└────────┘
3.5 QCIS 指令
可通过 as_str
方法查看量子线路的文本格式指令:
print(circuit.as_str())
H Q0
H Q1
H Q2
CZ Q1 Q0
RX Q0 p0
CZ Q2 Q0
RX Q0 p1
CZ Q2 Q1
RX Q1 p2
SWAP Q0 Q2
B Q0 Q1 Q2
M Q0
M Q1
M Q2
量子线路提交至天衍量子计算云平台之前,需要先转成 QCIS 指令集。
注意:非 QCIS 原生支持的量子门操作将自动分解为原生门形式。
qics 和 as_str 的区别是,转 qcis 的时候,会自动分解 QCIS 不支持的量子门。
print(circuit.qcis)
H Q0
H Q1
H Q2
CZ Q1 Q0
RX Q0 p0
CZ Q2 Q0
RX Q0 p1
CZ Q2 Q1
RX Q1 p2
Y2M Q2
CZ Q0 Q2
Y2P Q2
Y2M Q0
CZ Q2 Q0
Y2P Q0
Y2M Q2
CZ Q0 Q2
Y2P Q2
B Q0 Q1 Q2
M Q0
M Q1
M Q2