购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 量子计算的基本操作

1.1节介绍了量子比特的基本概念,那么量子计算机是如何进行计算的呢?经典计算机执行计算的基本操作是逻辑门,量子计算机则基于量子力学原理执行计算。量子计算的基本操作包括量子逻辑门(简称量子门,包括单量子比特逻辑门、多量子比特逻辑门)、测量和量子线路等。本节介绍主要的量子计算基本操作。

1.2.1 单量子比特逻辑门

为酉矩阵,满足 表示状态的演化。在量子计算机中,各种形式的酉矩阵被称为量子逻辑门。常见的单量子比特逻辑门(简称单比特门)有泡利(Pauli)矩阵、阿达马(Hadamard)门(简称H门)和转动算符(Rotation Operator,又称旋转门),下面分别进行介绍。

1. 泡利矩阵

泡利矩阵有时也称为自旋矩阵(Spin Matrix),有3种形式,分别为Pauli-X门(简称X门,矩阵形式可记作 )、Pauli-Y门(简称Y门,矩阵形式可记作 )和Pauli-Z门(简称Z门,矩阵形式可记作 ),如式(1.12)~式(1.14)所示。

(1.12)

(1.13)

(1.14)

可以看出,X门相当于非门,它将 。Y门的作用相当于绕布洛赫球的 轴旋转角度 。Z门的作用相当于绕布洛赫球的 轴旋转角度

2. H门

H门的矩阵形式如式(1.15)所示。

(1.15)

1.2 H门常用的表达式如下:

(1.16a)

(1.16b)

(1.16c)

(1.16d)

(1.16e)

3. 旋转门

在了解旋转门之前,需要证明:设 是个实数, 是一个矩阵,且满足 ,则有 。该等式可利用e指数的泰勒展开及 得证,这里不赘述。

旋转门有3种形式,分别为RX门、RY门和 RZ门,它们分别以不同的泡利矩阵作为生成元构成,如式(1.17)~式(1.19)所示。

(1.17) (1.18)

(1.19)

上述单比特门可以统一表示为

(1.20)

通过控制 的取值以及简单的矩阵变换, 即可转化为以上所有单比特门的形式。例如,当 时,对 作两行交换就是H门。统一的表达矩阵 在底层实现过程中尤为重要。

理论上,对于单量子比特的任一酉算符,均有ZYZ分解。具体见定理1.1 [1]

定理 1.1 对于单量子比特的任一酉算符 ,存在 ,使得

(1.21)

1.3 除以上介绍的常用门以外,单比特门还有相位门(Phase Gate又称S门)和 门(又称T门),它们的矩阵形式分别为

1.2.2 多量子比特逻辑门

实现多量子比特逻辑门(简称多比特门)时,量子比特和量子逻辑门都是通过“张量积”运算完成增长的。对于 量子比特 量子比特系统的计算基就由 个单位正交向量组成,借助经典比特的进位方式对量子比特进行标记,从左到右依次是二进制中的高位到低位。也就是说, 为高位, 为低位。

标准的多比特门包括两量子比特逻辑门(简称两比特门)和三量子比特逻辑门(简称三比特门)。两比特门包括受控泡利门、受控H门、受控旋转门、受控相位门(Controlled Phase Gate,简称CR门)、换位逻辑(iSWAP)门。三比特门包括托佛利(Toffoli)门和控制--交换门[弗雷德金(Fredkin)门]等。下面简要介绍CNOT门、CR门、iSWAP门,以及多量子比特受控U门。

1. CNOT门

互不相关的两个量子比特能够在经典计算机上轻易模拟,而有纠缠的量子比特的纠缠性是通过受控操作(Controlled Operation)实现的,用受控门表示。最常用的受控门是受控非门,称为CNOT门(或 CX门),如图1.2所示。

图1.2 CNOT门

图1.2中的每根线都表示一个量子比特演化的路线,且这两根线有位次之分,从上到下依次表示从低位到高位的量子比特演化的路线。图1.2横跨两个量子比特,它代表将一个两比特门作用在这两个量子比特上。一般将含实点的路线对应的量子比特称为控制比特 (Control Qubit),另一条路线对应的量子比特为目标比特 (Target Qubit)。

若低位为控制比特,满足运算:

(1.22)

那么,CNOT门具有如下矩阵形式:

(1.23)

由此可见,当低位为控制比特、高位为目标比特时,若低位位置对应为1,高位就会被取反;当低位位置为0时,不对高位做任何操作。

若高位为控制比特,状态演变如图1.3所示。

图1.3 高位为控制比特时的状态演变

那么,CNOT门具有如下矩阵形式:

(1.24)

在计算机基础方面,CNOT门可以表示为 。也就是说,当控制比特为 态时,目标比特不发生改变;当控制比特为 态时,对目标比特执行X门(量子非门)操作。

2. CR门

受控相位门(Controlled Phase Gate)和CNOT门相似,通常称为 CR 门(或CPhase门),矩阵形式为

(1.25)

CR门在线路中的符号如图1.4所示。

图1.4 CR门

当控制比特为 态时,目标比特不发生改变;当控制比特为 态时,对目标比特执行相移门(Phase-shift Gate)。相移门的特征是,将CR门里的控制比特和目标比特的状态进行交换,矩阵形式不会发生任何改变。

3. iSWAP门

iSWAP门的主要作用是交换两个量子比特的状态,并且赋予其 相位。经典电路中有 SWAP 门,iSWAP门则是量子计算中特有的。iSWAP门在某些体系中是较容易实现的两比特门,它是先由 作为生成元生成,再作对角化。 门的矩阵形式为

(1.26)

iSWAP门在线路中的符号如图1.5所示。通常会用一个完整的翻转,即 的情况来指代iSWAP门。当角度为 时,记为 。对 门而言,两个量子比特之间的地位是对等的,不存在控制和受控的关系。

图1.5 iSWAP门

4. 一般受控U门

假设有 量子比特, 是一个 量子比特逻辑门,则可定义受控操作 :设 位控制比特 满足控制条件,则将 作用于 位目标比特 ,否则保持目标比特不变。本质上来说,任意情况的受控U门( )均有通用计算表达式,如式(1.27)所示。

(1.27)

式(1.27)可以写成

(1.28)

,就可得到CNOT门:

pg18a (1.29)

pg18b (1.30)

1.4 这里的特殊算符 可以衍生出测量、判别和镜像反射等多种用途,在后面的量子线路和量子算法中均有较多应用场景。

1.2.3 量子测量

对量子态进行测量会导致坍缩,即测量会影响原来的量子态,因此量子态的全部信息不可能通过一次测量得到。下面给出测量的通用计算表达式。

假设:量子测量由测量算符(Measurement Operator)的集合 来描述,这些算符可以作用在待测量系统的状态空间(State Space)中; 指标(Index) 表示实验中可能发生的结果。如果测量前的量子系统处在最新状态 ,那么测量结果 发生的概率为

(1.31)

并且测量后的系统状态转变为

(1.32)

由于所有可能情况的概率和为1,即

(1.33)

所以测量算符需满足 。该方程被称为完备性方程(Completeness Equation)。

量子测量有多种方式,如投影测量(Projective Measurement)、正算符值测量(Positive Operator-Valued Measure)。投影测量要求测量算符为投影算符 ,且满足 。正算符值测量并非全新的概念:对于任意的测量算符 ,记 ,可以看出 是正定的,且是完备的 ,则 是正算符值测量。可以说,投影测量与正算符值测量是一般测量的特例。当测量算符具有酉矩阵时,投影测量和一般测量等价。

下面介绍投影测量。投影测量由一个可观测量(Observable) 来描述,可观测量是一个待观测系统的状态空间上的自伴算符。对可观测量 进行谱分解:

(1.34)

在特征值 对应的特征空间上的投影。在对状态 进行测量之后,得到结果 的概率为

(1.35)

测量后,若结果 发生,则量子系统的最新状态为

(1.36)

投影测量的一个重要特征就是平均值及标准偏差很容易计算:

(1.37)

(1.38)

1.1 单量子比特在计算基下有两个测量算符,即 。这两个测量算符均是自伴的,即满足 ,且 ,因此 。因此,该测量算符满足完备性方程。

若对式(1.1)的量子态 进行测量,测量结果为0的概率为

(1.39)

相应地,测量后的状态为

(1.40)

同理可得, 以概率 处于 ,对应测量后的状态为

1.2 若可观测量是 ,现对待观测量 进行投影测量。首先,对 进行谱分解,得到 ,其中 。然后,对状态 进行测量,可知概率为

测量后,若结果1发生,则量子系统的最新状态为

(1.41)

若结果2发生,则量子系统的最新状态为

(1.42)

1.2.4 量子线路

量子线路又称量子逻辑电路,是最常用的通用量子计算模型,它表示在抽象概念下,对量子比特进行操作的线路。量子线路的组成包括量子比特、线路(时间线),以及各种量子逻辑门,最后常需要通过量子测量将结果读取出来。与传统电路用金属线进行连接以传递电压信号或电流信号不同,在量子线路中,线路是由时间连接,即量子比特的状态随着时间自然演化,这个过程遵循哈密顿算符(Hamiltonian Operator)的指示,直到遇上量子逻辑门而被操作。由于组成量子线路的每一个量子逻辑门都是一个酉算符,所以整个量子线路整体也是一个大的酉算符。下面看几个具体的例子。

对于1个控制比特和1个目标比特,受控 U门由图1.6所示线路表示。

4个控制比特和3个目标比特下的受控操作如图1.7所示。

图1.6 受控U门

图1.7 受控操作示例

对于三比特门,当 (NOT门)时,可得到Toffoli门:

(1.43)

Toffoli门的线路表示如图1.8所示。

且U门为SWAP门时,可得到Fredkin门:

(1.44)

Fredkin门的线路表示如图1.9所示。

图1.8 Toffoli门的线路表示

图1.9 Fredkin门的线路表示

在QPanda中,QCircuit类(量子线路类)是一个仅加载量子逻辑门的容器类型。初始化一个QCircuit对象的方式如下。

 1      cir = QCircuit()

读者可以通过如下方式向QCircuit对象的尾部填充量子逻辑门。这里,QPanda重载了运算符“ ”,用于向量子线路中插入量子操作。

 1      cir << X(qubits)

QCircuit的使用方式如代码1.1所示(PyQPanda是Python版的QPanda)。

代码1.1 QCircuit的使用方式
 1  import pyqpanda as pq
 2  
 3  
 4  if __name__ == '__main__':
 5  
 6      qvm = pq.CPUQVM()
 7      qvm.initQVM()
 8      qubits = qvm.qAlloc_many(2)
 9      cubits = qvm.cAlloc_many(2)
10      # 申请量子线路容器
11      cir = pq.QCircuit()
12      prog = pq.QProg()
13      # 给量子线路插入量子逻辑门,量子线路中不能包含量子逻辑门之外的任何操作,包括测量操作
14      cir << pq.H(qbits[0])\
15          << pq.CNOT(qubits[0],qubits[1])
16      prog << cir\
17           << pq.measure_all(qubits,cbits)
18      result = qvm.run_with_configuration(prog,cbits,1000)
19      print(result)

代码1.1申请了一个量子线路cir,并向cir中插入了H门和CNOT门。需要注意的是,量子线路中不能包含量子逻辑门之外的操作(如测量操作),所以想要在量子计算机中运行量子线路并获取计算结果,就需要把量子线路放到量子程序中。

1.2.5 量子程序

量子程序设计用于编写与构造量子算法,一般可以将它理解为一个操作序列。由于量子算法中会包含经典计算,因而设想量子计算机是混合结构的,它包含两大部分:一部分是经典计算设备,负责执行经典计算与控制;另一部分是量子设备,负责执行量子计算。所以,QPanda的量子程序与量子线路的区别在于前者可以包含一部分经典操作(如测量操作、经典逻辑运算操作等)。量子程序的定义更好地兼容了量子计算与经典计算。除了量子计算,它把一部分简单的经典计算也纳入了量子计算机的框架中,在量子计算机底层硬件的支持下,可以大大减少量子计算机与经典计算机之间频繁的数据交互。

在QPanda中,声明一个量子程序可以用QProg对象,它是一个容器,可以用来承载量子逻辑门、量子线路、测量等操作。初始化QProg的操作如下。

 1      prog = QProg()

读者还可以用已有的量子操作来构建量子程序。

 1      qubit = qAlloc()
 2      gate = H(qubit)
 3      prog = QProg(gate)

在QPanda中,读者可以通过运算符“ ”向QProg对象的尾部插入新的量子操作。

 1      prog << H(qubit)

读者可以通过运算符“ ”向QProg对象的尾部插入量子逻辑门、测量、量子线路及其他的量子程序。QProg的使用方式如代码1.2所示。

代码1.2 QProg的使用方式
 1  import pyqpanda as pq
 2  
 3  
 4  if __name__ == '__main__':
 5  
 6      qvm = pq.CPUQVM()
 7      qvm.initQVM()
 8      qubits = qvm.qAlloc_many(3)
 9      cbits = qvm.cAlloc_many(3)
10      #申请量子程序
11      prog = pq.QProg()
12      #给量子程序插入量子门和测量操作
13      prog << pq.H(qubits[0])\
14           << pq.CNOT(qubits[0],qubits[1])\
15           << pq.CNOT(qubits[1],qubits[2])\
16           << pq.measure_all(qubits,cbits)
17      result = qvm.run_with_configuration(prog,cbits,1000)
18      print(result)

代码1.2使用QProg构建的量子程序制备了3量子比特的GHZ态,形式如式(1.45)所示。

(1.45)

3量子比特的GHZ态可以通过1个H门和2个CNOT门制备得到,量子程序的计算结果如下。

 1     '000': 513, '111': 487

1.2.6 QIf与QWhile

量子线路的本质是一个量子逻辑门的执行序列,它是从左至右依次执行的。在经典计算中,人们经常会使用if、for、while等判断或循环操作。自然地,人们会考虑在量子计算机的层面是否存在与经典计算机中相似的循环和分支语句。因此,就有了QIf 和QWhile。

在量子计算中,QIf 和QWhile 的判断条件的信息并不是量子比特,而是一个经典的信息。这个经典的信息是基于测量的。在执行量子程序时,测量语句会先对量子比特施加一个测量操作,再将这个量子比特的测量结果保存到经典寄存器中。最后,可以根据这个经典寄存器的值,选择接下来要进行的操作。一段简单的QIf示例如代码1.3所示。

代码1.3 QIf示例
 1  import pyqpanda as pq
 2  
 3  if __name__ == "__main__":
 4  
 5      qvm = pq.CPUQVM()
 6      qvm.init_qvm()
 7      qubits = qvm.qAlloc_many(4)
 8      cbits = qvm.cAlloc_many(4)
 9  
10      prog = pq.QProg()
11      branch_true = pq.QProg()
12      branch_false = pq.QProg()
13      prog << pq.X(qubits[3]) << pq.Measure(qubits[3],cbits[3])
14      # 构建QIf的正确分支及错误分支
15      branch_true << pq.H(qubits[0])\
16                  << pq.H(qubits[1])\
17                  << pq.H(qubits[2])\
18                  << pq.Measure(qubits[0],cbits[0])\
19                  << pq.Measure(qubits[1],cbits[1])
20      branch_false << pq.H(qubits[0]) \
21                   << pq.CNOT(qubits[0], qubits[1])\
22                   << pq.CNOT(qubits[1], qubits[2])\
23                   << pq.Measure(qubits[0],cbits[0])\
24                   << pq.Measure(qubits[1],cbits[1])\
25                   << pq.Measure(qubits[2],cbits[2])
26  
27      # 构建QIf
28      qif = pq.QIfProg(cbits[3] ==1 , branch_true, branch_false)
29  
30      # 将QIf插入量子程序
31      prog << qif
32  
33      # 进行蒙特卡罗测量,并返回目标比特的测量结果,下标为二进制
34      result = qvm.run_with_configuration(prog, cbits, 1000)
35  
36      # 打印测量结果
37      print(result)

代码1.3构建了一个包含QIf的量子程序。首先,对qubits[·]施加一个X门,使其状态从 翻转为 ,然后对其执行测量操作,并把测量得到的值放在cbits[3]中。接下来,构建QIf的正确分支和错误分支,正确分支是通过H门制备qubits[0]和qubits[1]的叠加态,错误分支是制备qubits[0]到qubits[2]的GHZ态。最后,通过QIfProg构建量子判断程序,判断条件为当cbits的值为1时执行正确分支,否则执行错误分支。代码1.3的计算结果如下。

 1      '1000': 254, '1001': 236, '1010': 236, '1011': 274

从结果可以看出,程序很好地执行了量子判断,达到了预期效果。

1.2.7 基于量子信息的IF与WHILE

1.2.6小节介绍的是“量子信息、经典控制”,那么有没有“量子信息、量子控制”呢?对IF而言,答案是有的。定义“量子信息、量子控制”过程是一组量子比特的操作,它是由另一组量子比特的值决定的。一个简单的例子就是CNOT门。对 而言, 是否执行NOT门是由 的值决定的。基于量子信息的IF 的性质如下。第一,这种控制可以叠加。如果判断变量本身处于叠加态,那么操作比特也会出现执行/不执行量子逻辑门这两种分支,由此可判断变量和操作比特之间会形成纠缠态。第二,控制变量和操作比特之间不能共享量子比特,即 中的控制比特和目标比特一定不能相同。

基于量子信息的IF在实际的量子算法中使用得比较少,因此大部分量子软件开发包都没有加入这个功能。在Shor算法和其他基于布尔运算的线路中会采用这个思想(如对是否求模的判断),但实际中,一般是利用CNOT门的组合来实现。目前,WHILE还没有合适的定义,因为量子信息不确定,那么很有可能会在WHILE 中产生无法停机的分支。以经典控制的QWhile为例,如果控制变量 是1量子比特,那么每次都会有一个概率使得这个循环继续下去。因此,为了执行这个序列,就需要无限长的操作序列,这导致从物理上无法定义这种操作。 bsUCPTksTAfid0dV5pKJkZ3J/WmgF286CAyTQQiWQZTJcXxueJ5Ggw4+UEGT4ZJ9

点击中间区域
呼出菜单
上一章
目录
下一章
×