Skip to content
分享链接
回到顶部

量子门与量子线路

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 指令示例验证规则
X2PX2P=Rx(π/2)=eiπ/4σx=12[1ii1]X2P Q1
X2MX2M=Rx(π/2)=eiπ/4σx=12[1ii1]X2M Q1
Y2PY2P=Ry(π/2)=eiπ/4σy=12[1111]Y2P Q1
Y2MY2M=Ry(π/2)=eiπ/4σy=12[1111]Y2M Q1
XY2PXY2P(θ)=Rz(θπ/2)Ry(π/2)Rz(π/2θ)=eiπ/4(cos(θ)σx+sin(θ)σy)=12[1ieiθieiθ1]XY2P Q1 θ
XY2MXY2M(θ)=Rz(θ+π/2)Ry(π/2)Rz((π/2+θ))=eiπ/4(cos(θ)σx+sin(θ)σy)=12[1ieiθieiθ1]XY2M Q1 θ
CZCZ=[1000010000100001]CZ Q1 Q2Q1,Q2需满足
硬件连接条件
RZRZ(θ)=eiθ/2σz=[eiθ/200eiθ/2]RZ Q1 θ
I在一段时间t(ns)内无操作I Q1 tt为整数,单位为0.5ns
即当t=1时,时间为0.5ns
B对齐量子操作B Q1 Q2

注:

  • RZ 指令中的θ 没有[ π,π)的约束

表 2: QCIS复合门的编译规则

指令说明QCIS 指令编译规则
XX=[0110]X Q1X2P Q1
X2P Q1
YY=[0ii0]Y Q1Y2P Q1
Y2P Q1
SS=eiπ/4Rz(π/2)=[100i]S Q1RZ Q1 π/2
SDSD=eiπ/4Rz(π/2)=[100i]SD Q1RZ Q1 -π/2
TT=eiπ/8Rz(π/4)=[100eiπ/4]T Q1RZ Q1 π/4
TDTD=eiπ/8Rz(π/4)=[100eiπ/4]TD Q1RZ Q1 -π/4
ZZ=iRz(π)=[1001]Z Q1RZ Q1 π
HH=12[1111]H Q1Case1: RZ Q1 π
Y2P Q1
Case2:Y2M Q1
RZ Q1 π
RXRX(θ)=eiθ/2σx=[cosθ/2isinθ/2isinθ/2cosθ/2]RX Q1 θRZ Q1 π/2
X2P Q1
RZ Q1 θ
X2M Q1
RZ Q1 π/2
RYRY(θ)=eiθ/2σy=[cosθ/2sinθ/2sinθ/2cosθ/2]RY Q1 θX2P Q1
RZ Q1 θ
X2M Q1
RXYRXY(ϕ,θ)=eiθ/2n^σ^
=[cosθ/2ieiϕsinθ/2ieiϕsinθ/2cosθ/2]
n^=(cosϕ,sinϕ,0)
RXY Q1 ϕ  θRZ Q1 π/2ϕ
X2P Q1
RZ Q1 θ
X2M Q1
RZ Q1 ϕπ/2

注:

  • H指令有两种编译形式,相互等效,在实际编译时按照1:1比例随机选取

1.2 Cqlib 定义的其他量子门

除了对 QCIS 原生门的支持,Cqlib 还内置了大量常见的量子门类型,用于构建更高阶量子线路、实验模型或算法模块。 这些拓展门类型在提交至云平台运行前,会由Cqlib编译器自动分解为平台支持的原生门组合,确保与硬件指令系统兼容,同时保留用户定义逻辑的准确性。

表 3: 其他复合门的编译规则

指令说明QCIS 指令编译规则
CXCX=[1000010000010010]CX Q0 Q1Y2M Q1
CZ Q0 Q1
Y2P Q1
CYCY=[1000000i00100i00]CY Q0 Q1RZ Q1 pi/2
Y2P Q1
CZ Q0 Q1
Y2M Q1
RZ Q1 -pi/2
CRXCRX(θ)=[1000010000cos(θ/2)isin(θ/2)00isin(θ/2)cos(θ/2)]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
CRYCRY(θ)=[1000010000cos(θ/2)sin(θ/2)00sin(θ/2)cos(θ/2)]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
CRZCRZ(θ)=[1000010000e(iθ/2)0000e(iθ/2)]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
SWAPSWAP=[1000001001000001]SWAP Q0 Q1Y2M Q1
CZ Q0 Q1
Y2P Q1

Y2M Q0
CZ Q1 Q0
Y2P Q0

Y2M Q1
CZ Q0 Q1
Y2P Q1

CCXCCX=[1000000001000000001000000001000000001000000001000000000100000010]CCX Q0 Q1 Q2CZ Q1 Q2
Y2M Q2
RZ Q2 -pi/4
Y2P Q2

CZ Q0 Q2
Y2M Q2
RZ Q2 pi/4
Y2P Q2

CZ Q1 Q2
RZ Q1 pi5/4
Y2P Q1
Y2M Q2
RZ Q2 -pi/4
Y2P Q2

CZ Q0 Q2
CZ Q0 Q1
Y2M Q2
RZ Q2 pi/4
Y2P Q2
Y2M Q1
RZ Q1 -pi/4
Y2P Q1
RZ Q0 pi/4

CZ Q0 Q1
Y2M Q1
RZ Q1 pi

2. 量子比特

量子比特(Qubit,Quantum Bit)是量子计算的基本信息单元,类比于经典计算中的比特(Bit),但具备量子叠加、量子纠缠等量子力学特性,使其能够实现远超经典计算的能力。

  • 可处于状态|0⟩|1⟩或它们的叠加态
  • 支持量子纠缠并行计算

2.1 量子比特的表示

量子比特的状态可用复数向量表示:

· 基态:

|0=[10]

|1=[01]

· 叠加态:

|ψ=α|0+β|1=[αβ]

其中 αβ 为复数振幅,且满足归一化条件: |α|2+|β|2=1

2.2 应用量子门

以Hadamard门为例,作用于|0⟩后的结果为:

H|0=|0+|12

此时测量结果为0或1的概率均为50%。

2.3 量子计算机的拓扑结构

在量子芯片中,量子比特通常以特定的几何结构排列,构成一个拓扑网络。拓扑结构的设计直接影响到量子门操作的效率、量子纠错能力以及整体系统的可扩展性。以 天衍-176-Ⅱ 的芯片为例。

图片中的每一个点代表一个量子比特,连线表示比特间的耦合通道,支持它们之间的信息交换和量子操作。

3. 量子线路

量子线路是构建量子计算的核心结构,由量子比特(Qubits)和量子门(Quantum Gates)构成,描述了量子算法的执行流程。

3.1 第一个量子程序

下面介绍第一个量子程序:Bell 态制备。

贝尔态是量子力学中的一种重要纠缠态,涉及两个量子比特。贝尔态在量子信息和量子计算中具有重要的应用。贝尔态的制备过程是:用了量子门操作(Hadamard门和CX门)来生成一个 Bell 态,并对量子比特进行测量(M)。

python
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 指定量子比特

当使用逻辑比特编程时,通常只需要指定量子比特的数量。

python
from cqlib import Circuit

circuit = Circuit(3)

当对指定的物理比特编程时,需要指定量子比特的编号。

python
from cqlib import Circuit, Qubit

circuit = Circuit([0, 7, 13])

# 或者使用 Qubit 对象
circuit = Circuit([Qubit(0), Qubit(7), Qubit(13)])

3.3 应用量子门

量子线路对象(Circuit)支持直接调用量子门操作,用于构建量子线路:

python
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 类支持参数化线路。

· 少量参数示例(推荐直接指定参数变量):

python
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─

· 多参数场景(例如运行时动态生成)建议使用列表:

python
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─
                                └───────┘      

· 三种等价的参数赋值方式:

python
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 方法查看量子线路的文本格式指令:

python
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 不支持的量子门。

python
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