前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >通用量子算法:量子相位估计算法

通用量子算法:量子相位估计算法

作者头像
量子发烧友
发布于 2023-02-24 07:37:07
发布于 2023-02-24 07:37:07
1.3K00
代码可运行
举报
文章被收录于专栏:量子发烧友量子发烧友
运行总次数:0
代码可运行

概述

量子相位估计算法(quantum phase estimation,QPE)也称作量子特征值估计算法,是很多量子算法的基本步骤,其中包括Shor`s算法(秀尔算法)和HHL算法(线性方程组的量子算法)。它的作用就是快速的估计一个酉变换的特征值。由于酉矩阵拥有一个性质:酉矩阵的特征值都是模为1的复数。所以对酉矩阵而言,其特征值和相位基本是对等的。

1.相位估计

相位是用来描述信号波形变化的度量,通常用角度作为单位,所以也称作相角或相。当信号波形以一定周期的方式发生变化,波形循环一周就是三百六十度。比如月有阴晴圆缺的月相,也属于这个相位的概念。其实月相说白了就是月球的相位。

量子相位估计,顾名思义是用来估计相位的整体操作的特征向量的。更精确地说,量子相位估计其实是一种量子算法,是量子傅里叶变换的一个重要应用。相位估计 (Phase estimation,PE) 是量子傅里叶变换 (QFT) 的一个重要应用, 它的重要性体现在它是很多量子算法的基础,主要分为受控操作和逆量子傅里叶变换(inverse quantum Fourier transform, IQFT)构成,其中第一部分是提取相位操作,第二部分是将相位转变为可测量的基矢态。在量子傅里叶变换的基础上,我们可以实现量子相位估计算法。

相位估计问题定义:

给定可作用于量子线路的幺正矩阵 U 以及其本征向量之一|b⟩,求其对应的本征值。由于幺正矩阵的本征值一定是幺模的,于是该本征值可以被表示为 。求本征值在这里等价于求相位ϕ,从算法名可以看出,接下来的算法实际求解的是相位ϕ。

量子相位估计示意图

示意图中比特Q1-5为存放结果的寄存器,Q6-8为输入向量。U矩阵作为受控门电路作用在Q6-8上。

2.量子傅立叶变换

量子相位估计算法是用来估计某个幺正算符本征态对应本征值的算法。它是许多量子算法的子程序,例如Shor 算法。量子傅里叶变换是在量子计算机上 对量子态进行傅里叶变换的算法。它是量子相位估计的子程序。量子傅里叶变换在Shor算法中有非常大的作用,但更准确的说是在量子相位估计(QPE)中起到作用。量子傅里叶变换可以帮助我们仅通过一次测量就读出一系列比特串的相位信息,是很多量子算法的关键。

假设一个酉算子U有特征向量|u⟩和特征值 其中,ψ是未知量,我们的目标就是用相位估计估算ψ的值,为了实现估计操作,我们先假设我们可以实现一个黑盒子,这个黑盒子是控制 门,j是非负整数,相位估计并不是一个算法,而是算法的一个模块,我们将用这些黑盒子实现这个模块。

相位估计过程包含两个寄存器,第一个寄存器包含t个qubit,初始化为|0⟩它的多少决定了估计的精度,第二个寄存器初始化为|u⟩ ,也就是U的特征向量。

相位估计的过程,我们先将第一部分的线路图,如下:

第一个寄存器最后的状态为:

进行逆傅里叶变换就是傅立叶变换的逆过程,简单来说就是把它的酉矩阵取它的逆矩阵,如何构造其逆过程上一节的习题里有布置,因为门是可逆的,所以很容易构造。以下是线路图:

把第一个过程得到的结果做下变换,对于ψ,我们假设其为 ,那么我们把这个带入上面的式子,得到:

我们发现,这和傅立叶变换后得到的结果那个式子很像(其实就是一个形式的),那么我们进行逆傅里叶变换后,会得到 ,我们测量的话会得到ψ。总之,相位估计可以给定一个特征向量的情况下,估计一个酉算子的一个对应特征值的相位。

3.量子相位估计算法

量子相位估计算法(Quantom Phase Estimation)也称作量子特征值估计算法,是一个比较基础的算法。它的作用就是快速的估计一个酉变换的特征值。由于酉矩阵拥有一个性质:酉矩阵的特征值都是模为1的复数。所以对酉矩阵而言,其特征值和相位基本是对等的。

给定一个酋矩阵U,假设其有一个特征向量为|φ⟩,对应的特征值为 ,

满足 。相位估计算法就是用来测量这个θ。步骤主要分一下4步:

步骤1:其中输入部分,|φ⟩是U的其中一个特征向量,另外N个量子位是作为辅助位存在的。在n个辅助位上应用n个H门,可以得到:

步骤2:受控酋操作:引入受控酋门C-U。已知 ,即是

应用n个受控操作 (这里0≤j≤n-1) ,因为

那么可以将 写成如下格式:

步骤3:回顾傅里叶变换公式:

步骤4:测量结果:

当 不是整数的时候, 结果会以百分之四十的概率得到

4.QPE代码实现(以MindQuantum为例)

用一个实例来演示如何在MindQuantum实现量子相位估计算法,选择T门作为进行估计的幺正算符,由定义T|1⟩ = e^(iπ/4)|1⟩

可知需要估计的相位角为φ=1/8。

现在假设我们不知道T门的相位信息,只知道幺正算符U是T门且本征态为|1⟩,接下来我们需要用量子相位估计算法求出其对应的本征值,即需要估计本征值指数上的相位角。

首先导入相关依赖。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from mindquantum.core.gates import T, H, X, Power, BARRIER
from mindquantum.core.circuit import Circuit, UN
from mindquantum.simulator import Simulator
from mindquantum.algorithm.library import qft
import numpy as np

UN可以指定量子门,目标比特和控制比特,从而在线路中搭建门操作;Power可以得到指定量子门的指数形式。因为我们已知T门的本征态为|1⟩,所以第二寄存器只需1个比特,而在第一寄存器中的比特数越多,得到的结果就越准确,在这里我们使用4个比特。

因此我们需要搭建5比特线路,q_0,q_1,q_2,q_3比特用于估计,属于第一寄存器,q_4属于第二寄存器用于传入T算符的本征态。利用UN对q_0,q_1,q_2,q_3进行Hadamard门操作,用X门对q_4进行翻转,得到T门的本征态|1⟩。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pylint: disable=W0104
n = 4
circ = Circuit()
circ += UN(H, n) # 对前4个比特作用力H门
circ += X.on(n)  # 对q4作用X门
circ.svg()

以q_4为目标比特,添加控制T^(2^i )门。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pylint: disable=W0104
for i in range(n):
    circ += Power(T, 2**i).on(n, n - i - 1) # 添加T^2^i门,其中q4为目标比特,n-i-1为控制比特
circ.svg()

对第一寄存器中的比特进行逆量子傅里叶变换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pylint: disable=W0104
circ += BARRIER
circ += qft(range(n)).hermitian() # 对前4个比特作用量子傅立叶变换的逆变换
circ.svg()

选择后端、传入总比特数创建模拟器,对量子线路进行演化,得到末态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pylint: disable=W0104
from mindquantum.core.gates import Measure
sim = Simulator('projectq', circ.n_qubits)         # 创建模拟器
sim.apply_circuit(circ)                            # 用模拟器演化线路
qs = sim.get_qs()                              # 获得演化得到的量子态
res = sim.sampling(UN(Measure(), circ.n_qubits - 1), shots=100) # 在寄存器1中加入测量门并对线路进行100次采样,获得统计结果
res.svg()

需要注意的是,测量结果作为二进制串的读取顺序应为|q_0 q_1 q_2 q_3⟩,因此我们得到寄存器1的测量结果为0010,概率幅为1,该末态可以精准地反映相位φ。但0010是二进制结果,因此我们将它转回十进制后再除以2n,就得到了我们最终的估计值:φ=224=18。我们也可以通过线路演化得到的量子态qs找出第一寄存器中振幅最大值a_max的位置,进而得到其对应的本征基矢|x⟩,其中的x再除以2^t即为相位的估计值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
index = np.argmax(np.abs(qs))
print(bin(index)[2:])

需要注意的是,qs对应的是整个量子线路的末态,因此得到的index也包含第二寄存器中的比特,不能直接得到第一寄存器末态中a_max对应的|x⟩,需要将index转成二进制后将q_4对应的比特位剔除,然后得到的才是第一寄存器的|x⟩。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bit_string = bin(index)[2:].zfill(circ.n_qubits)[1:]        # 将index转换成01串并剔除q4
bit_string = bit_string[::-1]                               # 将比特串顺序调整为q0q1q2q3
print(bit_string)

再将二进制转回十进制,得到我们最终的估计值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pylint: disable=W0104
theta_exp = int(bit_string, 2) / 2**n
theta_exp

可见得到的估计相位和φ近似相等。

参考资料:

1\https://blog.csdn.net/m0_37622530/article/details/88852073

2\https://www.mindspore.cn/mindquantum/docs/zh-CN/master/quantum_phase_estimation.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子发烧友 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
量子算法与实践--变分量子态对角化算法
变分混合量子—经典算法是近期在量子计算机上有希望实现的一种候选算法。在这些算法中,量子计算机评估一个门序列所耗费的成本与经典的成本评估相比较低,速度上也会更快一些。通过量子计算机评估的门序列信息,最终也可用于经典计算机调整门序列的参数。
量子发烧友
2023/02/24
7330
量子算法与实践--变分量子态对角化算法
一文读懂量子机器学习:量子算法基石已经奠定
【新智元导读】在计算能力增加和算法进步的推动下,机器学习技术已成为从数据中寻找模式的强大工具。量子系统能生产出一些非典型(atypical)模式,而一般认为经典系统无法高效地生产出这些模式。所以,有理由假定,量子计算机在某些机器学习任务上将优于经典计算机。量子机器学习这一研究领域探索如何设计和实现量子软件,如何使量子机器学习速度比经典计算机更快。该领域最近的工作已经建造出了可以担当机器学习程序基石的量子算法,但在硬件和软件方面仍面临巨大挑战。 在人类拥有计算机之前,人类就从数据中寻找模式。托勒密将对星系运动
新智元
2018/03/22
1.3K0
一文读懂量子机器学习:量子算法基石已经奠定
量子计算(七):量子系统
对于一个非物理专业的人而言,量子力学概念晦涩难懂。鉴于此,本文仅介绍量子力学的一些基础概念加之部分数学的相关知识,甚至不涉及薛定谔方程,就足够开始量子计算机的应用。这如同不需去了解CPU的工作原理以及经典计算机的组成原理,但仍能在日常生活中使用经典计算机或者编写经典程序一样。
Lansonli
2022/12/10
1.3K0
量子计算(七):量子系统
基础量子线路设计及实践——以QuTrunk为例
量子线路也称量子电路,即对量子比特进行操作的线路,是一种常见量子计算模型。它的组成包括量子信息储存单元、线路(时间线)和各种逻辑门。组成量子线路的每一个量子逻辑门都是一个酉矩阵,所以整个量子线路是一个大的酉矩阵。酉矩阵U满足U*Udag=I,其中I为单位矩阵。
量子发烧友
2023/03/08
8610
基础量子线路设计及实践——以QuTrunk为例
量子计算(十一):常见逻辑门以及含义
Hadamard门是一种可将基态变为叠加态的量子逻辑门,有时简称为H门。Hadamard门作用在单比特上,它将基态|0〉变成
Lansonli
2022/12/11
2.8K0
量子计算(十一):常见逻辑门以及含义
量子搜索算法例题详解_量子算法与编程入门
f:{0,1,2,3,……,N−1}→{0,1}f:{0,1,2,3,……,N−1}→{0,1}
全栈程序员站长
2022/11/15
3260
量子计算(二十二):Grover算法
举一个简单的例子,在下班的高峰期,要从公司回到家里,开车走怎样的路线才能够耗时最短呢?最简单的想法,当然是把所有可能的路线一次一次的计算,根据路况计算每条路线所消耗的时间,最终可以得到用时最短的路线,即为最决路线,这样依次的将每一种路线计算出来,最终对比得到最短路线。搜索的速度与总路线数N相关,记为O(N),而采用量子搜索算法,则可以以O(sqrt(N))的速度进行搜索,要远快于传统的搜索算法。
Lansonli
2023/01/27
1.1K0
量子计算(二十二):Grover算法
量子线性系统算法及实践——以Cirq为例
求解线性方程组是科学计算中的一个基础问题,也可利用线性方程组构造复杂的算法,如数值计算中的插值与拟合、大数据中的线性回归、主成分分析等。而正是由于线性求解问题在学科中的基础性作用,其在科学、工程、金融、经济应用、计算机科学等领域也应用广泛,如常见的天气预报,需要通过建立并求解包含百万变量的线性方程组实现对大气中类似温度、气压、湿度等的模拟和预测;如销量预测,需要采用线性回归方式的时序预测方法进行预测。
量子发烧友
2023/03/08
1.1K0
量子线性系统算法及实践——以Cirq为例
可视化量子编程软件盘点
本文将从可视化量子编程软件界面可视化、操作便捷性、易用性等方面分析IBM Quantum Composer、QCEngine、Qin的量子电路绘制功能。
薛大叔的量子猫
2022/11/15
2K0
可视化量子编程软件盘点
量子计算(十):量子计算原理
经典计算中,最基本的单元是比特,而最基本的控制模式是逻辑门,可以通过逻辑门的组合来达到控制电路的目的。类似地,处理量子比特的方式就是量子逻辑门,使用量子逻辑门,有意识的使量子态发生演化,所以量子逻辑门是构成量子算法的基础。
Lansonli
2022/12/11
2.6K1
量子计算(十):量子计算原理
下(应用篇)| 量子计算加速蛋白质折叠
本文将延续上篇文章,通过应用VQE算法模拟解决蛋白质折叠问题的实验,解决使用传统方法耗时长、准确率低的问题,从而极大提升现代分子生物学的研究效率,为破解蛋白质折叠谜题带来新希望,进一步推动科学界前进。
量子发烧友
2023/02/24
6790
下(应用篇)| 量子计算加速蛋白质折叠
实践|QuTrunk实践之基础量子逻辑门
经典计算中,最基本的单元是比特,在经典计算中对比特的操作采用电信号的处理方式,不同的逻辑门对应相应的电信号处理方式,实现对比特的基本操作。我们可以通过不同的逻辑门组合来达到控制电路的目的。类似于经典计算,量子计算中对量子比特的操作需要操纵使用量子逻辑门使量子态发生演化,通过不同的量子逻辑门组合最终实现量子线路的控制。使用量子逻辑门,我们有意识的使量子态发生演化。
量子发烧友
2023/03/08
6220
实践|QuTrunk实践之基础量子逻辑门
QuTrunk与MindSpore量子神经网络初探
QuTrunk 是启科量子开发和已经开源的一款量子编程框架软件产品,关于QuTrunk的详细介绍,用户可以访问启科的开发者社区站点详细了解,也可以进入github上此项目下进行查询。
量子发烧友
2023/03/08
7640
QuTrunk与MindSpore量子神经网络初探
量子计算(九):复合系统与联合测量
拥有两个或两个以上的量子比特的量子系统通常被称为复合系统(composite systems)。单量子比特系统的描述与测量已有所了解,那么多个量子比特的系统该如何描述以及怎样去测量呢?单量子比特系统与多量子比特系统之间又有怎样的关系呢?首先,解决这些问题,需要认识一个新的运算-张量积(tensor products)。
Lansonli
2022/12/10
7351
量子计算(九):复合系统与联合测量
秀尔算法:破解RSA加密的“不灭神话”
RSA加密曾被视为最可靠的加密算法,直到秀尔算法出现,打破了RSA的不灭神话。 RSA加密 VS 秀尔算法 作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分解出公约数,从而打破了RSA算法的基础(即假设我们不能很有效的分解一个已知的整数)。 同时,秀尔算法展示了因数分解这问题在量子计算机上可以很有效率的解决,所以一个足够大的量子计算机可以破解RSA。 RSA加密“曾经”之所以强大
FB客服
2018/02/06
2.2K0
秀尔算法:破解RSA加密的“不灭神话”
移动云首届量子计算编程挑战赛持续报名中!
【引言】辞旧迎新,2023,聚焦人才和科技创新,中国移动云能力中心主办的移动云首届量子计算编程挑战赛正在火热报名中。大赛报名将于1月30日结束,初赛于2月1号开始,诚邀社会各界伙伴一起探索量子计算新方向。 01 初赛赛制介绍 参赛对象:面向全社会开放,国内外企业、创业团队、个人开发者、高等院校等开发者均可报名参赛。 量子在线编程环境:Python/C++编程语言;QPanda/pyQPanda两种编程框架。 赛制安排:初赛将晋级10支队伍。各评审环节获得晋级队应遵循大赛统一安排参加下一轮赛事评审,若因为团
AI科技大本营
2023/04/06
3810
移动云首届量子计算编程挑战赛持续报名中!
量子+AI应用:量子计算与神经网络
神经网络是当下计算应用中发展最快,使用最广的机器学习算法。然而,由于传统的神经网络只能使用单个网络来存储许多算法模式,随着应用不断复杂化导致网络结构不断扩大,存储性能瓶颈已逐渐凸显。
量子发烧友
2023/02/24
1.2K0
量子+AI应用:量子计算与神经网络
混合量子-经典体系对量子数据的分类问题
经典计算机中可以利用比特位和逻辑门进行二进制运算,在物理硬件方面,二进制运算主要通过半导体的特殊电性质实现。在量子计算机中,主要利用量子的纠缠和叠加特性通过量子比特位和量子逻辑门来实现运算。量子计算对算力的加速优势也在量子计算机不断发展中得到证实。但关于量子计算机与经典计算机的存在性问题,并非取而代之这么简单。目前,在物理硬件设备基础和量子技术的发展方面,依然无法制造出可以超越经典计算的通用量子计算机。
量子发烧友
2023/03/08
4370
混合量子-经典体系对量子数据的分类问题
量子计算(十三):量子计算的if和while
所谓量子线路,从本质上是一个量子逻辑门的执行序列,它是从左至右依次执行的。即使介绍了函数调用的思想,也可以理解为这是一种简单地内联展开,即把函数中的所有逻辑门插入到调用处,自然地,可能会考虑在量子计算机的层面是否存在类似于经典计算机中的循环和分支语句。因此,就有了QIF和QWHILE。
Lansonli
2022/12/31
7140
量子计算(十三):量子计算的if和while
使用Python实现量子计算算法开发:探索计算的未来
量子计算作为一种全新的计算范式,正在逐步改变我们的计算方式。与经典计算机依赖比特(bits)进行信息处理不同,量子计算机使用量子比特(qubits)进行计算,这使得量子计算在处理某些复杂问题上具有巨大的潜力。Python作为一种高效且易用的编程语言,为量子计算算法的开发提供了丰富的库和工具。本文将详细介绍如何使用Python实现量子计算算法开发,涵盖基础知识、量子算法实现、代码示例和应用前景等内容。
Echo_Wish
2024/12/20
1160
推荐阅读
相关推荐
量子算法与实践--变分量子态对角化算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档