《昇思25天学习打卡营第11天|基于MindSpore Quantum的Grover搜索算法和龙算法》

概述

如果你听过量子计算,那么你一定听说过Grover搜索算法。1996年,Lov Grover [1] 提出了Grover搜索算法,它是一种利用量子状态的叠加性进行并行计算并实现加速的算法。Grover搜索算法被公认为是继Shor算法后的第二大量子算法,也是第一个被完整的实验实现的量子算法,它解决的是无序数据库搜索问题。1997年,Bennett [2] 等人证明,对于非结构化的量子搜索问题,至少需要Ω(𝑁⎯⎯⎯⎯√)Ω(𝑁)次量子查询,因此Grover搜索算法对于该问题是渐进意义下的最优算法。

无序数据库搜索问题(Unordered Database Search problem)就是从一个海量元素的无序数据库中,找到某些满足要求的元素。由于数据库中元素的数量是巨大的且这些元素是无序排列的,所以,要验证给定的元素是否满足要求很容易,但反过来,要找到这些元素却不是一件容易的事。

求解无序数据库搜索问题(不妨假设只有一个目标搜索数据),经典算法所需的时间复杂度为(𝑁)𝑂(𝑁),而Grover搜索算法所需的时间复杂度仅为(𝑁⎯⎯⎯⎯√)𝑂(𝑁),相比经典算法具有平方加速,展示了量子计算的强大性能。此外,Grover搜索算法中用到的振幅扩大技巧,对许多启发式的经典搜索算法可以实现加速,因而具有广泛的应用。

本文档将会介绍Grover搜索算法的基本原理,以及通过两个具体的小例子来展示如何利用MindSpore Quantum实现该算法。

问题描述

我们需要在一组无序的𝑁𝑁元素集合(数据库)中进行搜索。将数据库中的元素与索引(从00到𝑁−1𝑁−1之间的整数)建立一一对应,我们关注于搜索这些元素的索引。考虑将该搜索问题表示为一个关于输入𝑥𝑥的函数𝑓(𝑥)𝑓(𝑥),其中𝑥𝑥为00到𝑁−1𝑁−1之间的整数。那么,函数𝑓定义为:

不失一般性,假设𝑁=2𝑛𝑁=2𝑛​,那么在量子系统中,索引以量子态|0〉,|1〉,.。。,|𝑁−1〉|0〉,|1〉,...,|𝑁−1〉​(或|00...0〉,|00...1〉,.。。,|11...1〉|00...0〉,|00...1〉,...,|11...1〉​)表示,也即我们可以使用𝑛𝑛​个量子比特存储这些索引。

同时假设搜索问题只有一个目标态|ω〉|𝜔〉。Grover搜索算法的目标就是以极大的概率将|ω〉|𝜔〉搜索出来。

Grover搜索算法的基本原理

Grover搜索算法的基本原理:首先通过 Hadamard 门产生均匀叠加态,然后反复调用Grover迭代(或称为𝐺𝐺算子),以放大目标项的概率振幅同时抑制非目标项的概率振幅(该方法称之为振幅放大),最后对末态进行测量,那么就能以极大的概率得到目标态|ω〉|𝜔〉​​。

下面介绍Grover算法的主要步骤。

第 1 步:数据库初始化

对|0〉⊗n|0〉⊗𝑛​​​​执行𝐻⊗n𝐻⊗𝑛​​​​​操作,使得数据库被初始为一个均匀叠加态,即

第 2 步:Grover迭代

Grover迭代又可以分解为四步:

子步骤一

执行Oracle算子𝑈𝜔𝑈𝜔​,翻转目标态|ω〉|𝜔〉​​​​​的相位。

为了将需要寻找的数据和其它的数据区别开,最简单的方法就是翻转目标态的相位(增加一个负号),此时我们需要构造一个Oracle算子𝑈𝜔𝑈𝜔,其作用如下:

由于当x=ω𝑥=𝜔​时,𝑓(ω)=1𝑓(𝜔)=1​,那么𝑈𝜔𝑈𝜔​​的作用还可以表示成:

其矩阵表达式为

子步骤二

执行𝐻⊗n𝐻⊗𝑛操作。

对𝑛𝑛位量子比特执行𝐻⊗n𝐻⊗𝑛操作。

子步骤三

执行条件相移算子𝑃𝑃。

条件相移算子𝑃𝑃能使|0〉|0〉​态以外的每个态的相位都翻转,其作用如下:

其矩阵表达式为

子步骤四

再次执行𝐻⊗n𝐻⊗𝑛操作。

至此,完整的𝐺算子可以表示为

注意:𝐺算子需要迭代的次数为

其中,M表示目标态的个数。

Step 3:测量

对末态进行|0〉,|1〉|0〉,|1〉基测量,就能以极大的概率得到目标态|ω〉|𝜔〉。

Grover搜索算法的完整量子线路模型如下所示:

grover algorithm circuit

构造翻转量子比特相位的酉算子

通过上述介绍,我们发现,Grover搜索算法中最关键的部分就是存在可以翻转量子比特相位的酉算子,Oracle算子𝑈𝜔𝑈𝜔可以翻转目标态的相位,条件相移算子𝑃𝑃可以翻转|0〉|0〉态以外的每个态的相位。

接下来,我们将构造可以翻转某一位量子比特相位的酉算子,函数bitphaseflip_operator()就可以实现翻转某一位量子比特的相位,只需要输入需要翻转相位的目标量子态和量子比特总数即可。

举个例子,我们现在生成3​​量子比特的均匀叠加态,从运行的结果看到此时的量子线路,以及我们成功生成了3量子比特的均匀叠加态。

假设我们需要翻转|4〉|4〉态的相位,只需调用我们定义好的函数bitphaseflip_operator()即可,从运行的结果看到此时的量子线路,以及|100〉|100〉​​的相位翻转为-1,从运行的结果看到,发生相位翻转的|100〉|100〉态即为我们希望相位翻转的|4〉|4〉态。

假设我们翻转除|0〉|0〉态以外的每个态的相位,从运行的结果看到此时的量子线路,以及我们成功翻转除|0〉|0〉态以外的每个态的相位。

也就是说,我们定义的函数bitphaseflip_operator()可以实现Grover搜素算法中的Oracle算子。𝑈𝜔𝑈𝜔和条件相移算子𝑃𝑃。

利用MindSpore Quantum实现Grover搜素算法实例

实例1:(单目标)

首先,我们需要定义𝐺𝐺算子;

然后,我们根据Grover搜索算法的量子线路模型在MindSpore Quantum中搭建对应的量子线路;

我们测量此时的状态,将会以极大的概率得到目标态,将其转化为10进制数,成功地搜索。

实例2:(多目标)

实例1中实现的是单目标搜索,现在我们尝试实现多目标搜索。首先,𝐺𝐺算子已经定义好了,我们只需设定量子比特数和需要翻转相位的目标态,然后搭建对应的量子线路即可。

龙算法

除了在规模为4的数据库中找1个数据的场景,Grover算法不能够精确的搜索出所标记态。清华大学龙桂鲁教授在Grover算法基础之上提出量子精确搜索算法龙算法[3],能够以准确率为1的概率在所有场景中搜索出目标态。其主要思想是将Grover算子改写为如下的算子,

其中:在满足相位匹配条件时,

我们只需作用𝐽𝑠+1次龙算子,就可以以概率1找到目标态,这里𝛽=弧新⁡𝑀/𝑁𝑀为标记态个数,N为数据库大小,𝐽𝑠>=[((π/2)−β)/β]。下面我们用MindSpore Quantum来实现。

一般角度相位转动线路

借助于辅助比特,我们搭建某个计算基矢一般角度相位转动线路。

搭建龙算子

完成量子精确搜索算法:龙算法

这里我们以3比特数据库中搜索||2〉|2〉态为例,完成龙算法。

接下来,我们计算线路的量子态。

发现,除去相位,我们可以精确的得到目标态。通过采样,我们也可以得到如下类似的结果。

[23]:
软件版本
MindQuantum的0.9.11
scipy的1.10.1
numpy的1.23.5
系统信息
3.9.16
操作系统Linux x86_64
记忆8.3 千兆字节
CPU 最大线程数8
日期星期六, 12月 30 00:07:45, 2023

参考文献:

[1] L. K. Grover, A fast quantum mechanical algorithm for database search[C]// Proceedings of the twenty-eighth annual ACM symposium on Theory of computing. ACM, 1996: 212-219.

[2] G. Brassard, P. Hoyer, M. Mosca, et al. Quantum amplitude amplification and estimation[J]. Contemporary Mathematics, 2002, 305: 53-74.

[3] Long G L. Grover algorithm with zero theoretical failure rate. Physical Rev A, 2001, 64: 022307.
​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值