八戒体育零基础也能尝鲜!《电脑报》写出量子计算机上的“Hello World”

  新闻资讯     |      2024-07-14 18:16

  八戒体育零基础也能尝鲜!《电脑报》写出量子计算机上的“Hello World”量子计算机,这个听起来充满科幻色彩的术语,实际上已经从理论走向了实验室,甚至开始商业化应用。以往我们只是知道量子计算机具有神奇的能力,但多数人对其工作原理和实际应用仍然知之甚少。

  目前国内面向公众提供量子计算的云平台,有中科院量子计算云平台、华为HiQ量子计算云、本源量子、科大国盾量子计算云平台等。

  作为普通人,即使对量子力学和高等数学毫不了解,我们也可以去亲身体验这些云上的量子计算机,让量子比特根据我们随手编写的程序去运行。我会尽量用通俗易懂的语言带你一起在量子计算机上体会神奇的量子世界。

  为了理解量子计算,通常我们会将量子计算与经典计算做比较。经典计算使用二进制的数字电子进行计算,而二进制总是处于0或1的确定状态。而量子计算就借助量子力学的叠加特性,能实现计算状态的叠加,它不仅包含0和1,还包含0和1同时存在的叠加态。使用经典计算机的2个位作为寄存器时,只能存储4个二进制数(00、01、10、11)中的某一个,而用量子计算机中2个量子位就能同时存储这4种状态的叠加态。

  随着量子比特数目的增加,再配合量子纠缠等特性,理论上很初级的量子计算在某些特定问题上就能超越最强的经典计算机。

  当前计算机正在逼近硅基芯片的物理极限,比如当CPU芯片逼近2nm工艺节点时,由于此时电路的线宽已经和电子波长接近,这时电子很容易因量子隧穿效应穿透绝缘层,使器件无法工作,这种漏电问题还会引起严重发热。而信息化社会的计算数据每日都在海量剧增,人类必须另觅他途,寻找新的计算方式,而量子计算可能是一个答案。

  同时有些特定问题尽管在理论上可以用计算解决,但在实际应用中难以用经典计算机及时给出答案。例如,寻找物流、供应链的最优路线(NP问题),破解RSA、ECC等现代加密技术,在药物研发中模拟化学反应,演算特别复杂的大规模数据集,预测地球长期气候等。这些运算的复杂度远远超出了传统计算机的处理能力八戒体育,而量子计算机利用量子比特的叠加和纠缠特性,理论上能够快速解决这些特定问题。

  比特是经典量子计算和量子信息中一个基本的概念。量子计算和量子信息以量子力学为基础,把量子比特的“状态”所携带的物理信息作为编码、计算或传输的基础。对应经典计算机的0或1,量子比特两个量子状态一般表示为∣0⟩和∣1⟩,这里的∣⟩是狄拉克符号。这种符号可以用∣ψ⟩表示一个量子态(ψ是描述量子态的函数),这种符号常用于量子场论、量子信息学和量子计算等。

  不同于经典比特的态信息,量子比特可以处于的状态除了∣0⟩和∣1⟩,还可以处于∣0⟩和∣1⟩的量子叠加态,,这里α和β都是复数,并且。

  为了更加直观的区分量子比特和经典比特,可以把经典比特的0和1理解为地球的南北极,而把量子比特∣ψ⟩这两个参数α和β描述的所有叠加态集合,可以在3维欧氏空间中构成一个球面,这就是我们常见到的表示量子比特的布洛赫球面。这个图可以帮你更好的理解量子的叠加态,∣ψ⟩是部分南极部分北极组成的叠加状态。

  量子纠缠是量子力学中令人困惑的反常识的现象之一,它描述了两个或多个量子系统之间的一种非常特殊的关联。即两个纠缠的粒子相隔很远,对其中一个粒子的测量会即时影响到另一个粒子的状态,这种测量过程被称为量子塌缩。量子纠缠允许在不传输物理粒子的情况下,传输量子信息,这个过程称为量子隐形传态,是量子通信中的关键技术。而在数学,上当两个量子系统的联合态不能分解为各自独立态的张量积时,这两个系统就处于纠缠态。

  要真正实现一台量子计算机,就需要控制复杂的多量子体系。现在的量子计算机还处于比较初级的阶段,能够控制的量子数量比较少,保持量子叠加和纠缠的时间还比较短。相应的量子编程语言仍然比较初级,你可以把它理解为用量子汇编语言通过各种“门(Gate Model)”去控制量子比特,用量子指令集去控制量子计算机运行。使用这种语言可以帮助我们更方便对逻辑量子比特进行操作。

  由于当前量子计算机的通用体系架构未得到统一,在硬件层面上的技术路线也未最终确定,所以目前还无法确定哪种量子机器指令集相对更科学、更合理。现阶段在量子计算编程领域的研究者们大多从“量子线路图”“量子计算汇编语言”“量子计算高级编程语言”的方式入手,不断寻找未来可能最受量子计算机发展欢迎的编程语言。

  当需要的量子比特数量较少的前提条件下,量子线路图是大多数从事量子计算的研究者一开始采用的形式,目前大多数的量子计算平台(如本源量子计算云平台、IBM Q平台)均支持这一编程方式。使用图形化的方式表示量子程序、量子算法,在某种程度上来说,曾是最简洁的量子编程语言。

  随着量子计算技术研究的不断深入,人类能够使用的量子比特数量也逐步增长,在这种情况下,量子线路图的编程方式显然无法适应研究需要了,量子汇编语言应运而生。

  类似于经典计算语言,量子汇编语言在最基本的层面上是能够被量子计算机直接识别和执行的一种机器指令集,它是量子计算机设计者通过量子计算机的物理结构赋予量子计算机的操作功能。从最早提出的QASM到本源推出的初代量子计算汇编语言QRunes、Rigetti提出的Quil,这些汇编语言基本属于量子计算汇编语言这个范畴。

  在经典计算世界,高级编程语言分为命令式和函数式两大类,而在量子计算编程领域,同样适用。命令式量子编程语言有可以将经典代码和量子代码组合在同一程序中的 QCL、微软开发的Q#、适用于量子退火器的QMASM;函数式量子编程语言包括Peter Selinger定义的两种密切相关的量子编程语言QFC 和 QPL、微软研究院StationQ工作的LIQUi、Quipper。

  与经典计算机不同,量子计算机的世界遵循量子力学规律,这导致一些经典编程中的基本方法和原理在量子编程中无法直接使用。

  “薛定谔的猫”这个思想实验就体现了量子可以同时具有生和死(0和1)的叠加态。而一旦打开黑箱进行观察,薛定谔的猫(量子)就会坍缩为生或死(0和1)中的某一种状态。

  这条规律在量子编程中也有体现:条件语句等同于对条件式中的量子比特进行了测量,而处于量子叠加态的量子一旦测量就会坍缩,这就破坏了量子的叠加态,相当于在判断条件语句的同时就改变了条件中的值。因此,量子程序中条件语句不能直接作用于单个量子比特。条件语句在量子程序中通常是通过经典控制逻辑来实现的,即根据经典比特的状态来选择执行不同的量子门序列。

  当两个量子产生纠缠后,我们对其中一个量子进行操作,就会影响到另一个与之纠缠的量子比特的状态。许多量子算法正是建立在量子纠缠之上的,例如通过CNOT门控制目标比特的状态反转八戒体育,这类算法在经典计算机中完全不存在。

  我们知道在量子通信中的量子密钥分发利用量子纠缠和量子不可克隆定理,来实现密钥的生成和传输。当密钥在传输过程中被第三方时,量子态会因为测量而改变,这种改变可以被检测到,从而确保密钥的安全性。

  量子的不可克隆定理是指,我们不可能通过测量在确定一个量子系统的状态的同时又不改变它,因此我们也就无法完美地复制一个未知的量子态。

  在量子编程语言中,由于量子比特不可克隆,这就让经典编程中最基本的赋值操作(x=y)无法在量子编程中应用,而没了最基本的赋值操作,我们在经典计算机中的很多编程方法和最基本的编程经验就没法简单移植到量子计算机中。

  当前的量子计算机能够同时产生和操作的量子比特非常少,对外服务的量子计算机的云平台中能操作的量子比特通常不超过100个。类比经典计算机的发展史,目前的量子计算机尚处于发展的早期,还无法编写通用的大规模程序。

  类比早期经典计算机,现在的量子编程采用“门形(Gate Model)”量子线路图表示法,这种方法可以以图形化编程。操作起来就是把各种门放到多条量子线路图上,由于为了对齐不同线路间的操作,会用一些“休止符”占位,因此这种图形化编程最终的代码就像“五线谱”。当然与其一一对应的还有代码化的编程语言。

  这种语言还有很多不足,比如不适合大规模表示,不易于程序员学习掌握,调试难度大,用于通用开发还为时尚早。

  目前国内提供免费量子计算的云平台有华为HiQ量子计算云、本源量子、科大国盾量子计算云平台等。我们以本源量子(为例,使用量子编程语言编写几个经典的量子算法代码。请注意,看不懂复杂的公式部分不用担心,直接跳过就行。

  本源的QRunes就是专门用来控制本源量子计算机的量子编程语言,这套语言遵循量子语言的通用规则,因此学会这种语言后也能看懂其他量子代码。现在我们在此基础上编写一些实例。

  我们以Deutsch-Jozsa算法(简称D-J算法)为例,来学习语言的基本用法和最基本的量子门。这个算法是第一个展现出量子计算优越性的算法,在量子计算的理论发展中有重要的意义。此外,D-J算法也为Shor算法、Grover算法等更复杂的量子算法打下了基础。

  函数f(x),将长度n的字符串的x输入f(x),能返回0或1,在这里输入的字符串也由n个0和1组成。请判断这个函数是常数函数(即对于所有输入都返回相同的值0或1),还是平衡函数(即对于一半的输入返回0,另一半返回1)。

  要解答这个问题,经典计算机最多需要2n-1次查询计算。而量子计算机能利用量子叠加态和干涉效应八戒体育,在一次查询计算中就能同时计算函数在所有可能输入上的解。因此量子计算机在解决这个特定问题时相比经典计算机具有指数级的速度优势。

  不用看懂图中复杂的公式,你可以把自定义函数Uf理解成一个黑箱,把量子比特扔进去计算,直接看结果就行。

  下面我们用图形化编程在本源量子平台上编写这个算法的代码。选择“全振幅量子虚拟机”作为这个程序的测试机。选中量子门,长按拖拽至量子线路中相应的位置即可。

  (1)激活2个量子比特:0号和1号量子比特。0号不作处理,用占位符(barrier )保持两条量子线号用Pauli-X(X)门将其量子态翻转。

  (3)对1号做控制非门(简称CNOT门,也称受控非门),后连接0号(有+号的为目标比特,实点为控制比特),表示0号为控制比特,1号为目标比特,这个门的作用是让两条线路的量子产生量子纠缠。当两个量子处于纠缠态后,当确定控制比特的量子状态时,另一个目标比特的状态也能随之确定,这时通过测量控制比特的状态就能推定出目标比特的状态。

  这个门是否对目标比特做非(X)操作,取决于控制比特的状态。当控制比特为∣0⟩态时,目标比特不发生改变;当控制比特为∣1⟩态时,对目标比特执行X门(量子非门)改变其状态。

  (4)对控制比特做H门,根据量子叠加态和干涉效应,如果这时量子是0就说明函数是平衡函数,如果结果是1,就表明函数是常数函数。

  (5)因此最后我们只需要放一个万用表外形的测量门,测量控制比特,知道这个量子的状态就能获得结果了。这个门是对搭建的量子线路进行测量,统计每个测量门坍缩的比特,最后得到统计结果。期望结果概率表示,读取虚拟机中每个量子态的理论概率值,展示在下方的概率分布图中。

  这个实例中函数f(x)被设定为最简单的控制非门,也就是让两个量子比特产生纠缠态。当然在实际应用中需要根据需求自定义函数Uf然后激活需要数量叠加态的量子,放进自定义函数中运行一次。需要激活的量子比特数量由字符串n决定,n越大则这个算法相对于经典算法的优势越大。

  在“五线谱”的下方就是系统对于程序结果的预期,注意这里的数值只是对概率的预期。实际这个程序在量子计算机运行时,是重复激活1000组量子按程序的门顺序做实验(默认实验次数是1000)。

  在这个程序中,每次都在量子计算机中产生2个量子然后按照我们程序预先设置的门操作运行,最后测量结果。由于量子穿透、测不准原理、量子叠加或纠缠失效等量子本身特性的影响,原本模拟预期结果0001和0011的投影概率都是0.5,而实际运行的结果只会落在0.5的附近。其他如密度矩阵和振幅也不可能与预期值完全一致。

  点击运行并等待执行完毕,就可以在右边看到最终的测量结果,第0位的测量结果为1,表示该函数为常数函数。

  壹零社:用图文、视频记录科技互联网新鲜事、电商生活、云计算、ICT领域、消费电子,商业故事。《中国知网》每周全文收录;中国科技报刊100强;2021年微博百万粉丝俱乐部成员;2022年抖音优质科技内容创作者