量子编程吧 关注:56贴子:265

(转载)一文教你 “量子编程”入门

只看楼主收藏回复

这是一段从量子比特到真实量子程序的量子编程演练。
量子计算机
量子计算机被发现之后,量子编程也在不断发展。本文将带你入门量子编程,介绍量子计算机与传统电脑的区别,解释量子编程的基本概念,最后教你如何在一个当今免费的量子计算机上运行程序。
在开始之前,请注意,本文是为希望了解量子编程的完整技术细节的人们准备的。本文建立在量子比特(qubit),量子门(quantum gates)和量子电路图(quantum circuit diagrams)的数学基础之上。(本文不涉及解释量子算法。)
由于我们将涉及到有关量子编程的基础数学,因此你需要了解向量、矩阵、线性组合和复数的概念。


IP属地:山东来自Android客户端1楼2022-03-13 22:30回复
    量子计算机
    让我们首先了解一下什么是量子计算机,其与传统的计算机有什么区别?
    量子计算机是使用量子力学进行运算的机器。
    那么,这与其他计算机有何不同?我们知道,计算机最基本的形式是用来执行运算,有许多类型的计算机,在计算机时代的早期,我们实际上是有过机械计算机的——查尔斯·巴贝奇在1837年设计了一款机械计算机来执行基本的计算过程。现今,我们的计算机基于数字电子设备,利用位和逻辑门来进行运算。与之不同的是,量子计算机使用量子力学来进行运算,利用量子比特和量子门,而不是位和逻辑门。
    那么,什么是量子比特和量子门呢?物理上来说,它们可以用许多方式实现——Google、IBM、微软、Rigetti等公司都有自己的方案。我们现阶段无需关心量子比特和量子门的物理性质,因为初次学习量子程序并不需要了解这些。


    IP属地:山东来自Android客户端2楼2022-03-13 22:32
    回复
      量子编程
      在开始编程之前,强烈建议你摒弃大脑中有关编程的一切固有概念,不要想着声明设置变量,循环语句,定义函数等,任何先入之见都没有用。量子编程不是简单地将现在的程序运行更快的一种方法,其与现有的程序在根本上就是完全不同的。(按语:“量子编程”用是类似HDL的硬件描述语言,而不是如C之类的面向过程式语言。两者无法类比。)
      了解量子比特
      一个量子比特是具有单位长度的两份复数的矢量。为什么使用量子比特?量子比特的含义是什么?我们不妨把它和传统的位(即比特)作比较。
      对于初学者来言,“一个位”是一个非0即1的数。而“一个量子比特”是一个非0即1的概率分布:若有两个相同的量子比特,分别测量,可以测到不同的值。仔细想一想,就可以发现,基于量子比特的量子计算,本质上也是概率性的!
      第二个重要的区别是,一个传统的位可以被无限次读取,而量子比特一旦被读取过,就会失去量子性,坍缩成一个传统的位。想想薛定谔的猫,“测量”就是打开盒子,看看猫有没有死。一旦发现它死了,即使合上盖子再打开,猫也不会再活过来。用量子力学的话说,“波函数发生了坍缩”。
      我们假设一个量子比特可以测到0的概率为|α|2,测到1的概率为|β|2。由于测到的值非0即1,所以:


      IP属地:山东来自Android客户端3楼2022-03-15 20:35
      回复


        IP属地:山东来自Android客户端4楼2022-03-15 20:35
        回复
          其中,包含α和β的列向量是一个量子比特,α和β上方的横线表示复共轭。之所以把概率写成α和β模长的平方,是因为α和β本质上是两个波函数的幅值,而任何测量手段都是在取各自的模平方。
          总结:量子比特是两个复数的α和β的单位向量。量子比特被测量概率为0的是|α|2,被测量为1。α和β在被测量之前,是不得而知的,测过之后则坍缩。


          IP属地:山东来自Android客户端5楼2022-03-17 21:53
          回复
            量子比特符号
            我们通常使用狄拉克标记(也称作bra-ket标记)表示量子比特。bra代表行向量,用〈 |表示,ket代表列向量,用| 〉表示。例如,我们可以按照以下的方式在狄拉克表示中写入测到的“0”状态和“1”状态。(注意不要将bra/ket的表示和向量内的内容混淆。)
            量子比特有纯态和混合态的区别。如果一个量子比特的态可以完全用|0〉和|1〉线性表示,这就是一个纯态:


            IP属地:山东来自Android客户端6楼2022-03-17 21:53
            回复


              IP属地:山东来自Android客户端7楼2022-03-17 21:54
              回复
                其他量子比特需要纯态的混合才能充分描述它们,被称为混合态量子比特。换句话说,混合态量子比特是通过纯态的概率分布来描述的。在本文稍后的部分,我们将看到一个混合态量子比特的示例。


                IP属地:山东来自Android客户端8楼2022-03-17 21:54
                回复
                  多个量子比特
                  到目前为止,我们仅定义了单个量子比特的状态。多个量子比特的组合状态是什么样的?
                  多个量子比特的组合状态其实就是所有量子比特的张量积。
                  如果你不知道张量积是什么,请不要担心。我们将通过一个简单的示例来进行介绍(⊗是张量积运算的符号)。


                  IP属地:山东来自Android客户端9楼2022-03-17 21:55
                  回复


                    IP属地:山东来自Android客户端10楼2022-03-17 21:55
                    回复
                      通常,我们可以通过以下两个步骤对任何两个矩阵进行张量积:
                      1. 将第一个矩阵中的每个元素乘以第二个矩阵;
                      2. 根据第一个矩阵中元素的原始位置,合并乘出来的矩阵。
                      上图是一个如何处理二维矩阵的示例


                      IP属地:山东来自Android客户端11楼2022-03-29 21:55
                      回复
                        我们还可以将狄拉克表示中的多个量子比特表示为|0〉⊗|1〉。作为简写,我们可以省略⊗,仅写|0〉|1〉;更简略些,写成|01〉。


                        IP属地:山东来自Android客户端12楼2022-03-29 21:56
                        回复
                          了解量子门
                          现在让我们了解一下量子门。
                          量子门是一个幺正矩阵。
                          为什么是幺正矩阵?
                          首先,量子门将由物理设备实现,因此它们必须遵守量子物理定律。物理学的定律表明:信息在过去和未来的点转换时,不会丢失,这被称为幺正性(unitarity)。由于我们的量子门定义了状态的转变,因此它们也必须遵守幺正性。
                          其次,请注意,量子门是作用在量子比特上的。之前提到,量子比特实际上只是矢量,因此这意味着量子门必须以某种方式对矢量起作用。幸运的是,我们记得矩阵实际上是向量的线性变换!
                          结合这两种思想,我们将量子门视为幺正矩阵。幺正矩阵是复数的任何方阵,它的共轭转置等于它的逆。作为快速变换,可以通过取矩阵中每个元素的共轭(a + bi → a - bi),然后取矩阵的转置(元素ij→元素ji),可以找到矩阵的共轭转置。我们通常用“†”表示共轭转置。


                          IP属地:山东来自Android客户端13楼2022-03-29 21:56
                          回复
                            关于幺正矩阵的一个重要性质是范数(即向量的长度)不变性。否则,一个量子比特被量子门处理过后,其概率和不为1!这没有任何意义,因为所有概率的总和必须始终等于1。
                            还应注意,根据定义,幺正矩阵有逆。这意味着我们不能将量子比特“分配”到任意状态。为了理解,我们假设有一个可以“分配”值的量子门,因此,可以将含有两个复数的任何矢量转换为含有两个复数的特定矢量。作为幺正矩阵,这个量子门具有的一些特定的表示,且该矩阵具有能够将特定矢量转换回操作前状态的逆矩阵!但是,在测量之前,量子比特可能处于任何状态,并且无法知道是哪个!因此,我们不能将量子比特“分配”到任意状态。在更高的层次上,所有量子门都是可逆的,这就是为什么我们经常将量子计算视为可逆计算的一种形式。


                            IP属地:山东来自Android客户端14楼2022-03-29 21:57
                            回复
                              H和CNOT量子门
                              现在我们已经对我们将要做的事情有了一点了解了,现在以Hadamard门为例,矩阵H:


                              IP属地:山东来自Android客户端15楼2022-03-29 21:59
                              回复