发明内容
本发明的目的是提供一种量子计算模拟方法、装置、存储介质和电子装置,以解决现有技术中的不足,它能够提高量子计算的模拟效率。本发明采用的技术方案如下:
为达到上述目的,本发明提供了一种量子计算模拟方法,所述方法包括:
遍历目标量子程序,判断所述目标量子程序是否符合预设适用条件;
若符合,拆分所述目标量子程序对应的量子线路,构建子量子线路;
针对每条所述子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算量子比特经对应所述子量子线路执行后的量子态振幅值;
根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。
可选的,所述预设适用条件包括:
所述目标量子程序包含单量子逻辑门和/或双量子逻辑门。
可选的,所述拆分目标量子程序对应的量子线路,构建子量子线路,包括:
判断所述目标量子程序对应的量子线路中是否包含双量子逻辑门;其中,所述量子线路包括:目标量子程序的前预设数量个量子比特所处的第一部分量子线路和其余量子比特所处的第二部分量子线路;
若包含双量子逻辑门,判断每一双量子逻辑门操作的两量子比特是否分别处于第一部分量子线路和第二部分量子线路中;
若每一双量子逻辑门操作的两量子比特均不分别处于第一部分量子线路和第二部分量子线路中,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
可选的,所述方法还包括:
若不包含双量子逻辑门,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
可选的,所述方法还包括:
若存在所操作的两量子比特分别处于第一部分量子线路和第二部分量子线路中的双量子逻辑门,判断该存在的各双量子逻辑门是否均为特定种类的双量子逻辑门;
若均为特定种类的双量子逻辑门,针对每一特定种类的双量子逻辑门,将该双量子逻辑门拆分为第一预设单门、第二预设单门和特定单量子逻辑门,并生成当前量子线路的副本,将所述第一预设单门添加到当前量子线路中,将所述第二预设单门和特定单量子逻辑门添加到当前量子线路的副本中;
其中,所述第一预设单门和所述第二预设单门操作的目标量子比特均为该双量子逻辑门的控制比特,所述特定单量子逻辑门操作的目标量子比特为该双量子逻辑门的操作比特,所述特定单量子逻辑门由该双量子逻辑门的种类确定;
拆分当前添加完成的所有新量子线路,将每一新量子线路对应的当前第一部分量子线路及第二部分量子线路,均确定为子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
可选的,所述特定种类至少包括以下一种或多种:
CNOT门、CZ门和CR门。
可选的,所述计算量子比特经对应子量子线路执行后的量子态的振幅值,包括:
当子量子线路中包含量子逻辑门时,基于子量子线路中量子逻辑门的执行时序,计算各量子逻辑门操作后的量子态的振幅值,直至得到最后一个量子逻辑门操作后的量子态的振幅值,作为量子比特经对应子量子线路执行后的量子态的振幅值;
其中,第一个量子逻辑门操作后的量子态振幅值根据对应量子比特初始化后的量子态振幅值和所述第一个量子逻辑门的酉矩阵计算得到,其余量子逻辑门操作后的量子态振幅值根据前一量子逻辑门操作后的量子态振幅值和当前量子逻辑门的酉矩阵计算得到;
否则,将初始化得到的量子态的初始振幅值,确定为该子量子线路执行后的量子态振幅值。
可选的,所述根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,包括:
在各子量子线路中均包含量子逻辑门的情况下,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值;
否则,根据不包含量子逻辑门的子量子线路外的其余子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值。
为达到上述目的,本发明提供了一种量子计算模拟装置,所述装置包括:
遍历模块,用于遍历所述目标量子程序,判断所述目标量子程序是否符合预设适用条件;
构建模块,用于所述目标量子程序符合预设适用条件的情况下,拆分目标量子程序对应的量子线路,构建子量子线路;
第一计算模块,用于针对每条子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算对应量子比特经子量子线路执行后的量子态振幅值;
第二计算模块,用于根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。
可选的,所述预设适用条件包括:
所述目标量子程序包含单量子逻辑门和/或双量子逻辑门。
可选的,所述构建模块,具体用于:
判断所述目标量子程序对应的量子线路中是否包含双量子逻辑门;其中,所述量子线路包括:目标量子程序的前预设数量个量子比特所处的第一部分量子线路和其余量子比特所处的第二部分量子线路;
若包含双量子逻辑门,判断每一双量子逻辑门操作的两量子比特是否分别处于第一部分量子线路和第二部分量子线路中;
若每一双量子逻辑门操作的两量子比特均不分别处于第一部分量子线路和第二部分量子线路中,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
可选的,所述装置还包括:
第一确定模块,用于在不包含双量子逻辑门的情况下,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
可选的,所述装置还包括:
判断模块,用于存在所操作的两量子比特分别处于第一部分量子线路和第二部分量子线路中的双量子逻辑门的情况下,判断该存在的各双量子逻辑门是否均为特定种类的双量子逻辑门;
添加模块,用于所述存在的各双量子逻辑门均为特定种类的双量子逻辑门的情况下,针对每一特定种类的双量子逻辑门,将该双量子逻辑门拆分为第一预设单门、第二预设单门和特定单量子逻辑门,并生成当前量子线路的副本,将所述第一预设单门添加到当前量子线路中,将所述第二预设单门和特定单量子逻辑门添加到当前量子线路的副本中;
其中,所述第一预设单门和所述第二预设单门操作的目标量子比特均为该双量子逻辑门的控制比特,所述特定单量子逻辑门操作的目标量子比特为该双量子逻辑门的操作比特,所述特定单量子逻辑门由该双量子逻辑门的种类确定;
第二确定模块,用于拆分当前添加完成的所有新量子线路,将每一新量子线路对应的当前第一部分量子线路及第二部分量子线路,均确定为子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
可选的,所述特定种类至少包括以下一种或多种:
CNOT门、CZ门和CR门。
可选的,所述第一计算模块,具体用于:
当子量子线路中包含量子逻辑门时,基于子量子线路中量子逻辑门的执行时序,计算各量子逻辑门操作后的量子态的振幅值,直至得到最后一个量子逻辑门操作后的量子态的振幅值,作为量子比特经对应子量子线路执行后的量子态的振幅值;
其中,第一个量子逻辑门操作后的量子态振幅值根据对应量子比特初始化后的量子态振幅值和所述第一个量子逻辑门的酉矩阵计算得到,其余量子逻辑门操作后的量子态振幅值根据前一量子逻辑门操作后的量子态振幅值和当前量子逻辑门的酉矩阵计算得到;
否则,将初始化得到的量子态的初始振幅值,确定为该子量子线路执行后的量子态振幅值。
可选的,所述第二计算模块,具体用于:
在各子量子线路中均包含量子逻辑门的情况下,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值;
否则,根据不包含量子逻辑门的子量子线路外的其余子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值。
为达到上述目的,本发明提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行以上所述的方法。
为达到上述目的,本发明提供了一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行以上所述的方法。
与现有技术相比,本发明通过遍历所述目标量子程序,判断所述目标量子程序是否符合预设适用条件;若符合,拆分目标量子程序中的量子线路,构建子量子线路;针对每条子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算对应量子比特经子量子线路执行后的量子态振幅值;根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。由于量子线路被拆分成各条子量子线路,每条子量子线路的量子比特数减少,线路复杂度得以降低,内存开销随之下降,从而能够在更低的硬件条件下,实现更高的量子计算模拟效率。
具体实施方式
下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本发明实施例提供了一种量子计算模拟方法,应用于电子设备如终端,优选应用于计算机,如普通电脑即可。下面对其进行详细说明。
参见图1,图1为本发明实施例提供的量子计算模拟方法的一种流程示意图,可以包括如下步骤:
S101,遍历目标量子程序,判断所述目标量子程序是否符合预设适用条件;若符合,执行S102,否则停止;
具体的,所述预设适用条件可以包括:目标量子程序包含单量子逻辑门和/或双量子逻辑门。对多(三及三以上)量子逻辑门不适用,量子逻辑门处于额外的受控状态(极少情况)不适用,如单量子逻辑门H门(Hadamard Gate,阿达马门)原本操作的量子比特为q0,人为操控H门额外操作q1和q3,使得H门操作3量子比特,导致H门处于额外的受控状态。如无特殊说明,本发明所指各量子逻辑门都处于正常操控状态下。
需要说明的是,真正的量子计算机是混合结构的,它包含两大部分:一部分是经典计算机,负责执行经典计算与控制;另一部分是量子设备,负责执行量子计算。实际上,真正的量子程序是由量子语言如Qrunes语言编写的一串能够在量子计算机(前述量子设备)上运行的指令序列,实现了对量子逻辑门操作的支持,并最终实现对量子计算的模拟。具体的说,量子程序就是一系列按照一定时序操作量子逻辑门的指令序列。
在实际应用中,为了对量子计算进行模拟以验证量子应用等等,可以通过运行在普通计算机的量子虚拟机实现。本发明实施例所指量子程序(目标量子程序),即是在量子虚拟机上运行的由经典语言编写的表征量子比特及其演化的程序,其中与量子计算相关的量子比特、量子逻辑门等等均有相应的经典代码表示。
量子线路,也称量子逻辑电路,是最常用的通用量子计算模型,表示在抽象概念下对于量子比特进行操作的线路,其组成包括量子比特、线路(时间线),以及各种量子逻辑门,最后常需要通过量子测量操作将结果读取出来。
不同于传统电路是用金属线所连接以传递电压信号或电流信号,在量子线路中,线路可看成是由时间所连接,亦即量子比特的状态随着时间自然演化,在这过程中按照哈密顿运算符的指示,一直到遇上逻辑门而被操作。
一个目标量子程序整体上对应有一条总的量子线路,本发明所述量子线路即指该条总的量子线路,其中,该量子线路中的量子比特总数与目标量子程序的量子比特总数相同。可以理解为:一个量子程序主要由量子线路、针对量子线路中量子比特的测量操作、保存测量结果的寄存器及控制流节点(跳转指令)组成,一条量子线路可以包含几十上百个甚至千上万个量子逻辑门操作。量子程序的执行过程,就是对所有的量子逻辑门按照一定时序执行的过程。需要说明的是,时序即个量子逻辑门被执行的时间顺序。
需要说明的是,经典计算中,最基本的单元是比特,而最基本的控制模式是逻辑门,可以通过逻辑门的组合来达到控制电路的目的。类似地,处理量子比特的方式就是量子逻辑门。使用量子逻辑门,能够使量子态发生演化,量子逻辑门是构成量子线路的基础,就像传统逻辑门跟一般数位线路之间的关系。量子逻辑门包括单量子逻辑门(简称单门)、双量子逻辑门(简称双门)以及多量子逻辑门(简称多门)。量子逻辑门一般使用酉矩阵表示,而酉矩阵不仅是矩阵形式,也是一种操作和变换。一般量子逻辑门在量子态上的作用是通过酉矩阵左乘以量子态右矢对应的矩阵进行计算的。
例如,量子态右矢|0>对应的矩阵为
而量子态右矢|1>对应的矩阵为
在实际应用中,遍历目标量子程序为现有技术,其作用一是为了进行预设适用条件的判断和量子逻辑门信息(什么门、门的矩阵形式等等)的提取与记录,二是为了后续拆分符合预设条件的双门,构建子量子线路,本发明在此不对其进行赘述。
S102,拆分所述目标量子程序对应的量子线路,构建子量子线路;
具体的,拆分目标量子程序对应的量子线路,构建子量子线路,可以包括:
判断所述目标量子程序对应的量子线路中是否包含双量子逻辑门;其中,所述量子线路包括:目标量子程序的前预设数量个量子比特所处的第一部分量子线路和其余量子比特所处的第二部分量子线路;
若包含双量子逻辑门,判断每一双量子逻辑门操作的两量子比特是否分别处于第一部分量子线路和第二部分量子线路中;
若每一双量子逻辑门操作的两量子比特均不分别处于第一部分量子线路和第二部分量子线路中,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
具体的,该部分表述的是量子线路中不包含分别处于第一部分量子线路和第二部分量子线路中的双门的情况,也就是说,第一部分量子线路和第二部分量子线路相互独立,并无同时作用于两部分中量子比特的双量子逻辑门,从而能够直接拆分该量子线路,得到2条子量子线路,即原第一部分量子线路和原第二部分量子线路分别被拆分出来,确定为2条单独的子量子线路,每条子量子线路中的量子逻辑门不变,但操作的量子比特的比特位需重新从0编号。
若不包含双量子逻辑门,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
具体的,该部分表述的是量子线路中全是单门的情况,也可以直接拆分该量子线路,得到2条子量子线路,每条子量子线路中的量子逻辑门不变,但操作的量子比特的比特位需重新从0编号。
若存在所操作的两量子比特分别处于第一部分量子线路和第二部分量子线路中的双量子逻辑门,判断该存在的各双量子逻辑门是否均为特定种类的双量子逻辑门;
若均为特定种类的双量子逻辑门,针对每一特定种类的双量子逻辑门,将该双量子逻辑门拆分为第一预设单门、第二预设单门和特定单量子逻辑门,并生成当前量子线路的副本,将所述第一预设单门添加到当前量子线路中,将所述第二预设单门和特定单量子逻辑门添加到当前量子线路的副本中,直至所有特定种类的双量子逻辑门被拆分并完成添加;
其中,所述第一预设单门和所述第二预设单门操作的目标量子比特均为该双量子逻辑门的控制比特,所述特定单量子逻辑门操作的目标量子比特为该双量子逻辑门的操作比特,所述特定单量子逻辑门由该双量子逻辑门的种类确定;
拆分当前添加完成的所有新量子线路,将每一新量子线路对应的当前第一部分量子线路及第二部分量子线路,均确定为子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
具体的,所述特定种类至少包括以下一种或多种:CNOT门(Control-not Gate,控制非门)、CZ门(Control Pauli-Z Gate,控制泡利Z门)和CR门(Control Rotation Gate,控制相位翻转门)。其中,CNOT门的矩阵形式(酉矩阵)为:
CZ门的矩阵形式为:
CR门或称CR(θ)门的矩阵形式为:
在一种拆分方式中,拆分后的第一预设量子逻辑门设为P0门,其矩阵形式为:
第一预设量子逻辑门为P1门,其矩阵形式为:
特定种类的双门与特定单量子逻辑门的对应关系如下:
CNOT门,对应NOT门(非门,又称X门),矩阵形式:
从矩阵形式可看出,能够被拆分的双门左上角的2*2部分可看成单位矩阵,右下角的2*2部分可看成拆分后对应的特定单门。其内在的数学原理,以CZ门为例,可如下表示:
设
单位矩阵
表示Z门。即,
其余特定种类的双门同理。其中,
表示直积。
另外,其他现有的双门如ISWAP、SQISWAP、ISWAP(θ)、CU和SWAP等等,可以通过先转换成很多个上述特定种类的双门,然后进行拆分,这也是合理可行的。
需要说明的是,量子线路中的量子比特总数可以为奇数或偶数,组成量子线路的两部分量子线路中的量子比特数,可根据需求自行设定,不对其进行限定。优选的,以第一部分量子线路与第二部分量子线路中的量子比特数之差的绝对值最小,设定预设数量,这样最终构建的子量子线路中的量子比特数为一半或接近一半,可以最小化对内存等的硬件需求。
例如,量子线路的量子比特总数为15,则预设数量可设为1-14的任意整数,优选设为7或8,即前7/8位量子比特所处的部分量子线路作为第一部分量子线路,后8/7位量子比特所处的部分量子线路作为第二部分量子线路。或者,量子线路的量子比特总数为16,则优选前8位量子比特所处的部分量子线路作为第一部分量子线路,后8位量子比特所处的部分量子线路作为第二部分量子线路。
示例性的,如图2所示,一份目标量子程序对应的一量子线路配置有4个量子比特(即总比特数4)q3、q2、q1、q0,图中以量子比特的下标(即比特位)0、1、2、3简化表示。H 0表示H门操作的目标比特为q0,CNOT 0,2即CNOT(0,2)表示CNOT门操作的控制比特和操作比特分别为q0、q2,CZ 3,1即CZ(3,1)表示CZ门操作的控制比特和操作比特分别为q3、q1,P0 0表示P0门操作的目标比特为q0,P1 1表示P1门操作的目标比特为q1,其余同理。
以前一半量子比特q0、q1所在的量子线路作为第一部分量子线路、后一半q2、q3所在的量子线路作为第二部分量子线路。遍历出该量子线路中包含双门CNOT(0,2)和CZ(3,1),提取该两个双门信息并记录,然后判断出双门CNOT(0,2)操作的q0、q2分处于第一部分量子线路和第二部分量子线路,CZ(3,1)同样处于,且该两双门均属于特定种类的双门。
遍历过程中,该量子线路中量子逻辑门的执行时序为H 0、CNOT(0,2)、CZ(3,1)和H3。首先遍历到的双门为CNOT门,将CNOT(0,2)拆分为P0门、P1门和NOT门,生成当前量子线路(此时CNOT门已不存在,其余不变)的副本,作为副本量子线路,根据PO门操作的目标比特q0,将P0门添加到当前量子线路中,根据P1门操作的目标比特q0、NOT门操作的目标比特q2,将P1门和NOT门添加到副本量子线路中。此时的量子线路有两条,每条的量子比特总数为4,其中一条包括量子逻辑门H 0、P0 0、CZ(3,1)和H 3,另一条包括H 0、P1 0、NOT 2、CZ(3,1)和H 3。
然后,针对当前两条量子线路中的CZ门,对其中一条,将CZ(3,1)拆分为P0门、P1门和Z门,生成该条量子线路的副本,根据该PO门操作的目标比特q3,将P0门添加到该条量子线路中,根据该P1门操作的目标比特q3、NOT门操作的目标比特q1,将P1门和NOT门添加到该条量子线路的副本量子线路中。对另一条同理操作,最终得到4条中间的新量子线路,每条的量子比特总数仍为4,分别如下:
一条包括H 0、P0 0、P0 3和H 3,q1和q2无量子逻辑门操作;
另一条包括H 0、P0 0、P1 3、Z 1和H 3,q2无量子逻辑门操作;
再一条包括H 0、P1 0、NOT 2、P0 3和H 3;
最后一条包括H 0、P1 0、NOT 2、P1 3、Z1和H 3。
此时,所有特定种类的双门都被拆分,且经上述添加得到4条只有单门的新量子线路。拆分各条新量子线路,以量子比特总数4的前一半和后一半为界限拆分该量子线路,也就是将当前新量子线路对应的第一部分量子线路和第二部分量子线路,分别作为子量子线路,最终得到8条子量子线路,每条包含的总(量子)比特数为2,并且,根据计算机的计算特性,每条的量子比特位均从0开始编号,即对每条子量子线路来说,自身的量子比特均为q0、q1,分别如下:
第1条包括H 0、P0 0,q1上无量子逻辑门操作;
第2条包括P0 1、H 1,q0上无量子逻辑门操作;
第3条包括H 0、P0 0、Z1;
第4条包括P1 1、H 1,q0上无量子逻辑门操作;
第5条包括H 0、P1 0,q1上无量子逻辑门操作;
第6条包括NOT 0、P0 1、H 1;
第7条包括H 0、P1 0、Z 1;
第8条包括NOT 0、P1 1、H 1。
同理,每多一个符合上述判断条件的特定种类的双门,最终得到的子量子线路数量将会翻一倍。
一条量子线路中量子比特总数的多少,对计算复杂度和内存的占用影响是极大的。由于每条子量子线路的量子比特数均减半,模拟需要的内存呈指数级递减,计算难度大大减少。
S103,针对每条所述子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算量子比特经对应所述子量子线路执行后的量子态振幅值;
本领域人员可以理解的是,每个量子比特都可以同时处于|0>和|1>的叠加态,一个量子比特的量子态ψ可以表示为a|0>+b|1>,其中,a、b分别为|0>、|1>的振幅,均为复数。测量后,量子态塌缩至一个固定的量子态,其中,塌缩至|0>的概率是a2,塌缩至|1>的概率是b2,a2+b2=1。而n个量子比特的量子态则为2n个量子态的叠加态。举例而言,3个量子比特组成的量子态ψ为23(即8)个量子态的叠加态,其中,这8个量子态分别为|000>、|001>、|010>、|011>、|100>、|101>、|110>和|111>,此时,3个量子比特组成的量子态ψ可以表示为:
ψ=c0|000>+c1|001>+c2|010>+c3|011>+c4|100>+c5|101>+c6|110>+c7|111>
其中,8个量子态中的每个量子态或称为一个量子态分量,每个量子态分量对应的振幅,即c0至c7这些复数中的每一个可称作一个单振幅,每一个单振幅的下标值为该单振幅所属量子态的二进制对应的十进制值。全振幅模拟,便是指一次性模拟出N个量子比特的2N个量子态分量的振幅;而单振幅模拟,则是指一次性模拟2N个量子态中的任意一个量子态分量的振幅。
具体的,考虑到量子态的振幅为复数,初始化所述子量子线路对应量子比特的量子态振幅值,是指把下标值为0的量子态振幅值初始化为1+0i,把下标值为其它值的量子态的振幅值初始化为0+0i。
具体的,所述计算量子比特经对应子量子线路执行后的量子态的振幅值,可以包括:
当子量子线路中包含量子逻辑门时,基于子量子线路中量子逻辑门的执行时序,计算各量子逻辑门操作后的量子态的振幅值,直至得到最后一个量子逻辑门操作后的量子态的振幅值,作为量子比特经对应子量子线路执行后的量子态的振幅值;
其中,第一个量子逻辑门操作后的量子态振幅值根据对应量子比特初始化后的量子态振幅值和所述第一个量子逻辑门的酉矩阵计算得到,其余量子逻辑门操作后的量子态振幅值根据前一量子逻辑门操作后的量子态振幅值和当前量子逻辑门的酉矩阵计算得到;
否则,将初始化得到的量子态的初始振幅值,确定为该子量子线路执行后的量子态振幅值。
示例性的,某一量子线路L的量子比特总数为10,共有2个双门且均为特定种类,每一双门操作的两量子比特均分别处于第一部分量子线路和第二部分量子线路中,最终构建出8条子量子线路A和B(由一条中间的新量子线路L1拆分)、C和D(由另一条中间新量子线路L2拆分)、E和F(由再一条中间的新量子线路L3拆分)、G和H(由最后一条中间新量子线路L4拆分)。每条子量子线路的量子比特数为5,高位至低位排序为q4q3q2q1q0,量子态为25=32个,量子态的下标值表示为0-31,二进制表示为00000-11111,右起第1位对应q0、第5位对应q4。
对子量子线路中的单门,其酉矩阵为
所操作的目标比特为q
n,根据计算偏移量2
n确定待计算的量子态对。例如n=0,单门所操作的目标位量子比特为q
0,比特位n=0,计算偏移量为1,相互对应的量子态共有16对,分别为:00000(0)&00001(1)、00010(2)&00011(3)、00100(4)&00101(5)、00110(6)&00111(7)、01000(8)&01001(9)、01010(10)&01011(11)、01100(12)&01101(13)、01110(14)&01111(15)、10000(16)&10001(17)、10010(18)&10011(19)、10100(20)&10101(21)、10110(22)&10111(23)、11000(24)&11001(25)、11010(26)&11011(27)、11100(28)&11101(29)、11110(30)&11111(31)。
一对待计算量子态00000(0)&00001(1),分别记为state[00000]和state[0001],定义复数a和b,则Complex a=Complex State[m],Complex b=Complex State[m+offset]。然后利用酉矩阵
将量子态值即振幅的计算更新为:
State[m]=U00*a+U01*b,State[m+offset]=U10*a+U11*b,其中:m为量子态的下标值,offset为该对待计算量子态之间的计算偏移量,在00000(0)和00001(1)中,m=0,offset=1。本领域技术人员可以理解的是,等号左边的State[m]和State[m+offset]是更新值,等号右边的a和b所涉及的State[m]和State[m+offset]实际上是经前一量子逻辑门操作后、该单门操作前的量子态振幅值,体现的是一种计算机代码的表示方式。
另外,假设某子量子线路的第一个量子逻辑门为H门,操作的目标比特为q3,其中一对量子态为00000和01000,初始态的振幅值分别为1+0i和0+0i。H门的酉矩阵中,U00=1/1.414,U01=1/1.414,U10=1/1.414,U11=-1/1.414。经第一个量子逻辑门操作后的两个量子态振幅值更新为:State[00000]=a*U00+b*U01,初始振幅值a=1+0i,b=0+0i,计算得State[00000]=0.707+0i;
State[01000]=a*U10+b*U11,初始振幅值a=1+0i,b=0+0i,计算得State[01000]=0.707+0i。
对子量子线路中的双门,四个相互对应的量子态作为一组进行计算,其对应关系为:假设对量子态数组state下标为a的量子态进行计算,需要找到与之对应的其他三个量子态,设下标分别为b、c、d,a和b、c、d的差值大小依次为2n1、2n2、2n1+2n2,n1、n2分别为控制比特位和操作量子比特位。该3个差值也就是计算偏移量,获取四个有对应关系的量子态下标中第一个下标的位置(下标值),根据计算偏移量2n1、2n2、2n1+2n2获取其他三个量子态下标。
例如,当双比特量子逻辑门作用在第一个比特(控制比特q0,n1=0)和第二个比特上(操作比特q1,n2=1)上时,对应的00000(0)、00001(1)、00010(2)、00011(3)为一组,00100(4)、00101(5)、00110(6)、00111(7)为一组,01000(8)、01001(9)、01010(10)、01011(11)为一组,01100(12)、01101(13)、01110(14)、01111(15)为一组,10000(16)、10001(17)、10010(18)、10011(19)为一组,10100(20)、10101(21)、10110(22)、10111(23)为一组,11000(24)、11001(25)、11010(26)、11011(27)为一组,11100(28)、11101(29)、11110(30)、11111(31)为一组,每组包含四个量子态是由量子态的叠加性(即量子态可能处于|0>态和|1>态的叠加态)决定的,每一组均满足第一个比特(q0,n1=0)为|0>或|1>第二个比特上(q1,n2=1)为|0>或|1>,而其它量子比特的量子态一致的条件。
当双比特量子逻辑门作用在第二个比特(q1,n1=1)和第三个比特上(q2,n2=2)上时,一组对应的量子态为:00000(0)、00010(2)、00100(4)、00110(6),定义4个复数:
Complex s00=state[0];
Complex s01=state[2];
Complex s10=state[4];
Complex s11=state[6];
对该组量子态的值进行计算更新:
state[real00_idx]=s00*U00+s01*U01+s10*U02+s11*U03;
state[real01_idx]=s00*U10+s01*U11+s10*U12+s11*U13;
state[real10_idx]=s00*U20+s01*U21+s10*U22+s11*U23;
state[real11_idx]=s00*U30+s01*U31+s10*U32+s11*U33;
其中,
表示双量子逻辑门对应的酉矩阵。其他组量子态的计算更新同理。若子量子线路的第一个量子逻辑门为双门,经该双门操作后的四个量子态振幅值只需将该组量子态的初始振幅值代入计算即可。
如果某些子量子线路中无量子逻辑门,直接将初始化得到的量子态的初始振幅值,作为量子比特经对应子量子线路执行后的量子态振幅值,即下标值为0的量子态振幅值为1,其余量子态的振幅值均为0。
S104,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。
具体的,在各子量子线路中均包含量子逻辑门的情况下,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值;否则,根据不包含量子逻辑门的子量子线路外的其余子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值。
继续以上述由某一量子线路L构建的8条子量子线路A和B、C和D、E和F、G和H为例,假设B、D、F和H中的5量子比特分别代表原L1、L2、L3和L4的10个量子比特中前五位q9-q5,A、C、E和G中的5量子比特分别代表原L1、L2、L3和L4的10个量子比特中后五位q4-q0。每条子量子线路中的5量子比特的量子态均为00000-11111。
如果每条子量子线路中均包含量子逻辑门,该条量子线路的10量子比特的量子态0000000000-1111111111的振幅值的计算如下:
L(0000000000)=A(00000)*B(00000)+C(00000)*D(00000)+E(00000)*F(00000)+G(00000)*H(00000);
L(0000000001)=A(00001)*B(00000)+C(00001)*D(00000)+E(00001)*F(00000)+G(00001)*H(00000);
L(0000000010)=A(00010)*B(00000)+C(00010)*D(00000)+E(00010)*F(00000)+G(00010)*H(00000);
……
L(0000011111)=A(11111)*B(00000)+C(11111)*D(00000)+E(11111)*F(00000)+G(11111)*H(00000);
L(0000100000)=A(00000)*B(00001)+C(00000)*D(00001)+E(00000)*F(00001)+G(00000)*H(00001);
……
L(1000000000)=A(00000)*B(10000)+C(00000)*D(10000)+E(00000)*F(10000)+G(00000)*H(10000);
……
L(1111111110)=A(11110)*B(11111)+C(11110)*D(11111)+E(11110)*F(11111)+G(11110)*H(11111);
L(1111111111)=A(11111)*B(11111)+C(11111)*D(11111)+E(11111)*F(11111)+G(11111)*H(11111)。
其中,L(xxxxxxxxxx)表示该量子线路L中10量子比特的量子态xxxxxxxxxx的振幅值,xxxxxxxxxx取值0000000000—1111111111。A(aaaaa)表示子量子线路A中5量子比特的量子态aaaaa的振幅值,aaaaa取值00000-11111,其余(及下述)同理。
从形式上可见,在每个等式中L附属括号内的量子态低5位与A、C、E、G附属括号内的量子态对应一致,高5位与B、D、F、H的括号中的量子态对应对应一致。
如果有子量子线路中(假设为B和E)不包含量子逻辑门(B和E可简称为空线路),则空线路中量子比特的下标值为0的量子态振幅值为1,其余量子态振幅值为0。即上述计算等式中,B(00000)和E(00000)为1,B(00001)—B(11111)、E(00001)—E(11111)均为0,其余不变。
再以某一量子线路J中的量子比特总数为3、双门数量为1且属于特定种类为例,构建出4条子量子线路J1、J2、J3、J4,其中,J1和J2由一条中间的新量子线路拆分,J3和J4由另一条中间的新量子线路拆分。假设J1、J3中的量子比特代表原量子线路中的前1位q0,则重新编号仍为q0,量子态为0、1;J2、J4中的量子比特代表原量子线路中的后2位q2q1,则重新编号为q1q0,量子态为00、01、10、11。
如果每条子量子线路中均包含量子逻辑门,该条量子线路的3量子比特q2q1q0的量子态000-111的振幅值的计算如下:
J(000)=J2(00)*J1(0)+J4(00)*J3(0);
J(001)=J2(00)*J1(1)+J4(00)*J3(1);
J(010)=J2(01)*J1(0)+J4(01)*J3(0);
J(011)=J2(01)*J1(1)+J4(01)*J3(1);
J(100)=J2(10)*J1(0)+J4(10)*J3(0);
J(101)=J2(10)*J1(1)+J4(10)*J3(1);
J(110)=J2(11)*J1(0)+J4(11)*J3(0);
J(111)=J2(11)*J1(1)+J4(11)*J3(1)。
其中,J(000)-J(111)表示该量子线路J中3量子比特的量子态000-111的振幅值,J1(0)、J1(1)分别为子量子线路J1中量子比特q0的量子态0、1的振幅值,J3(0)、J3(1)分别为子量子线路J3中量子比特q0的量子态0、1的振幅值,J2(00)-J2(11)为子量子线路J2中量子比特q1q0的量子态00-11的振幅值,J4(00)-J4(11)为子量子线路J4中量子比特q1q0的量子态00-11的振幅值。
如果有子量子线路假设为J2和J3不包含量子逻辑门,则该条量子线路的3量子比特q2q1q0的量子态000-111的振幅值的计算如下:
J(000)=1*J1(0)+J4(00)*1=J1(0)+J4(00);
J(001)=1*J1(1)+J4(00)*0=J1(1);
J(010)=0*J1(0)+J4(01)*1=J4(01);
J(011)=0*J1(1)+J4(01)*0=0;
J(100)=0*J1(0)+J4(10)*1=J4(10);
J(101)=0*J1(1)+J4(10)*0=0;
J(110)=0*J1(0)+J4(11)*1=J4(11);
J(111)=0*J1(1)+J4(11)*0=0。
可见,由于量子线路被拆分成各条子量子线路,每条子量子线路的量子比特数减少,线路复杂度得以降低,内存开销随之下降,从而能够在更低的硬件条件下,实现更高的量子计算模拟效率。
参见图2,图2为本发明实施例提供的量子计算模拟装置的一种结构示意图,与图1所示的流程相对应,所述装置包括:
遍历模块201,用于遍历所述目标量子程序,判断所述目标量子程序是否符合预设适用条件;
构建模块202,用于所述目标量子程序符合预设适用条件的情况下,拆分目标量子程序对应的量子线路,构建子量子线路;
第一计算模块203,用于针对每条子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算对应量子比特经子量子线路执行后的量子态振幅值;
第二计算模块204,用于根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。
具体的,所述预设适用条件包括:
目标量子程序包含单量子逻辑门和/或双量子逻辑门。
具体的,所述构建模块,具体用于:
判断所述目标量子程序对应的量子线路中是否包含双量子逻辑门;其中,所述量子线路包括:目标量子程序的前预设数量个量子比特所处的第一部分量子线路和其余量子比特所处的第二部分量子线路;
若包含双量子逻辑门,判断每一双量子逻辑门操作的两量子比特是否分别处于第一部分量子线路和第二部分量子线路中;
若每一双量子逻辑门操作的两量子比特均不分别处于第一部分量子线路和第二部分量子线路中,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
具体的,所述装置还包括:
第一确定模块,用于在不包含双量子逻辑门的情况下,将所述量子线路的第一部分量子线路确定为一子量子线路,第二部分量子线路确定为另一子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
具体的,所述装置还包括:
判断模块,用于存在所操作的两量子比特分别处于第一部分量子线路和第二部分量子线路中的双量子逻辑门的情况下,判断该存在的各双量子逻辑门是否均为特定种类的双量子逻辑门;
添加模块,用于所述存在的各双量子逻辑门均为特定种类的双量子逻辑门的情况下,针对每一特定种类的双量子逻辑门,将该双量子逻辑门拆分为第一预设单门、第二预设单门和特定单量子逻辑门,并生成当前量子线路的副本,将所述第一预设单门添加到当前量子线路中,将所述第二预设单门和特定单量子逻辑门添加到当前量子线路的副本中;
其中,所述第一预设单门和所述第二预设单门操作的目标量子比特均为该双量子逻辑门的控制比特,所述特定单量子逻辑门操作的目标量子比特为该双量子逻辑门的操作比特,所述特定单量子逻辑门由该双量子逻辑门的种类确定;
第二确定模块,用于拆分当前添加完成的所有新量子线路,将每一新量子线路对应的当前第一部分量子线路及第二部分量子线路,均确定为子量子线路;其中,各条子量子线路中的量子比特位均从0依序编号。
具体的,所述特定种类至少包括以下一种或多种:
CNOT门、CZ门和CR门。
具体的,所述第一计算模块,具体用于:
当子量子线路中包含量子逻辑门时,基于子量子线路中量子逻辑门的执行时序,计算各量子逻辑门操作后的量子态的振幅值,直至得到最后一个量子逻辑门操作后的量子态的振幅值,作为量子比特经对应子量子线路执行后的量子态的振幅值;
其中,第一个量子逻辑门操作后的量子态振幅值根据对应量子比特初始化后的量子态振幅值和所述第一个量子逻辑门的酉矩阵计算得到,其余量子逻辑门操作后的量子态振幅值根据前一量子逻辑门操作后的量子态振幅值和当前量子逻辑门的酉矩阵计算得到;
否则,将初始化得到的量子态的初始振幅值,确定为该子量子线路执行后的量子态振幅值。
具体的,所述第二计算模块,具体用于:
在各子量子线路中均包含量子逻辑门的情况下,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值;
否则,根据不包含量子逻辑门的子量子线路外的其余子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态的振幅值。
可见,由于量子线路被拆分成各条子量子线路,每条子量子线路的量子比特数减少,线路复杂度得以降低,内存开销随之下降,从而能够在更低的硬件条件下,实现更高的量子计算模拟效率。
本发明实施例还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
具体的,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,遍历目标量子程序,判断所述目标量子程序是否符合预设适用条件;若符合,执行S2,否则停止;
S2,拆分所述目标量子程序对应的量子线路,构建子量子线路;
S3,针对每条所述子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算量子比特经对应所述子量子线路执行后的量子态振幅值;
S4,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。
具体的,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
可见,由于量子线路被拆分成各条子量子线路,每条子量子线路的量子比特数减少,线路复杂度得以降低,内存开销随之下降,从而能够在更低的硬件条件下,实现更高的量子计算模拟效率。
本发明实施例还提供了一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
具体的,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
具体的,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,遍历目标量子程序,判断所述目标量子程序是否符合预设适用条件;若符合,执行S2,否则停止;
S2,拆分所述目标量子程序对应的量子线路,构建子量子线路;
S3,针对每条所述子量子线路,初始化所述子量子线路对应量子比特的量子态振幅值,并计算量子比特经对应所述子量子线路执行后的量子态振幅值;
S4,根据各条子量子线路对应的振幅值,计算所述量子线路对应量子比特的量子态振幅值,实现量子计算模拟。
具体的,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
可见,由于量子线路被拆分成各条子量子线路,每条子量子线路的量子比特数减少,线路复杂度得以降低,内存开销随之下降,从而能够在更低的硬件条件下,实现更高的量子计算模拟效率。
以上依据图式所示的实施例详细说明了本发明的构造、特征及作用效果,以上所述仅为本发明的较佳实施例,但本发明不以图面所示限定实施范围,凡是依照本发明的构想所作的改变,或修改为等同变化的等效实施例,仍未超出说明书与图示所涵盖的精神时,均应在本发明的保护范围内。