量子计算机怎么编程,量子计算机编程(一)——QPU编程

今天要给大家介绍的是这本书《Programming Quantum Computers —— Essential Algorithms and Code Samples》,主要讲如何在量子计算机上编程,又示例的代码可以跑 https://oreilly-qc.github.io./ ,这本书的理解方向是纯粹计算机的,连矩阵都很少涉及,一个量子计算机就像是协处理器一样,很像我们现在的GPU。

这本书一共分为三个部分,我也将分成三篇文章来写。

单量子比特

这本书中对于量子的表达方式如下circle notation:

e632caa2c3b9fb53c3eb40017dc9b4fd.png

aeb5f68f12dc0e2f4d3e7df1a1d5669a.png

蓝色圈的面积就是这个量子态测量后是这个状态的概率,中间的蓝色短线代表他们的相位,因为全局相位也观察不出来,所以一般$|0\rangle$就是朝上的。对于一个量子比特来说,重要的也就这两个,magnitude和relative phase(可能因为重要的是概率大小,所以他其实没有提amplitude其实是一个复数)。

b7d2ecab0202a06f3dfff62f6c2e33f5.png

这两个态实际上是等价的。

电路图呢,一般长这样

884d0203087f11fad47d8813d6af32ce.png

这个电路图对应的代码如下:(这个例子都可以在上面那个网站上跑起来)

qc.reset(1); // allocate one qubit

qc.write(0); // write the value zero

qc.had(); // place it into superposition of 0 and 1

var result = qc.read(); // read the result as a digital bit

第一步就是申请一个qubit,就像你要给变量分配空间一样。

第二步写0,其实写0很容易,你可以直接测量,要么0,要么1,如果结果是1的话,再做一个not操作就好;当然,你要是嫌麻烦,对于一个qubit,长时间的静置他,他也会变成0,毕竟还是基态比较稳定。

第三步就是进行一个H门的操作

第四步读,其实就是测量了

常见的作用于单量子比特操作的表达方式:

68a231bbc711eda2186dc090294075a8.png

5bdd7de22bb1da4f8859e868529d4d09.png

其中值得一提的是PHASE相位操作,phase操作只作用在 $|1\rangle$ 上,因为他的效果是改变相对相位,如果大家都改变就没有什么用了。可能有同学听说过绕X轴旋转和绕Y轴旋转,这些都是针对Bloch球的表达方式,与这里的circle notation的方式不要弄混了。

一个操作也可能是其他几个操作的组合,比如:

28017fe9154a54964ec93d0e20547cd0.png

如果我们可以把not变成H+180°旋转+H,那么我们也可以把中间的180°旋转变成两个90°的旋转,中间再加上两个H,因为$HH=I$,他们可以相互抵消,这样我们还可以得到RNOT:

4c9f415f01965f542ed73be52d6aa72c.png

**COPY:**这是一个需要注意的操作,因为量子程序里没有复制,这也保障了量子传输的信息不会被窃听, 因为你要窃听,你就需要去读,一读就是测量,而量子比特一测量就是坍缩。由于量子不能复制,所以,上述所有操作都是在原有的那个比特上操作的,所以操作就会被发现。

一个简单例子:

72b8d5e60ef114b12d44906820f6d3c1.png

对于这里例子来说, $A_1$ 和 $A_2$ 是对qubit Hadmard门操作后测量得到的随机值,因为这个是真随机,所以就不会被窃听者提前知道或者预估,那么当我传输这个被我用红色圈出来的比特的时候,spy并不知道这个比特是否执行了H门和not操作,那他就只能猜了,25%的概率,图里面所示就是他猜有执行了,然后他再按照他的猜测如法炮制一个qubit继续传递,当B收了这个bit后,B也随机一个数据$B_2$,看是否执行H门,然后测量。这个时候消息也都收到了,测量也都测量好了,那么把 $A_2$的信息发过来也和窃听没有关系了,如果 $B_2$ $A_2$ 的结果一样,那么测量结果应该一样,如果不一样,那么一定被窃听了。

这样的成功概率有多少呢? $B_2$ $A_2$ 一样的概率0.5,在这种情况下spy被发现的概率0.25。看起来不是很高,但是如果我们有一百个比特先检测一下这条线路,不被发现的概率将会降到百万分之一。

qc.reset(3);//申请三个qubit

qc.discard();

var a = qint.new(1, 'alice'); //给其中一个变量命名为a,但是画出来的电路图中显示alice

var fiber = qint.new(1, 'fiber');

var b = qint.new(1, 'bob');

function random_bit(q) {//对一个初始化为0的比特,进行H操作,然后测量,测量结果是随机的

q.write(0);

q.had();

return q.read();

}

// Generate two random bits

qc.label('get two random bits');

var send_had = random_bit(a);//得到是否执行H门的随机值

var send_value = random_bit(a);//得到是否not的随机值

qc.label('');

// Prepare Alice's qubit

a.write(0);//a重新赋值为0,所以前面取随机值的操作也可以在a上进行

qc.label('set value');

qc.nop();

if (send_value)

a.not();

qc.nop();

qc.label('');

qc.nop();

qc.label('apply had');

qc.nop();

if (send_had)

a.had();

qc.nop();

qc.label('');

// Send the qubit!

fiber.exchange(a);

// Activate the spy

var spy_is_present = true;

if (spy_is_present)

{

var spy_had = 1;

qc.nop();

qc.label('spy');

if (spy_had)

fiber.had();

stolen_data = fiber.read();

fiber.write(0);

if (stolen_data)

fiber.not();

if (spy_had)

fiber.had();

qc.label('');

qc.nop();

}

// Receive the qubit!

var recv_had = random_bit(b);

fiber.exchange(b);

qc.label('apply had');

qc.nop();

if (recv_had)

b.had();

qc.nop();

qc.label('');

qc.nop();

qc.label('read value');

qc.nop();

recv_val = b.read();

qc.nop();

qc.label('');

qc.nop();

// Now Alice emails Bob to tell

// him her had setting and value.

// If the had setting matches and the

// value does not, there's a spy!

if (send_had == recv_had)

if (send_value != recv_val)

qc.print('Caught a spy!\n');

多量子比特

4816cb9d6f7d11b54747b241a3957372.png

多量子比特的表示方法和单量子比特没有什么区别,下面的数字就是把他们从01的二进制换算成了我们熟悉的十进制。0x是十六进制的表示方法,最上面的是地位,正好可以not操作表示了出来,0就是000,1就是001,2就是010……以此类推

真要说和单量子比特的区别,那主要是两方面,一个是纠缠;另一个就是受控操作。

纠缠

纠缠好说,两个纠缠的量子比特就是其中一个的测量结果会影响另一个。

受控操作

受控操作就是说有两类比特,一个是用来控制的,另一个是被控制的。

比如大家耳熟能详的CNOT,当控制比特是1的时候,就翻转被控制的比特,如果控制比特是0的时候,那就不做操作。还有CCNOT门,又叫做toffli门,有两个控制比特,只有当他们都为1的时候才翻转。

现在要介绍一个前面没有提过的CPHASE受控相位门,和CNOT相似,同样是当控制比特为1的时候才进行,但是正如前面我们提过,PHASE操作只操作在1上,也就是说,如果这个操作被执行其实只有一种情况,那就是$|11\rangle$ 。

在前面我们表示过一个旋转180°的相位操作可以表示成一个 H+NOT+H figure 2-14

那么现在受控相位操作拥有了三种表示方法:

b7f377f779c19893b93868ef85fa6115.png

当控制比特为0的时候,CNOT就不会发生,两个H又正好抵消了。

phase kickback

在这之所以说这么多的受控相位操作是因为这里面有个一很有趣的小技巧 QPU Trick: Phase Kickback 来看下面这个电路图

78146738018bf3c368f93626e6fa97e1.png

这个电路图很容易理解,一种理解方式就是把register 1当作控制比特,register 2 当作受控比特,两个H门使得register 1变成了等可能的四种情况 $\frac{1}{2}|00\rangle+\frac{1}{2}|01\rangle+\frac{1}{2}|10\rangle+\frac{1}{2}|11\rangle$ 。

现在来看看结果:

d458c9ce52185b8aeb145c576d4fd24d.png

因为register 2并不是叠加态,所以没有相对相位,而绝对相位又测不出来,所以他可以说是没有变的,改变了的,反而是register 1 , $|3\rangle$ 转了135°是因为两个都为1,45°和90°都转了。作为一个受控操作,控制比特反而变了,而受控比特没有改变。

swap

受控操作当然也能连在一起,得到一些有用的结果,比如三个CNOT操作,他就可以交换两条线路。

ac693ada589321b2f910e5b6fde2fb28.png

这个的证明是一件很容易的事情,你可以取一个任意态推一边,专门把这个提出来说一遍是因为这个还能做一件有趣的事情,那就是验证两个比特是否相等。我们需要用到的是CSWAP,即当控制比特为1时才交换。

cc786ea29b938bb7ef0de29822da5e7a.png

当我们的output比特经过H门后,他就变成了等概率的 $|0\rangle$ 和 $|1\rangle$ 经过一个CSWAP,为1情况下的input1和input2就会交换,也就是说他们原来x概率的ab就变成了x概率的ba了,这样的问题出在哪?

如果概率还是原来的分布,那么在经过一个H门output等待率的 $|0\rangle$ 和 $|1\rangle$ 又会化简成 $|0\rangle$ ,各种各样的 $|1\rangle$ 的概率会相互抵消掉,那么在经历一个NOT操作就一定会得到1。

那,如果这两个数据不一样,就一定得不到1吗?不一定,只是他有概率不是1,而一旦有概率不是1,那只要多检测几次就一定能检测出来,就像上面那个窃听一样,明明只有四分之一的概率,但仅需要一百次,测不出来的可能性就降到了百万分之一。

受控操作当然不止这些,但是很多受控操作都可以分解成CNOT加上一些相位操作,我们可以自己构造自己需要的操作。

远距离操控随机

这里的远距离操控不是指我能扣确定他是什么,如果我能确定,那就不是随机了,而是说,我把两个比特弄成纠缠,当我一个测出来是0的时候,另一个以x%的概率得到0,至于我测出来是不是0看天意,对面测出来是不是0,也看天意,其中唯一能确定的,就只有这个x了。

这个例子是书上例子3-6 https://oreilly-qc.github.io/?p=3-6 方法很简单,就是我H门操作后,我旋转45°的角度,这样再来一个H门,因为相位变了,符号对不上,所以回不去了,就有了关联。

更强大的一点的应用是——量子隐形传态,量子隐形传态 Quantum Teleportation 提过了,就不在累述。

原文出处:https://www.cnblogs.com/zmzzzz/p/12323743.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity 纹理压缩格式‘_纹理优化:让你的纹理也“瘦”下来

在上一期《纹理优化:不仅仅是一张图片那么简单》中,我们针对纹理相关的优化,挑选了部分知识点分析。无论是大家在开发时的疏忽,还是对相关知识点的理解不足,这些问题的积累最终都会反映到项目的性能表现上。为此&#…

2020中级计算机工程师,2020年上半年中级网络工程师报考详解

原标题:2020年上半年中级网络工程师报考详解软考全称叫做“全国计算机技术与软件专业技术资格(水平)考试”已经开展了十多年了,所受到的欢迎程度也是越来越高,据统计累计参加软考的人数已超300万人,同时每年以21万人的速度持续增加…

华科计算机复试ccf成绩,新鲜速递!刚拟录取华科学妹总结的复试攻略,快看

原标题:新鲜速递!刚拟录取华科学妹总结的复试攻略,快看今天给大家分享一位19考研学妹的面试经验,她报考华中科技大学,已拟录取!复试已落幕,在火车上收到拟录取通知后,感觉自己就像一…

php负载均衡原理_负载均衡的原理(通俗理解)

简单的来说,假设,你在放洗脚水,并且,当前你只有一洗脚盆。那么,你的洗脚水不管有多少,你最多就能装一个洗脚盆的这个就是,单服务器应用场景,你的流量就是洗脚水,然后&…

光影mod_MOD墨设设计丨天海之间的乌托之城

WWW.DINZD.COM“人当诗意地栖居”——海德格尔银湖湾最后一块稀缺资源,陆止于此,海始于斯。也许会在地图上迷失,但是却如仙境般存在,静谧而神圣,神秘而平和。城市展馆 空灵圣洁,隐市秘境天空之尽&#xff0…

逆向查找_「函数说12」数据逆向查找很复杂?match+index让你轻松搞定

EXCEL进阶课堂 函数说 持续更新,这是第12篇教程。欢迎各位小伙伴转发、点赞、讨论,更欢迎私信获取练习素材,刻意练习才能学有收获。第12讲:如何轻松的实现数据逆向查找——matchindex01 问题引入前面给大家介绍vlookup函数后&…

计算机辅助审计的特点是,浅谈新环境下计算机辅助审计的特点和应用_1

浅谈新环境下计算机辅助审计的特点和应用_1 (7页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!24.90 积分从本学科出发,应着重选对国民经济具有一定实用价值和理论意义的课题。课题具有先…

规培手册填写模板_9年老资料员经验分享,181套资料员模板+302页工作手册,成为优秀资料员还能提高工作效率,限时分享...

一个工程项目中,资料员是不可缺少的,资料员主要负责工程的资料收集、编制和整理等工作内容。一个优秀的资料员价值千金,如何才能成为一个优秀的资料员?今天带来的是在工程中9年资料员的老工编制的资料员工作模板,还有3…

云服务器重装系统后卡顿,云服务器Windows重装系统须知

我们Windows2003/2008/2012中文和英文版本可供安装,安装需注意:1.Windows2003安装后,请通过VNC登录系统设置密码,默认密码为空,否则将无法远程登录!2.Windows2008/2012系统安装后,请尝试使用您设…

dict下如何取值_年薪百万之路--第十七天 装饰器(下)和迭代器

一 有参装饰器>带有参数的函数装饰器为被装饰对象添加认证功能的装饰器,实现的基本形式如下def deco(func):def wrapper(*args,**kwargs):编写基于文件的认证,认证通过则执行resfunc(*args,**kwargs),并返回resreturn wrapper如果想提供多种不同的认证方式以供选…

英雄联盟掉线怎么不显示重新连接服务器,Win7旗舰版系统玩英雄联盟掉线总是显示正在尝试重新连接如何解决...

英雄联盟这款游戏想必大家都非常熟悉吧,然而在玩的过程中总是会碰到一些情况,比如有不少win7旗舰版系统用户在玩英雄联盟的时候,遇到掉线了,总是显示正在尝试重新连接,该怎么办呢,本文就给大家讲解一下Win7…

cobaltstrike扩展_Malwarebytes:使用可变C2下发Cobalt Strike的APT攻击

6月中旬,Malwarebytes Labs的研究人员发现了一个伪装成简历的恶意Word文档,该文档使用模板注入来删除.Net Loader。研究人员认为这是与APT攻击有关的多阶段攻击的第一部分。在最后阶段,威胁行动者使用了Cobalt Strike’s Malleable C2功能来下…

浙江大学计算机保研条件_【如何将保研成功率提至100%】来自取得浙大等五所顶尖院校保研资格学长的干货分享(联系导师章节已更)...

一、前言写在开头:白驹过隙,距离2020年9月28日保研系统确认拟录取已经过去了四个半月了,期间多次有想要写下从了解,到准备,到参与,到录取的整个保研过程,同时分享一些自己踩过的雷,总…

怎么把BAK文件放入服务器中,BAK格式的备份文件如何导入审计软件

首先:电脑上得安装有SQL数据库,并开启;一般来说,只有以SQLSEVER数据库存储的都可以用数据库软件,对备份文进行取数;1)在审计系统里面导入bak,必须满足前提条件:自己电脑上安装有sqls…

手机显示无法接通服务器是怎么回事,手机无法接通是什么原因及如何解决【图文】...

手机,已经成为我们日常生活中必不可缺少的电子产品,不论男女老少一般都配备有一部手机,有些人甚至配备了两部、三部手机。手机的主要功能是通讯功能,给别人拨打电话或者接听别人拨打的电话。有时候我们在拨打别人电话的时候可能会…

spark算子大全glom_(七)Spark Streaming 算子梳理 — repartition算子

目录天小天:(一)Spark Streaming 算子梳理 — 简单介绍streaming运行逻辑天小天:(二)Spark Streaming 算子梳理 — flatMap和mapPartitions天小天:(三)Spark Streaming 算…

550什么意思_布草知识 | 都是羽绒,为什么价格大不同?

为什么羽绒的价格有些便宜有些这么贵呢?让小编来告诉你!市面上羽绒制品这么多,从几百到上万都有,中间的区别到底在哪里呢?接下来,我们就来说说,它们到底贵在哪里~01暖不暖,看蓬松度羽…

可调整大小的div_气液增压缸运行速度的调整以及压力的调节方式

点击蓝字 关注我们增压缸的行程及吨位绝对了设备整体速度,以下的调整只是在原基础上起到微调的作用。(1)气液增压缸时间调整:增压缸四个步骤动作是依靠时间继电器来控制的,可根据不同的产品的需求,通过时间继电器来调整每个步骤的…

pytest测试实战 电子书_电子书丨Selenium 3+Python 3自动化测试项目实战:从菜鸟到高手...

▊《Selenium 3Python 3自动化测试项目实战:从菜鸟到高手》田春成 著电子书售价:39.5元2019年9月出版Selenium是目前非常流行的一种自动化测试工具。本书基于Python 3语言讲述了新的Selenium 3的基本理论与操作,涉及各种高级应用,…

phpcms移动端和pc端_移动端调试大法

文章:樊秀宝(北京中心—小易F8技术小组)排版:suny在日常项目中的开发中,接触移动端开发的小伙伴们免不了要和移动端调试打交道。本文总结了常用的移动端调试方法,欢迎大家学习和补充。01谷歌浏览器谷歌浏览器是我们前端开发中必不…