量子线性系统算法及实践以Cirq为例
概述
求解线性方程组是科学计算中的一个基础问题,也可利用线性方程组构造复杂的算法,如数值计算中的插值与拟合、大数据中的线性回归、主成分分析等。而正是由于线性求解问题在学科中的基础性作用,其在科学、工程、金融、经济应用、计算机科学等领域也应用广泛,如常见的天气预报,需要通过建立并求解包含百万变量的线性方程组实现对大气中类似温度、气压、湿度等的模拟和预测;如销量预测,需要采用线性回归方式的时序预测方法进行预测。
2009年,Harrow、Hassidim和Lloyd三人基于量子相位估计提出了HHL算法,是线性系统算法的一个典型代表。HHL算法对于大型良态稀疏矩阵A、用量子算法高效制备的量子态b,可以在复杂度O(polylogN)内输出Ax=b的量子态近似解。量子线性系统算法(QLSA)可以用于矩阵求逆,求解特征值、线性回归、插值与拟合等,被广泛应用于量子机器学习等算法中,可以指数级提升求解效率。但HHL算法也有一定的局限性,HHL算法以及系列改进算法的内核都是基于量子傅里叶变换,因需要指数级的量子线路资源难以实现,这也是当前HHL算法在NISQ时代的局限所在。
NISQ即含噪声中等规模量子器件,NISQ计算机是指那些拥有50-100量子比特、以及高保真量子门的设备。Cirq是谷歌一款用于编写、操作和优化量子线路的Python库,支持在量子计算机及量子模拟器上运行cirq编译的量子线路。Cirq为处理NISQ时代量子计算机提供了有效的抽象。类似的量子编程框架软件还有启科量子的QuTrunk产品。QuTrunk 使用 Python 作为宿主语言,利用 Python 的语法特性 实现针对量子程序的 DSL(领域专用语言)。cirq与QuTrunk两款产品都支持连接量子计算机和量子模拟器使用。本文将主要介绍量子线性系统算法中的典型算法HHL的数学原理及使用cirq、QuTrunk实现算法的代码示例。 1.量子线性算法
一般线性算法英文表述为The linear-system Algorithm,简称LSP;量子线性算法英文表述为The Quantum linear-system Algorithm。LSA与QLSA分别需要解决的问题如下:
LSA需要解决的问题是找到一个N维向量x,使得Ax=b。
QLSA需要解决的问题是找到一个n位量子比特,满足ε和Ax=b。
一般求解线性方程组的问题时会给定一个系统,再寻找对于矩阵和向量的。其中,假设A是厄米矩阵。将的分别表示为量子态|x〉和|b〉后,重新缩放为单位向量即。因此可以将传统的向量表示转化为量子态表示,对应的|x〉求解方法为。 2.量子线性算法子程序——量子相位估计
量子相位估计算法(Quantum Phase Estimation Algorithm,简称QPE),是HHL算法中的一个子程序。若假设一个幺正算符U,则该幺正算符作用在其本征态|u〉上会出现一个相位πφ,现在我们假设算符的本征值φ是未知,在已知算符U和本征态情况下,量子相位估计算法可以估计相位φ。以下为使用cirq进行哈密顿量模拟的演示代码: class HamiltonianSimulation(cirq.EigenGate): def __init__(self, A, t, exponent=1.0): cirq.EigenGate.__init__(self, exponent=exponent) self.A = A self.t = t ws, vs = np.linalg.eigh(A) self.eigen_components = [] for w, v in zip(ws, vs.T): theta = w * t / math.pi P = np.outer(v, np.conj(v)) self.eigen_components.append((theta, P)) def _num_qubits_(self) -> int: return 1 def _with_exponent(self, exponent): return HamiltonianSimulation(self.A, self.t, exponent) def _eigen_components(self): return self.eigen_components
量子相位估计程序如下: 输入 :受控单位;n个量子比特输入态|ψψ|ψ,其|ψπλ|。 输出 :ψ|λ|。 步骤: 步骤1 使用t个辅助量子比特进行初始化操作,具体执行为,产生均匀叠加态。
步骤2 根据公式创建量子线路
步骤3 应用╀ 测量 测量辅助量子比特得到|λ概率||。
图为量子相位估计线路图 2.1使用cirq定义量子相位估计使用cirq完成量子线性系统算法,其中需要先进行量子相位估计操作。量子相位估计门操作中最后一个量子比特储存特征向量,剩下的量子比特都作为量子位存储的相位。 class PhaseEstimation(cirq.Gate): """ num_qubits: The number of qubits of the unitary. unitary: The unitary gate whose phases will be estimated. """ def __init__(self, num_qubits, unitary): self._num_qubits = num_qubits self.U = unitary def num_qubits(self): return self._num_qubits def _decompose_(self, qubits): qubits = list(qubits) yield cirq.H.on_each(*qubits[:-1]) yield PhaseKickback(self.num_qubits(), self.U)(*qubits) yield cirq.qft(*qubits[:-1], without_reverse=True) ** -1 2.2使用QuTrunk进行量子傅里叶变换
量子傅里叶变换是量子相位估计的一个子程序,使用QuTrunk进行量子傅里叶操作示例如下:
首先准备QuTrunk做量子傅里叶变换的环境。numpy是一个Python包,是一个由多维数组对象和用于处理数组的例程集合组成的库。numpy拥有线性代数和随机数生成的内置函数,因此通常在进行数组的算数和逻辑运算、进行傅立叶变换以及与线性代数有关的操作时候都需要使用numpy。在示例代码中,QuTrunk通过 qutrunk.circuit 模块实现量子逻辑门操作。在以下量子线路中,对所有量子比特进行H门操作以制备初态量子比特时,只需使用 All(H) * qureg 命令即可。在QuTrunk的量子逻辑门中p 门的主要作用是将单个量子位的和 之间的相位移动给定的角度。如,P(np.pi / 4) * qreg[0] 表示相位移动角度为π。import numpy as np from qutrunk.circuit import QCircuit from qutrunk.circuit.gates import H, All, P def run_QFT(): circuit = QCircuit() qureg = circuit.allocate(3) All(H) * qureg circuit.qft([q.index for q in qureg]) print(circuit.get_all_state()) circuit.run() def run_Full_QFT(): circuit = QCircuit() qureg = circuit.allocate(3) All(H) * qureg circuit.qft() print(circuit.get_all_state()) circuit.run() def qft_single_wave(): num_qubits = 4 circuit = QCircuit() qreg = circuit.allocate(num_qubits) All(H) * qreg P(np.pi / 4) * qreg[0] P(np.pi / 2) * qreg[1] P(np.pi) | qreg[2] circuit.qft() print(circuit.get_all_state()) circuit.run() return circuit if __name__ == "__main__": run_QFT() run_Full_QFT() circuit = qft_single_wave() print(circuit.draw()) 3.HHL算法
用于反演方程系统的HHL算法是一个基础性的、易于理解的子程序,它是许多量子机器学习算法的基础。该算法试图用量子计算机求解Ax=b。HHL算法已在不同的量子计算机上被证明,HHL算法将求解向量的值转化为求解矩阵M的期望值(M满足╀)。在量子计算机上求解HHL算法时,可以通常测量的概率得出期望值比如pauli算法X、Y、Z,可以将测量的概率转换为关于这些运算符的期望值。
HHL算法的核心思想如下:分别表示矩阵A的特征向量|和特征值|λ,其中λ。因此,向量可以写成特征向量的线性组合|,β|。HHL算法的目标是获取βλ|。以下为HHL算法及其执行的三个步骤(矩阵A可以使用量子相位估计算法得到):
HHL算法具体程序如下: 输入 :1.输入态|β|;
2.使用单元执行受控操作的能力 输出 量子态|x〉,|x〉满足。 步骤: 步骤1 使用幺正变换进行量子相位估计。该操作将特征值λ映射到以二进制形式输入寄存器以转换系统。βλ
步骤2 对每个λ执行旋转辅助量子比特为λλ。最后该系统演变为β(λλ)λ
步骤3 执行与步骤一相反的操作,此时系统表达式为β(λλ) 测量 测量辅助量子比特得到βλ。
HHL算法线路图 3.1使用cirq定义HHL算法的量子线路
以下为使用cirq构建HHL量子线路代码示例。示例代码中,cirq实现的是2×2的哈密顿矩阵。HHL算法一般使用三组量子比特,分别为辅助量子比特、用于存储矩阵A的量子比特、用于存储输入量子态和。量子逻辑门操作顺序为首先使用量子相位估计模块提取A的特征值,再对辅助量子比特进行受控旋转,最后进行量子相位估计逆操作。操作的最终结果准确性取决于寄存器大小和量子线路参数。 def hhl_circuit(A, C, t, register_size, *input_prep_gates): ancilla = cirq.LineQubit(0) # to store eigenvalues of the matrix register = [cirq.LineQubit(i + 1) for i in range(register_size)] # to store input and output vectors memory = cirq.LineQubit(register_size + 1) c = cirq.Circuit() hs = HamiltonianSimulation(A, t) pe = PhaseEstimation(register_size + 1, hs) c.append([gate(memory) for gate in input_prep_gates]) c.append( [ pe(*(register + [memory])), EigenRotation(register_size + 1, C, t)(*(register + [ancilla])), pe(*(register + [memory])) ** -1, cirq.measure(ancilla, key="a"), ] ) c.append( [ cirq.PhasedXPowGate( exponent=sympy.Symbol("exponent"), phase_exponent=sympy.Symbol("phase_exponent") )(memory), cirq.measure(memory, key="m"), ] ) return c 结尾
HHL算法并非意味着我们已经可以实现HHL算法在真正的量子计算机上运行解决实际问题。目前虽有在量子计算机上实现HHL算法的成功示例,但HHL算法广泛依然在很大程度上取决于有效量子比特数的数目。因此,量子计算机的研发工作还任重道远。如何利用现有的物理设备挖掘量子算法的应用潜力,开发更多高效的量子算法,也成为现阶段量子计算领域的一项重点工作。
参考来源:
https://mp.weixin.qq.com/s/Vhv0oUQj0bBkL3cv9Pe0Ow
https://cloud.tencent.com/developer/article/1069783
https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.120.050502
https://github.com/quantumlib/Cirq/blob/master/examples/hhl.py
如果观察到1。3亿光年外的某种天文现象,这种现象是观察当时发生的,还是1。3亿年前发生的?先来回答一下这两个问题(1)1。3亿年前发生(2)光速。某种天文现象的发生,总会产生一些无线电波可见光X射线或者伽马射线等电磁波,我们在地球上探测到了这些电磁波才会知道天文现象的发
认为茅台酒好喝到底是真好喝,还是价格造成的心理原因?当然价格因素,这是国人的尿性不过茅台酒品质确实很不错,也好喝。只是基于这个价格,大家现在都喝的面子,跟酒本身没多大关系了茅台好喝不好喝暂且不论。茅台是身份象征权利象征。本来值70块
花呗套路被发现?越来越多的人逃离花呗,他们察觉到了什么?银保监会曾指出,花呗的内核与银行发行的信用卡没有本质差别,并且分期手续费也要高于银行。虽然有免息期,但是很多人习惯了用花呗之后,借得越来越多没钱还了,最后也只能选择分期。经常使用花
对于癌症来说,早发现早治疗这句话靠谱吗?我是小影大夫。不仅对于癌症,对于所有的疾病,早发现早治疗这句话都是靠谱的。任何一种疾病,早期发现,症状还比较轻的时候,早期治疗效果都是非常好的。如果放任不管,拖到了后期,症状越来越
拔火罐不伤身么,功效是什么?拔罐疗法在中国有着悠久的历史是我们中华的瑰宝之一。巴西里约奥运会上,美国游泳队员菲尔普斯就采用了拔罐疗法进行了体力恢复和身体康复。从现代医学上说游泳运动员长期浸泡在水里,大量运动会
恒大公司还有救吗?恒大公司还有救吗?有一点难,如果你许家印让你的家族高收入者们从小荷包里拿一点出来(瘦死的骆驼比马大),何许还有救如果你们觉得这些钱是你们理所应当得的,就像铁鸡公一毛不拔,估计就难得
如果你走投无路时,会不会去摆摊做小生意?正在摆摊中!现在每天早上200起床,每天休息时间(睡眠)六小时,不管风霜雨雪,365天除了大年初一是休息日,其余都是工作日,没有例外!我摆摊不是走投无路,早些年事业有点小成就,后面
补气血吃什么好?你好!是的,气血充足,精气神就更加旺盛,人体的自我免疫调节能力就更强,也就更不容易受外界感染生病。中医讲脾为气血升化之源,脾主运化,所以养护好脾胃是重点。这里讲的脾,是指整个人体消
所以我不是药神里究竟是谁错了?化用鲁迅先生的一句话,这世间本没有对错,等有了人之后,也便有了对错。尤其是在有了三纲五常,法律法规之后,人们对某件事的定义,非对即错,然而这是一个纷繁复杂的大千世界,在人性和环境的
都说魔兽世界60年代防战是唯一MT,那么防骑和熊德有什么缺点呢?提到魔兽世界60年代的MT,大家总会想到战士,往往一个公会中有N个战士坦克,却鲜有防骑和熊德的存在。然而随着魔兽世界怀旧服的热度越来越高,很多玩家们开始宣扬防骑和熊德强大,并且列出
重庆中央公园和茶园板块哪个更适合下手?重庆中央公园和茶园板块哪个更适合下手,这个得看个人的各种情况而定吧。个人比较倾向重庆中央公园板块,主要是从以下3点来考虑一看中央公园地块整体规划先说重庆两江新区吧,重庆两江新区是中
屈原为什么要投汨罗江?商鞅变法以后,秦国日渐强大,齐楚韩魏四国被迫合纵抗秦。秦昭王即位,不惜用联姻等方式极力拉拢糊涂的楚怀王,使楚国退出合纵,转投秦国。这下惹恼了合纵一方,齐宣王召集韩魏讨伐楚国。楚怀王
科曼德容伤缺对我们是种打击征召布罗贝说明球队锋线选项不多直播吧3月21日讯荷兰国家队主帅科曼在采访中,谈到了国家队选人的情况。德容的情况他是一名重要的球员。他的缺席对我们的打击。每个人都很高兴,并且已经花了两年时间适应。所以这是一件令人
Stein独行侠未来11场比赛表现是与欧文进行续约谈判的关键因素直播吧3月21日讯据名记Stein报道,有内部人士怀疑,独行侠常规赛剩余11场比赛的表现,是即将与欧文进行续约谈判的另一个关键因素。独行侠发出的早期信号表明,与欧文签下多年合同是可
31!王霜王者归来,水庆霞利好,世界杯官方忍不住献上C位致敬?正文近日结束的一场季前友谊赛中,中国女足头号球星王霜海外赛场终于王者归来,首发登场并贡献一记助攻,成功帮助路易斯维尔竞技女足31击败美国U23女足。头号球星王霜重返赛场,且状态逐渐
全力保供农资各地有序推进春耕备耕工作春回大地,农事繁忙。眼下正值春耕关键期,为抢抓农时,山西各地通过高效调配农机装备,加强农资供应保障等方式,有序推进春耕备耕工作。这两天,山西南部冬小麦大面积返青,正值小麦春管的关键
76人记者本场升级为可能是哈登最差的比赛,没有之一了今天NBA常规赛76人主场对阵公牛的比赛已经结束。全场战罢,历经2个加时76人以105109不敌公牛。本场比赛,76人球员哈登全场13中2,三分6中0,得到5分7篮板12助攻,送出
走!跟记者探访沧州园博园这是3月21日拍摄的沧州园博园沧趣园。沧趣园是本届园博会最大的展园,以运河名园为主题,占地面积14000平方米。河北省第六届园林博览会沧州园博园内,多项重点工程建设即将完成。沧州坊
汤普森最后78场是季后赛很好的热身勇士121108击败火箭结束客场11连败。11连败是NBA卫冕冠军历史上第二长的连败,仅次于199899赛季重建的芝加哥公牛。本场比赛克雷汤普森得到29分7个篮板。赛后汤普森谈到客
逗妹吐槽热刺要解雇孔蒂,接着图赫尔做好准备?电讯报独家热刺预计在本周晚些时间与孔蒂解约我儿是乔治他哥列维配孔蒂,毁天又灭地,实话难听,越实话越难听。KEYDoveffa老传统了,谁来热刺执教都这个结局!一支球队,这么多年0冠
科尔最后九战场场关键我们目前排第六但仍可能直接去钓鱼直播吧3月22日讯勇士主帅科尔今日在训练后接受了媒体采访,并谈到了目前自己与球队的心态。勇士昨日击败火箭,目前以37胜36负的战绩排名西部第六,仅领先第七的独行侠0。5胜场,领先第
四川天全成群黑颈鹤休息补给后北归休息补给。天全县融媒体中心供图迁徙北归。天全县融媒体中心供图连日来,在四川雅安市天全县仁义镇老场村等地,成群结队的黑颈鹤在湿地稍作休息补给后,又开始了迁徙北归之旅。据了解,每年冬天