量子计算(10)编程实践2:隐形传态算法

news2024/11/17 0:05:54

目录

一、算法目的

二、算法原理

三、pyqpanda实现代码

四、测试结果


一、算法目的

        量子隐形传态,又称量子遥传、量子隐形传输、量子隐形传送、量子远距传输或量子远传,是一种利用分散量子缠结与一些物理讯息的转换来传送量子态至任意距离的位置的技术,这是一种全新的通信方式。它传输的不再是经典信息而是量子态携带的量子信息,在量子纠缠的帮助下,待传输的量子态如同经历了科幻小说中描写的“超时空传输”,在一个地方神秘地消失,不需要任何载体的携带,又在另一个地方神秘地出现,就像三体小说的那两个“智子”,就是通过量子传输的形式进行控制。

        具体的例子如下:

        我们假设程序员小李在武汉,想把量子信息发送给在苏州的伍老师,具体地说,假设他想给伍老师发情书,这份情书的内容被存储在了|\varphi >=\alpha |0>+\beta |1>中。伍老师想要得到准确的信息,这需要小李能够准确的传递关于α和β的信息。

        但是小李程序员不能简单地生成一个|\varphi >的副本然后传送给伍老师,因为复制状态只有在经典计算中生效,而对量子态不合宜,这个感兴趣的同学可以学一学量子不可克隆原理。

        所以小李程序员就开始头秃啦,他迫切的想要伍老师知道自己的这份爱意。然而,办法总比困难多,量子仿佛看出来了小李浓烈的爱意,构造出来了一个能传递信息的算法,于是通过两个经典位和纠缠,小李可以转换状态|\varphi> ,把情书传递给伍老师。那么如何传递,让我们通过后面的算法学习吧!

二、算法原理

       

        将需要传递的第三个量子比特的信息,即“情书,”赋予EPR对中的第一个量子比特上,传输给伍老师,即将qubits[2]的信息传递到目标比特qubits[0]上。    

        我们还是先给电路,再来推算这个电路的合理性。

        这次要使用的量子线路里面有一部是制造Bell态的线路,qubits[1]是控制比特,qubits[0]是目标比特,而我们希望把新加入的qubits[2]的信息传递到qubits[0]上。假设qubits[2]的信息是|\varphi>,即用|0>态经过RY门可以得到,其中RY的矩阵形式为:

RY(\theta )=e^{ \frac{-i\theta Y}{2}}=cos(\frac{\theta }{2})I-isin(\frac{\theta }{2})Y=\begin{pmatrix} cos(\frac{\theta }{2})&-sin(\frac{\theta }{2}) \\ -sin(\frac{\theta }{2}) & cos(\frac{\theta }{2}) \end{pmatrix}

        然后,我们需要对qubits[2]与qubits[1]这个EPR对执行Bell测量,具体的步骤为:对这一对量子执行CNOT门操作,qubits[2]是控制比特,qubits[1]是目标比特,随后让qubits[2]门进行H门操作,随后在计算基上测量它们。

        测量之后,qubits[2]、qubits[1]现在有4种测量结果,即|00>,|01>,|10>,|11>。当测量结果处于不同状态时,对qubits[2]进行不同的门操作。如下表:

qubits[2]、qubits[1]处于的量子态对qubits[0]的操作
|0>|0>无操作
|0>|1>经过一个Z门
|1>|0>经过一个X门
|1>|1>线经过一个X门,再经过一个Z门

        这样的算子可以使qubits[0]获得qubits[2]的信息!

        其电子线路图如下:其中qubits[0]与qubits[1]构成了上一题的贝尔态。

        我们来推理一下,三个qubits初始态均为|0>,qubits[2]经过RY之后,我们得到需要量子隐形传态的状态|\varphi >=\alpha |0>+\beta |1>,其中\alpha\beta均为未知的振幅。同时由第一问的贝尔态问题我们知道了qubits[1]与qubits[0]的状态。那么,我们可以求出|\varphi _{1}>的状态:

        再经过qubits[2]与qubits[1]的控制门后,我们能得到|\varphi _{2}>的状态:

        随即qubits[2]经过一个H门,得到|\varphi _{3}>的状态:

        再进行一下小小的重组,可以把它改写为:

        也就是说如果此时不加控制X门与控制Z门,当qubits[2]与qubits[1]检测结果仅为|00>时,才能传达出正确的|\varphi>,所以需要及时调整。我们观察检测结果为|01>的时候,qubits[0]的结果为|\varphi >=\alpha |0>+\beta |1>,刚好用一个X门就能改回来,同理在|10>条件下加一个Z门才能正确传态,而|11>条件下需要X门与Z门共同努力才能改回来,综上所述,得到了上述那副电路图。

        在测试代码时,我们调用函数,传入theta,由于最后使用了qvm.get_qstate()方法,得到了电路的量子态,所以理想结果会有四组:分别是当qubits[2],qubits[1]为|00>、|01>、|10>、|11>这四组结果。此时qubits[0]为|0>的幅值是\alpha,为|1>的幅值是\beta

三、pyqpanda实现代码

def question2(theta: float) -> list:
    qvm = CPUQVM()
    qvm.init_qvm()
    qubits = qvm.qAlloc_many(3)

    cbits = qvm.cAlloc_many(3)
    # 构造量子程序prog
    prog = QProg()
    progx = QProg()
    progz = QProg()
    measureprog = QProg()

    progx.insert(X(qubits[0]))
    progz.insert(Z(qubits[0]))
    measureprog.insert(Measure(qubits[2], cbits[2]))
    measureprog.insert(Measure(qubits[1], cbits[1]))
    # 构造条件分支
    qifx = create_if_prog(cbits[1], progx)
    qifz = create_if_prog(cbits[2], progz)

    prog.insert(RY(qubits[2], theta))
    prog.insert(H(qubits[1]))
    prog.insert(CNOT(qubits[1], qubits[0]))
    prog.insert(CNOT(qubits[2], qubits[1]))
    prog.insert(H(qubits[2]))
    prog.insert(measureprog)
    # 先测量前面两个量子比特
    qvm.directly_run(prog)
    # 先X后Z
    prog.insert(qifx)
    prog.insert(qifz)

    RESULT = qvm.directly_run(prog)
    result2 = qvm.get_qstate()
    # 输出并返回列表
    print(result2)
    return result2

四、测试结果

        我们以theta=np.pi/3为例测试结果,调用上述函数,得到结果有四种:

question2(np.pi / 3)

qubits[2],qubits[1]为|00>时:

qubits[2],qubits[1]为|01>时:

 qubits[2],qubits[1]为|10>时:

 qubits[2],qubits[1]为|11>时:

       0.866……即代表着幅值\alpha =\frac{\sqrt{3}}{2},0.49999……即代表着幅值\beta =\frac{1}{2},是正确隐形传态的结果,测试正确!

        让我们祝贺小李程序员成功的将情书传递给了伍老师,当然了,如果读者们觉得小编写的文章对大家有所帮助,请大家动动手,给小编一个免费的赞好吗?

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

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

相关文章

AutoSar CAN网络管理(CanNm)

文章目录 网络管理目的主动唤醒和被动唤醒状态管理1. 总线睡眠模式(Bus-Sleep Mode)2. 准备总线睡眠模式(Prepare Bus-Sleep Mode)3. 网络模式(Network Mode)3.1 重复报文状态(RepeatMessageState)3.2 常规…

基于springboot+mysql+jpa+html实现商品销售信息系统

基于springbootmysqljpahtml实现商品销售信息系统 一、系统介绍1、系统主要功能:2.涉及技术框架:3.本项目所用环境: 二、功能展示三、其它系统四、获取源码 一、系统介绍 1、系统主要功能: 订单管理模块 商品管理模块 品牌管理模…

【项目实战】—— 我们应该如何正确得创建线程池?

项目实战-我们应该如何正确得创建线程池? 对于现在而言多线程编程已经成为程序员必备的职业技能了,在开发实践过程中,你是否也遇到过相关多线程问题,比如创建多少线程才是合适的?线程池该如何创建?今天我们…

类和对象中(2)

文章目录 一、运算符重载1、运算符重载出现的原因2、在全局和类里实现运算符重载3、赋值运算符重载1、为什么赋值运算符重载不能写在全局 ?2、什么时候需要自己实现赋值运算符重载 ? 4、前置和后置重载5、运算符重载的优势 二、const成员函数1、两个常见…

GNN与MLP:GNN是一种泛化器

图神经网络(GNN)作为图表示学习的模型,建立在MLP架构之上,具有额外的消息传递,以允许特征在节点之间流动。作者通过引入一个被称为P-MLP的中间模型,将GNN性能增益的主要来源定位为其内在的泛化能力&#xf…

JSR303统一校验和分组校验及常用注解@NotBlank@NotEmpty 的使用

JSR303-bean校验规范 JSR303常用注解,下面注解在JavaBean的字段上使用,必须在方法上搭配Vaild才会开启校验,也可以设置分组校验 Null 必须为空 主键字段常用,可以规定新增时字段必须为空NotNull 不能为null 添加数字时使用常用&…

前端学习笔记:CSS中浮动的原理,定位

这是本人学习的总结,主要学习资料如下 马士兵教育 目录 1、float1.1、float设计的初衷1.2、浮动的原理,类似两个图层1.3、浮动的原理,两个图层的特殊性1.4、消除浮动的影响 2、定位2.1、相对定位(relative)2.2、绝对定…

CSS var()的使用

最近在做流量对比的功能,有如下的效果图,当某个节点失败的时候,点击能够弹出对应的提示信息。 这个库使用的是jenkins-pipeline 的库, 但是由于它原本的提示框比较糟糕,所以我们想结合antd的tooltip进行展示&#xff0…

CM211-1-ZG-当贝纯净桌面-线刷固件包-

CM211-1-ZG-当贝纯净桌面-线刷固件包-内有教程及短接点 特点: 1、适用于对应型号的电视盒子刷机; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、修改dns,三网通用; 4、大量精简内置的没用的软件,运…

设计模式之【工厂模式】,创建对象原来有这么多玩法

文章目录 一、什么是工厂模式1、工厂模式的意义2、什么时候应该用工厂模式 二、简单工厂模式1、实例(1)使用简单工厂进行优化(2)静态工厂(3)使用map来去除if(4)使用反射(…

.netCHARTING Crack,添加圆角半径控制

.netCHARTING Crack,添加圆角半径控制 直角或直线组织连接线-通过默认情况下以直角绘制组织连接线,增强了组织连接线的显示方式。可以使用直线选项更改此默认设置,并直接在点之间绘制连接线。 同步组织节点的宽度和高度-添加了Element.Annotation.SyncWi…

Vue3+element-plus实现后台管理系统

背景(未完待续) 环境:node.js软件 、Vs code、vite、elemnt-plus、windicss(样式框架) 第一节课 1、首先,使用npm 命令构建项目( vscode安装的插件 vscode中文显示插件 2、高亮提示插件volar 3、vue 3 …

【Ansys Fluent】根据export导出的ASCII文件按坐标和物理量之间的关系重建物理场(温度场、压力场等)

一、问题说明 在fluent中利用export功能导出ASCII格式的文件,例如下面的文件,第2-4列是单元中心坐标值,第5列是温度值。 如果给出和「导出这个ASCII数据文件时用的几何模型尺寸」一致或等比例放缩的几何模型,可否根据这个ASCII文…

【PCIE体系结构八】数据链路层是如何保证TLP的正确传输的?

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考书籍:《深入浅出SSD:固态存储核心技术、原理与实战》 目…

kafka3.x详解

kafka 一、简介1.1、场景选择,与其他mq相比1.2、应用场景1.2.1、流量消峰1.2.2、解耦1.2.3、异步通讯 1.3、消息队列的两种模式1.3.1、点对点模式1.3.2、发布/订阅模式 1.4、Kafka 基础架构 二、安装部署2.1、安装包方式2.2、docker安装方式2.3、docker安装kafka-ma…

RuoYi-Cloud-Plus 登录过程源码

登录界面 ruoyi-ui/src/views/login.vue 点击登录按钮进入handleLogin方法 handleLogin() {//验证数据是否合法this.$refs.loginForm.validate(valid > {if (valid) {this.loading true;//如果记住密码被勾选if (this.loginForm.rememberMe) {//直接在cookie中存入相关信…

面试也要说人话

整理了一些读者的问题。 什么是《面试1v1》? 《面试1v1》是一个以对话形式讲解知识点的文章合集,是由 JavaPub 编写的真人1对1面试对话教程,通过真实案例编写,生动、有趣、干货满满。 为什么要写《面试1v1》这个专题&#xff1…

排序篇:归并排序的递归,非递归以及计数排序的实现(C语言)

目录 一:归并排序 (1)归并排序的基本思想 (2)递归版本 ①实现思路 ②合并 ③递归实现有序 ④最终代码 (3)非递归版本 ①实现思路 ②控制分组 ③最终代码 (4)时间,空间复杂度分析 (5)小结 二:计数排序 (1)计数排序的基本思想 …

asp.net+sqlserver体育器材租赁借还系统

本器材借还系统分为管理员和用户两部分,具体功能如下 管理员部分功能 1.管理员管理,管理系统内所有的管理员信息 2.器材信息管理,对器材的基本信息进行管理,方便用户的租借 3.申请审核管理,当用户申请了器材的使用只&a…

跨境卖家必看系列:沃尔玛美国站入驻教程

沃尔玛自从2020年开始重点发展线上商店以来,销售额一直都很可观。前段时间,沃尔玛美国电商还开了个全球招商战略发布会。所以今天龙哥就根据会议官方发布的步骤,给大家总结一下想要入驻沃尔玛美国站的话需要怎么操作。 沃尔玛的入驻渠道 1.…