量子计算机可能听起来有点神秘而且远在未来,但实际上,现在可以在云端访问它们或通过仿真器为每个人编写量子代码。在本教程中,我们将介绍如何编写一个简单的量子计算机程序来产生随机数。
这是用Python进行量子计算系列教程的第一部分,并介绍了量子编程的基本原理。
DataEspresso量子计算系列教程的概述。
第一部分:通过产生随机数开始量子计算(Python)
第二部分:使用量子隐形传态给鲍伯发送消息(Python)
第三部分:订阅我们的简讯以便通知您
这个示例可以在任何仿真器或量子计算机上完成。这篇博文,使用了免费且开源的Python库ProjectQ。
ProjectQ 可以在任何CPU上模拟量子计算机,或连接到IBM的量子计算机作为后端。
开始前,只需要通过pip或者按照安装指南安装ProjectQ
量子计算机编程
编写一个量子程序有点不同于以往我们创建经典程序,我们必须深入计算机抽象层次,使用逻辑门来操纵数据,与Alan Turing创造著名的图灵机器时使用的心态相同,它描述了经典机器对经典比特进行经典计算。
量子图灵机描述了一种可以在量子比特上进行量子计算的计算机,其中量子计算是指将量子逻辑门如Pauli-X、CNOT等应用于量子比特。
这意味着任何可能在经典计算机上写入的程序都可以在量子计算机上运行,反之亦然,但这并不意味着任何程序在量子计算机上都会更有效,事实上,一些程序在量子计算机将运行得更慢并且量子计算机将不得不与一台经典的计算机并行工作以处理经典计算机的计算不足,诸如矩阵乘法运算或寻找破解密码学的主要因素。
用量子门创建一个随机生成器
创建(伪)随机数是计算机科学课程中教的第一件事。通常,它会导入一个称为"Random"之类的预先创建的库,然后调用合适的函数。
在量子计算中,我们还没有达到这样的抽象水平,但是使用量子逻辑门来创建随机数几乎同样容易。
量子门类似于我们从经典计算中知道的的逻辑门。例如:AND,OR,NAND,XOR等。
对于那些不熟悉这个概念的人来说,逻辑门是用于通过布尔函数操纵输入的一组输入和输出。
例如,如果我们给或门输入两个数字,其中一个或两个都是一,输出将是真,如果我们输入两个零,输出将是假。
上面的表显示了或门的真值表,其中A和B是输入,Q是输出。想象一下,只有当灯被点燃时,门才会打开,当两盏灯关闭时,门将保持关闭。
逻辑门可以用来计算任何操作,并且在量子计算中,我们可以使用称为Hadamard的逻辑门来创建随机数(1或0)。
Hadamard门取一个输入,并将输出映射为等于1或0的相等概率,即创建一个叠加,其中输入可以同时为1或0。
基态 |0⟩被映射为:
基态 |1⟩被映射为:
Hadamard门由Hadamard矩阵表示,表明行是相互正交的。
在维基百科上阅读关于Hadamard矩阵和其他量子逻辑门的更多信息
本质上,Hadamard门掷硬币,而硬币在空气中,这是一个叠加,在这个意义上,硬币可以是正面和背面,直到它落地,我们向下看它-人为的方式来衡量硬币的状态。
我们的量子随机生成器在几个简单的步骤中加上硬币模拟
1.创建一个新量子比特
从口袋里掏出一枚硬币
2.将Hadamard门应用于量子比特,将其叠加成等于0和1的相等概率。
把硬币抛向空中,现在可以是正面,也可以是背面。
3.测量该量子比特
硬币终于落地了,看是它的正面还是背面。
首先,导入projectQ的Hadamard门和测量函数。我们在本教程中使用了projectQ,在其他库和系统中也可以遵循同样的方法,虽然代码语法会有所不同,但是理论是一样的。
我们使用仿真器初始化后端,但是也可以使用如IBMs量子计算机。然后创建一个新的量子比特来应用计算。
我们现在有一个量子比特,它被初始化并准备叠加。记住这里硬币的比喻,在这里我们捡到一枚硬币,现在准备扔在空中。
然后我们将Hadamard门应用到量子比特,这是指我们把硬币抛向空中的步骤。
这样做的语法将在每个库和工具之间有所不同,但在ProjectQ中,它只按照以下方式完成。
这里要注意的一件有趣的事情是,我们直接将门应用到量子比特,而不是创建一个副本。这是因为不同于经典比特,量子比特不能被物理学的基本定律所复制。
然而,它有可能将量子态从一个位置传送到另一个位置,但这是下一个教程的内容。
随着量子比特的叠加,我们现在可以测量它,这指的是步骤硬币落到桌子上并看是它的正面还是背面。在projectQ中,测量是用下面的命令完成的。
测量的量子比特现在可以打印出来 将返回0或1。
这一切都包含在一个完整的Python代码的一个for循环中,这表明我们投掷硬币的随机性。
来自随机生成器的一些输出。
这是对Python中创建一个带有量子门的随机生成器的简单介绍。请在下面的评论区中发表任何评论,关注或问题。
英文原文:http://dataespresso.com/en/2018/07/22/Tutorial-Generating-random-numbers-with-a-quantum-computer-Python/
译者:张新英
领取专属 10元无门槛券
私享最新 技术干货