经典计算中,最基本的单元是比特,在经典计算中对比特的操作采用电信号的处理方式,不同的逻辑门对应相应的电信号处理方式,实现对比特的基本操作。我们可以通过不同的逻辑门组合来达到控制电路的目的。类似于经典计算,量子计算中对量子比特的操作需要操纵使用量子逻辑门使量子态发生演化,通过不同的量子逻辑门组合最终实现量子线路的控制。使用量子逻辑门,我们有意识的使量子态发生演化。
量子逻辑门操作实际为一种矩阵变换,因此量子线路中的量子逻辑门操作也称为酉变换,酉变换是一种矩阵操作。酉变换作用于一个量子态上可以得到的一个新的量子态。例如一个量子态为|φ〉经过U操作后得到量子态|φ₀〉,即可以写作|φ〉=U|φ₀〉。酉矩阵U满足关系式UU†=I,因此酉矩阵的转置复共轭矩阵U†(Udagger)也是一个酉矩阵酉变换是一种可逆变换。
在量子线路中与经典逻辑门类似的门有NOT门、CNOT门、Toffoli门、SWAP门。以下将分别介绍每种逻辑门,并使用启科量子QuTrunk产品对每种逻辑门进行应用实践。
在经典计算机中,二进制0和1表示是经典计算最基本的一种语言表述形式。同样,在量子力学中,总能找到两种对应的态,可以分别表示为|0〉态和|1〉态。这里将要介绍的NOT门相当于经典计算中的非门作用。当输入态为|0〉态,经过NOT门作用后将得到|1〉态。
那么量子计算中的NOT门该如何表示呢?在启科量子的可视化应用中,NOT门即为Pauli-X门。相应的门作用后的量子态线路可表示为|0〉——X——|1〉,或者其公式可写为X|0〉=|1〉。关于X门的应用以Grover算法中构造oracle门为例:
def apply_oracle(qr, num_qubits, sol_elem):
for q in range(num_qubits):
if ((sol_elem >> q) & 1) == 0:
X | qr[q]
ctrls = []
for q in range(num_qubits):
ctrls.append(qr[q])
C(Z, len(ctrls) - 1) | (tuple(ctrls))
for q in range(num_qubits):
if ((sol_elem >> q) & 1) == 0:
X | qr[q]
apply_oracle(qr, num_qubits, sol_elem)
if ((sol_elem >> q) & 1) == 0: X | qr[q]
如果判断搜索元素为目标函数,则对其进行翻转。CNOT门也称为CX门,由控制位和目标位构成,控制位为●,目标位为⊕。CNOT门在启科量子可视化应用软件QuComposer可以表示为●——⊕。如果输入态为|1〉tensor|0〉时,控制位●|1〉态保持不变,目标位⊕|0〉态翻转为|1〉。由于CNOT门可以作用于双量子比特上,如果控制位处于叠加态时,CNOT门可以创建纠缠态。如下图所示,初态均为|0〉态,使用一个CNOT门操作后,测量控制位为|0〉态,目标位为|1〉态。
CNOT门的指令表示为CNOT | (qr[0],qr[1])
,通常而言前面的量子比特为控制位,后一个量子比特为目标位。
Toffoli门(又称CCNOT门) 与CNOT门相似。其主要区别是Toffoli门的控制位为两个比特位,目标位仍为一个量子比特。因此Toffoli门操作主要作用于三个量子比特,其运行规则为当且仅当两个控制位均为|1〉时,目标位的量子比特状态才会发生翻转。Toffoli门在启科量子可视化应用软件QuComposer可以表示为●—●——⊕。Toffoli门的指令表示为Toffoli | (qr[0],qr[1],qr[2])
。一般而言,前两个比特位为控制变量,后一个比特位为目标变量对应的真值表如下:
SWAP门也可以称作受控互换门,是一个经典逻辑门,其主要作用可以让两个量子比特互换状态,用bra和ket可表示为:|a,b〉=|b,a〉,swap q[0],q[1]
。SWAP门的量子线路表示如下所示:
q_0: ─X─
│
q_1: ─X─
启科量子可视化应用软件QuComposer后续会加入SWAP门操作的可视化设计。实际上,SWAP门操作也等价于由三个受控非门组成的量子线路。
单个量子状态除了能用狄拉克符号|φ⟩表示以外,还可用布洛赫球(Bloch Sphere)更直观表示单量子比特的状态。在布洛赫球表示法中,单个量子比特可以用三维球面上的某个点表示。在布洛赫球面上,任一纯态均可唯一对应到布洛赫球面上的一个点,布洛赫球的中心点表示完全混合态。但值得注意的是,布洛赫球仅为量子态的一种直观的表示方式,并不是量子态的几何位置表示。两个态矢在抽象意义上相互正交,但反映在布洛赫球面上却是π,是态矢在抽象意义上夹角为π/2的两倍,两个态矢在态空间的夹角总是它们在物理空间上夹角的1/2。
在布洛赫球中θ表示量子态概率信息,如当θ=0时,量子比特测量得到|0⟩态的概率为100%;当θ=90°时,量子比特测量得到|0⟩态和|1⟩态的概率均为50%;当θ=180°时,量子比特测量得到|1⟩态的概率为100%。而φ可以表示相位信息,如当φ=0时,量子比特的狄拉克符号表示方式变成|α|β|;当φ=180°时,量子比特的狄拉克符号表示方式变成|α|β|,其中α和β是实数。布洛赫球的半径为1,所以也可以通过量子比特处于球面点的z轴坐标表示|0⟩态和|1⟩态的概率:
T门也被称为π门,作用于|1〉态,可将|1〉的相位旋转π(注意:π是i的平方根,因此T门即π是相位门的平方根)。T门在启科量子计算软件QuBranch中的指令表示为T | qr[q]
。目前对于资料中对T门的解释主要为公式解释,其使用相对于H门、X门等通用门频率较少。
2.2 S门(与S†门,Sdg门)
S门应用一个相位i于|1〉态,等价于RZ旋转角度为
π,记作π。S门在启科量子计算软件QuBranch中的指令表示为S | qr[q]
。
学习泡利矩阵可以通过深入理解布洛赫球加深理解。RX,RY,RZ意味着将量子态在布洛赫球上分别绕着X,Y,Z轴旋转θ角度。θ变化说明RX,RY能带来概率幅的变化,而φ的变化表明RZ只有相位的变化。当共同使用这三种操作时,量子态可在整个布洛赫球上自由移动。RX,RY,RZ的矩阵表示如下图所示:
Rx、Ry分别表示量子态在布洛赫球中绕X轴和Y轴旋转0角度,该旋转带来的0角度变化表示对应量子态概率的变化。Rz表示对应量子态在布洛赫球中绕Z轴旋转给定的角度,绕Z轴旋转会改变相位角φ角,即表示该量子态相位的变化。
Rx、Ry、Rz门在启科量子计算软件QuBranch中的指令表示分别为Rx(pi/2) | qr[q]
、Ry(pi/2) | qr[q]
、Rz(pi/2) | qr[q]
。
哈达玛门也称Hadamard gate、H门。H门使用最为广泛且频率极高。执行各量子算法的第一步即是制备初态,产生量子叠加态。其矩阵表示如下图:
如以下代码示例中,在定义函数时可设置量子比特数。如果量子比特数设为n,则对应进行n次H门操作即可以表示为H^{⊕n}
。从量子力学的角度,此H门操作利用了量子计算的叠加特性,表示同时可以执行2^n次运算。
def apply_diffuser(qr, num_qubits):
for q in range(num_qubits):
H | qr[q]
再如Deutsch算法中,首先使用X | qureg[1]
指令对|0〉态进行X门操作得到|1〉态,再对所有量子态进行H门操作制备初态,其指令写为All(H) | qureg
。
def Deutsch():
# allocate
qc = QCircuit()
qureg = qc.allocate(2)
X | qureg[1]
All(H) | qureg
CNOT | (qureg[0], qureg[1])
H | qureg[0]
All(Measure) | qureg
以上图为通用量子逻辑门的符号表示及对应矩阵。
QuTrunk开源地址:
http://github.com/qudoor/qutrunk
— 完 —