量子电路的实现 基于ibm的qiskit

量子计算的物理实现        

        量子计算的实现有几种方式,最常用的就是超导量子计算机,它的量子处理器是用超导传输量子比特构建的,它是由一个约瑟夫森结和一个并联的电容器组成的电路。约瑟夫森结是一种非线性电感,由两层重叠的超导金属层和它们之间的绝缘屏障构成。在非常低的温度下,超导体种的电子会形成所谓的库珀对。库珀对可以自发地通过绝缘势垒从结的一边隧穿到另一边。这种隧穿的非线性特性,从而产生了我们的量子位。微波传输线在芯片上制造,用于将微波信号传递给量子比特。

       当这些线路应用高度校准的微波脉冲——具有特定的频率、幅度、形状和持续时间时,我们可以让量子比特执行特定的操作。这构成了我们的量子门的基础。制造芯片,使得相邻的量子比特以特定的晶格结构连接,称为重六角晶格。这种连接性——所谓的拓扑结构——是我们设计电路时需要考虑的重要因素。

性能指标

每个处理器都列出了三个性能指标,我们在上一课讨论过,但作为提醒,它们是:Qubit count、EPLG和CLOPS。

Qubit count,这是显而易见的:它是单个量子处理器上可用的量子比特总数。对于一个相对较大的、实用规模的问题,你需要确保你使用的处理器有足够的量子比特来解决问题。但量子比特数量本身并不是唯一重要的因素。

EPLG,或“每层门的错误次数”。这是衡量量子比特和量子门质量的一个指标。它测量在100个量子比特的链中纠缠相邻量子比特的电路中每个门引入的平均错误。你希望这个数值尽可能小。

CLOPS,或“每秒电路层操作次数”。这量化了处理器的速度。它测量量子处理单元(QPU)每单位时间内可以执行多少层某种基准测试电路,称为量子体积电路。数值越高,我们的计算速度就越快。

设计量子电路:Qiskit模式

        那么,我们如何设计和运行量子电路呢?了解典型量子计算工作流程的最简单方法是通过Qiskit模式。Qiskit模式是一个概念性框架,允许用户通过使用模块化工具实现某些步骤来运行量子工作负载。这使得量子计算任务可以通过异构(CPU/GPU/QPU)计算基础设施来执行。这些步骤可以作为服务执行,并且可以合并资源管理,从而在开发新功能时实现无缝的可组合性。

1.映射:这一步形式化了我们如何处理我们感兴趣的一般问题,并找出如何以量子电路的形式将其映射到量子计算机上。

2.优化:在这一步中,使用Qiskit的转译器(transpile)将电路路由和布局到实际的物理量子比特硬件上。这包括将单个量子门转换为在硬件上执行的操作序列,以及对门的布局进行优化。

3.执行:Qiskit运行时原语提供了IBM量子硬件的接口,该接口允许运行编译电路。此步骤还包括使用错误抑制和缓解技术,这些技术在很大程度上可以从用户中抽取出来。

4.后处理:在这个步骤中,来自量子处理器本身的数据被处理,为用户提供原始问题的有用结果。基本上,这包括对所获得数据的任何进一步分析。

映射

        映射步骤基本上提出了这样一个问题:“我如何将我的问题转化为可以在量子硬件上合理运行的量子电路?”毫无疑问,地图绘制是一个难题,也是一个活跃的研究领域。没有一种万无一失的方法可以保证成功,但有一些建议的指导方针和我们已经知道如何解决的问题的例子。

        第一条准则是让经典计算机做它们更擅长的工作。对于经典计算机来说很容易的任务可能不会从量子计算机中受益。量子计算机用于解决传统难题。当然,如果是第一次使用Qiskit或量子计算机,不要担心会发现计算复杂的问题。把它分解成更小、更小的问题,你可以在直接进行大规模项目之前学会解决这些问题。接下来,将您想要度量或理解的问题的结果转换为期望值或成本函数。成本函数是一个特定于问题的函数,它将问题的目标定义为最小化或最大化。它可以用来查看试验状态或解决方案相对于目标的表现如何。这个概念可以应用到化学、机器学习、金融、优化等领域的各种应用中——你从哪个学科来解决问题并不重要。还要记住,您将要使用的硬件具有特定的拓扑,正如我们在硬件部分所讨论的那样。有些量子位是连接的,有些不是——你需要把你的问题映射到一个遵循IBM量子处理器的重十六进制拓扑的电路上。这个阶段需要练习。您不仅需要很好地理解您的问题,还需要很好地理解硬件功能—我们将在以后的课程中通过具体的示例和用例来了解如何平衡所有这些考虑因素。

优化

        下一步,我们需要选择一个量子处理器,它有足够高质量的量子比特,我们可以运行我们的量子电路。在硬件部分讨论的三个指标的指导下做出这些决策:qubit number(量子数)、EPLG(每层错误次数)和CLOPS(每秒电路层操作次数)。然后针对所选硬件优化电路。首先,我们需要有效地布局和布线我们的电路。布局是指将电路中的虚拟量子位映射到处理器上的物理量子位。路由是指调整电路,使电路中虚拟量子位之间的连通性与处理器上物理量子位的连通性相匹配。在布局和布线阶段有几件事要记住。并非所有量子位都是相连的。有些在芯片上彼此相距很远,我们需要尽可能减少或消除远距离交互。您可以在相邻的量子位之间应用一系列SWAP门来移动量子位信息,但是SWAP门成本高且容易出错,因此可能有更好的方法来实现这一点。尽量避免使用太多昂贵的SWAP门。布局和路由是迭代过程。你可以手工操作,但也有一个名为mapomatic的Qiskit工具,它可以根据近似错误率为物理量子位布局提供建议。转译器(将在稍后讨论)也可以给出明智的建议。接下来,可以将作用于相同量子位的单量子位门序列组合成单个门-有时也可以摆脱不必要的门或门的组合。例如,一些门的组合可以简化为更简单的组合——事实上,有时门的组合可能等同于恒等运算,因此我们可以简单地消除它们。您可以使用Qiskit转译器自动执行此操作,但如果您想要更多的控制,也可以逐个逐个地手动执行此操作。一旦我们改进了电路布局,路由和门计数-无论是手工还是使用转译器-我们通常想要可视化我们的电路,以确保所有门的定时都是有意义的。您可以在转译器中标记一个参数,以可视化电路的时间轴,并确保一切都按照您期望的方式排列。

编译

        Qiskit Transpiler可用于在模式工作流的早期阶段提供帮助。现在让我们更详细地研究一下它的功能。它可以重写给定的输入电路,使其与特定量子器件的拓扑结构相匹配,并优化电路的执行和抗噪声的弹性。它还将给定电路改写为您选择使用的特定量子处理器的基础门。

        Qiskit有四个内置的编译管道,对应于不同的优化级别,除非您已经熟悉量子电路优化,否则建议您使用其中一个。

        默认情况下,编译过程包括以下六个步骤:

1.初始化:这个阶段运行在我们开始将电路嵌入到后端之前所需的任何初始传递。这通常涉及展开自定义指令并将电路转换为单量子位和双量子位门。

2.布局:这个阶段将电路中的虚拟量子位映射到后端上的物理量子位。有关更多细节,请参阅布局阶段。(https://docs.quantum.ibm.com/api/qiskit/transpiler#layout-stage)

3.布线:此阶段在应用布局后运行,并将门(例如交换门)注入原始电路以使其与后端连接兼容。请参阅路由阶段了解更多详细信息。

(https://docs.quantum.ibm.com/api/qiskit/transpiler#routing-stage)

4.翻译:这个阶段将电路中的门转换为目标后端的基集。请参阅翻译阶段了解更多细节。

(https://docs.quantum.ibm.com/api/qiskit/transpiler#translation-stage)

5.优化:这个阶段反复运行主优化循环,直到达到某个条件(例如达到某个目标深度)。我们有四种不同的优化级别可供选择,如下所述。

6.调度:此阶段适用于任何硬件感知调度过程。在高层次上,调度可以被认为是在电路中插入延迟,以解释指令执行之间量子位的空闲时间。

        注意,qiskit的教程里有教学案例,可以自己试(唯一困难的点在于,调用真实的量子计算机需要排队,通常时间很长而且额度有限)有从0到3的四个优化级别,其中更高的优化级别需要更多的时间和计算努力,但可能产生更好的电路。优化级别0用于器件特性实验,因此,仅将输入电路映射到目标后端的约束,而不执行任何优化。优化级别3花费最大的精力来优化电路。然而,由于转译器中的许多优化技术都是基于启发式的,因此花费更多的计算工作并不总是导致输出电路质量的改善。如果对此有进一步的兴趣,请查看Qiskit文档中的转译器页面。

抑制错误

        减少电路中错误的第一步是优化布局,布线和最小化门数,我们已经完成了,要么使用转译器,要么自己完成。现在来讨论一些更复杂的误差抑制方法。错误抑制是指在编译过程中转换电路以使错误最小化的一类技术。它不同于错误缓解,我们将在下面的“执行”一节中讨论错误缓解。我们使用的两种最常见的错误抑制形式是动态解耦和泡利旋转

       1. 动态解耦用于有效地抵消当量子位空闲时引入的一些环境噪声。通过在特定时间应用一系列门,您可以使在空闲时间的一部分中积累的噪声大致抵消另一部分中的噪声。

      2.  泡利旋转是一种插入随机门的方法,不是像动态解耦那样消除噪声,而是简化噪声。通过插入随机门,它可以防止不同误差的影响快速累积,并且使噪声更容易表征,因为它现在具有随机性质。这种方法还构成了一种强大的错误缓解技术的基础,将在下面讨论。

执行

        现在我们准备好执行量子程序了。Qiskit Runtime原语提供了一个到IBM Quantum硬件的接口,它们还从用户那里抽取出错误抑制和缓解。有两个原语可供选择:Sampler和Estimator

        Qiskit Runtime的采样器在量子设备上多次运行电路,每次运行执行测量,并从恢复的位串中重建概率分布。它执行的运行(或射击)越多,结果就越准确,但这需要更多的时间和量子资源。具体来说,它通过测量电路制备的状态来计算获得每个可能的标准基态的概率。

        Qiskit Runtime的Estimator使用一个复杂的代数过程,通过将可观察对象分解成具有已知特征基的其他可观察对象的组合,来估计真实量子设备上的期望值。

        在执行步骤中,我们还可以选择错误缓解策略。错误缓解是指允许用户通过对执行时存在的设备噪声进行建模来减少电路错误的技术。通常,这会导致与模型训练相关的大量预处理开销,以及通过使用生成的模型来减轻原始结果中的错误的经典后处理开销。作为这笔开销的交换,我们能够得到更准确的结果。

        我们可以实现多种技术来减少错误。我们将讨论三种,以增加对错误的弹性的顺序,但也因此,以增加计算成本的顺序。然而,请注意,这是一个活跃的研究领域——所以我们可能会继续发明新的,并改进旧的。

        在弹性水平0,转译器对你的电路不做任何事情,在弹性水平1,它引入了一种称为旋转读出错误消除(T-REX)的方法。T-REX使用泡利旋转,正如在错误抑制部分所讨论的那样。如前所述,在电路中插入随机门可以使非常复杂,难以建模的噪声看起来是随机的,并且在后处理中更容易解释或减去。在弹性水平2,加入零噪声推断ZNE)。这是一种流行的技术,我们最近取得了很多成功。ZNE背后的想法可能有点令人惊讶-我们实际上在已经存在的基础上添加了噪音!但这让我们可以反向推断,来预测如果噪音越来越少,结果会是什么样子。添加噪声可以通过几种不同的方式完成。例如,我们可以延长门,使其更长,从而更容易出错,或者运行更多的门,最终导致身份操作,因此电路不会改变功能,但我们有目的地采样更多的噪声。你必须对每条电路和每一个你想要跟踪的期望值都这样做,所以你可以看到它最终是如何在计算上昂贵的。

        ZNE的一种特殊类型被称为概率误差放大(PEA)。一旦我们了解了门的噪声模型,PEA就会从噪声模型中采样误差,并有意地将其注入电路中。我们将讨论的最后一种错误缓解形式是概率错误消除(PEC)。PEC不是第三个弹性级别,而是必须在Qiskit中手动打开的特殊功能,因为与其他错误缓解技术相比,所需的计算资源的可伸缩性不是很好。您首先要了解影响电路的噪声-为电路中的每个独特的双量子位门层运行噪声学习或噪声表征电路。这些结果让你可以用泡利算子来描述噪声。一旦你知道了这些噪声项,你就可以修改你的电路,这样它们就可以有效地内置相反的泡利门来消除这些噪声通道。在某些方面,这个过程类似于降噪耳机的工作方式。然而,这种消除噪声的方法非常昂贵,运行时间在门的数量上呈指数级增长,因此它可能不是非常大的电路的最佳选择。

后处理

        后处理阶段是我们可视化和分析量子电路输出的阶段。有许多Qiskit工具可供您使用,例如可视化和量子信息模块。

参考

1.Evidence for the utility of quantum computing before fault tolerance | Nature

2.Running Quantum Circuits | IBM Quantum Learning 

3.transpiler | IBM Quantum Documentation

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

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

相关文章

【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用

创建个性化的GPTs应用是一个涉及技术、设计和用户体验的过程。以下是详细步骤: ###1.确定应用目标和用户群体 在开始之前,你需要明确你的应用的目标和目标用户。这将帮助你在设计、开发和个性化方面做出相应的决策。例如,如果你的应用是为了…

cmake中execute_process详解

execute_process 是 CMake 中一个非常强大的命令&#xff0c;用于在构建过程中执行外部程序或脚本。它提供了丰富的选项来控制执行过程&#xff0c;并可以捕获输出、错误和返回码。以下是 execute_process 的详细解析&#xff1a; 基本语法 execute_process(COMMAND <comm…

141/142题环形链表

本题返回环入口的位置。使用快慢指针&#xff0c;快指针每次移动两个&#xff0c;慢指针每次移动一个。设前一段距离是a,进入环内到slow和fast相遇的地点距离是b&#xff0c;环内剩下的距离是c&#xff0c;如图所示。 环的长度是bc 慢指针移动距离是ab 快指针移动距离是abk(bc…

Linux-2

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;linux基础之病毒编写&#xff08;完结&#xff09;_哔哩哔哩_bilibili 一、Linux目录介绍 /bin&#xff1a;二进制可执行命令 /etc&#xff1a;…

快速入门Zookeeper

Zookeeper ZooKeeper作为一个强大的开源分布式协调服务&#xff0c;扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务&#xff0c;用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性&#xff0c;ZooKeeper能够确保在复杂的分布式…

SpringBoot环境下的共享汽车管理策略

3系统分析 3.1可行性分析 通过对本共享汽车管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本共享汽车管理系统采用SSM框架&#xff0c;JAVA作为开发语…

确定图像的熵和各向异性 Halcon entropy_gray 解析

1、图像的熵 1.1 介绍 图像熵&#xff08;image entropy&#xff09;是图像“繁忙”程度的估计值&#xff0c;它表示为图像灰度级集合的比特平均数&#xff0c;单位比特/像素&#xff0c;也描述了图像信源的平均信息量。熵指的是体系的混乱程度&#xff0c;对于图像而言&#…

什么是多因素身份验证(MFA)的安全性?

多因素身份验证(MFA)简介 什么是MFA 多因素身份验证(MFA)是一种安全过程&#xff0c;要求用户在授予对系统、应用程序或账户的访问权限之前提供两种或多种形式的验证。仅使用单个因素&#xff08;通常是用户名和密码&#xff09;保护资源会使它们容易受到泄露&#xff0c;添加…

特色3D打印机stm32迷你8轴双核心主板

我自己设计的3D打印机主板 1. 这是一块迷你的8轴主板, 主板尺寸为100mm*75mm, 使用一个8cm静音风扇散热足够了2. 这是一个带有保护的板子, 驱动上的gpio具有过压保护功能, 能够直接抗住24V的冲击, 意味着一个驱动炸了, 板子不烧, 并且其他的驱动也没事, 主板支持自动关机3. 8…

【LeetCode:3242. 设计相邻元素求和服务 + 模拟 + 哈希表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

GIF图片格式详解(二)

gif历史请参考上一篇《GIF图片格式详解&#xff08;一&#xff09;》&#xff0c;或直接访问博客地址&#xff1a;https://blog.whatsroot.xyz/2023/12/16/all-about-gif/ 文件格式概述 GIF格式采用调色板模式&#xff0c;即有一个颜色表&#xff0c;每种颜色可以使用RGB24格…

TypeScript 基础语法及使用

文章目录 1、概述2、快速使用3、常用类型4、基础类型5、联合类型6、函数类型7、对象类型 & 接口interface 1、概述 TypeScript&#xff08;简称 TS&#xff09;是JavaScript的超集&#xff08;继承了JS全部语法&#xff09;是微软开发的开源编程语言&#xff0c;可以在任何…

linux---vi和vim快捷键

linux---vi和vim快捷键 1、vi2、vim 1、vi 普通模式&#xff08;Normal Mode&#xff09;&#xff1a;i 进入插入模式&#xff08;Insert Mode&#xff09; x 删除光标所在位置的字符 dd 删除整行 yy 复制整行 p 粘贴 u 撤销 Ctrl r 重做 Shift G 快速移动光标到文件的最后…

深入了解决策树:机器学习中的经典算法

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

11月上海月赛题解报告(丙组)T1

棋盘距离 内存限制: 256 Mb时间限制: 1000 ms 题目描述 在一个棋盘上&#xff0c;有两颗棋子&#xff0c;一颗棋子在第 a 行第 b 列&#xff0c;另一个颗棋子在第 x 行第 y 列。 每一步&#xff0c;可以选择一个棋子沿行方向移动一个单位&#xff0c;或沿列方向移动一个单位&am…

基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【JAVA】Java基础—面向对象编程:类与对象-类的结构(属性、方法、构造方法)

属性用于描述对象的状态&#xff0c;通常以变量的形式存在。 方法定义了对象的行为&#xff0c;可以执行特定的操作或计算。 构造方法用于初始化对象&#xff0c;可以根据需要重载以支持不同的初始化方式。 1. 属性&#xff08;字段&#xff09; 属性是类的状态或特征&…

如何学习C++游戏开发

学习C游戏开发是一个涉及多个领域的复杂过程&#xff0c;包括编程、游戏设计、图形学等。 1. **学习C基础**&#xff1a; - 掌握C的基本语法和面向对象编程。 - 学习C标准库&#xff0c;特别是STL&#xff08;标准模板库&#xff09;。 2. **理解游戏开发概念**&#xf…

RabbitMQ 篇-深入了解 RabbitMQ 安装以及 SpringAMQP 的基础使用(声明队列和交换机、发送接收消息、配置 JSON 消息转化器)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 RabbitMQ 初识 1.1 RabbitMQ 安装 2.0 数据隔离 2.1 用户管理 2.2 virtual host 虚拟主机 3.0 SpringAMQP 3.1 RabbitMQ 配置 3.2 发送消息 3.3 接收消息 3.4 Wor…

基础归一化方法 数学理论及其matlab代码

归一化是一种简化计算的方式&#xff0c;即将有量纲的表达式&#xff0c;经过变换&#xff0c;化为无量纲的表达式&#xff0c;成为标量。在多种计算中都经常用到这种方法。以下是常见的基础归一化方法&#xff1a;Min-Max 归一化&#xff0c;Z-Score 归一化、小数定标归一化、…