第 5 章 基于量子汇编指令的量子线路设计 本章核心知识点: □量子汇编指令语言OpenQASM □OpenQASM 量子线路的设计与调试 □量子逻辑门 □量子加法器 □量子相位反冲 5.量子汇编指令语言OpeQASM 1n 5.1 OpnQASM 语言基本语句 1.e 不同开发平台中的量子线路编辑器或模拟器支持的 OpenQASM 语句格式会稍有区别。本书以QuantumComposer支 持的Op0为例,书中所有OpnQASM 代码实例均可在 enQASM2.eQuantumComposer中测试及运行。 表5.1列出了OpenQASM 的基本语句及其简要说明。 表5.QASM 语言基本语句(0) 1 OpenVer2. 语句说明 OPENQASM2.0; include"filename"; qregqregname[size]; 表明本文件符合OpenQASM2.0版本格式 打开并解析另一个源文件 声明一个量子寄存器,size为量子比特个数。 例:qregq[5]; qregname[i] 引用一个量子寄存器。例:q[0] 第5章基于量子汇编指令的量子线路设计79 续表 语句说明 cregcregname[size]; 声明一个经典寄存器,size为经典比特个数。 例:cregc[5]; cregname[i] 引用一个经典寄存器。例:c[0] U(theta,phi,lambda)qubit|qreg;U门。例:U(pi/2,pi/3,0)q[0]; CXqubit|qreg,qubit|qreg; CNOT门。例:CXq[0],q[1]; measurequbit|qreg->bit|creg; 在计算基下测量。例:measureq->c; resetqubit|qreg; 将量子比特或量子寄存器重置为|0 >。 例:resetq[0]; gatename(params)qargs; 引用一个酉门。例:crz(pi/2)q[1],q[0]; if(creg==int)qop; 条件满足时,执行量子操作。例:if(c==5)CX q[0],q[1]; barierqargs; barier操作(qargs是以逗号分隔的量子比特或量 子寄存器列表)。例:barierq[0],q[1]; //commenttext 注释文本 单量子比特门和多量子比特门的OpenQASM语句请参见表3.1。 1和表4. OpenQASM具有简明易读的语法。 ①每条语句以分号结束,大小写敏感,多余的空格会被忽略。 ②第一条语句必须是“OPENQASMM.m;”,其中,M为主版本号,m为 次版本号。当前版本的QuantumComposer支持的OpenQASM的版本号为 Verin2.故第一条语句必须为“0。 so0, OPENQASM2.” 接下来是ie语句“;”。ie语句的用法与 ③ ncludinclude"filename"ncludC语言类似,其功能是将头文件插入该命令所在的位置,从而把头文件和当前 源文件连接成一个源文件。Quatompsr中必须有“nlde"qlb1. inc";”语句。 numCoeicuei ④接下来声明量子寄存器和经典寄存器。量子寄存器中的各量子比特 初始化为|0>;经典寄存器中的各比特初始化为0。各类标识符必须以小写字 母开头,合法字符为西文半角的数字、字母和下画线。 ⑤添加量子门,设计量子线路。 ⑥注释以“//”开头。 80 量子程序设计基础 5.1.2 OpenQASM 量子线路编程实例 【例5.1】 请给出如下OpenQASM 代码对应的量子线路图。 CH5-1.qasm:Bell 态观测 //OpenQASM 文件 OPENQASM 2.0; //指明OpenQASM 的版本号 include "qelib1.inc"; //包含头文件qelib1.inc qreg q[2]; //声明一个名为q 的量子寄存器,带2 个量子比特 creg c[2]; //声明一个名为c 的经典寄存器,带2 个经典比特 h q[0]; //在量子比特q[0]上添加一个H 门 cx q[0],q[1]; //CX 门,控制量子比特为q[0],目标量子比特为q[1] measure q[0] -> c[0]; //对量子比特q[0]进行测量,对应经典比特为c[0] measure q[1] -> c[1]; //对量子比特q[1]进行测量,对应经典比特为c[1] 本例程对应的量子线路如图5.1所示,其实现了Bell态的制备与测量(详 见5.2.1节)。 图5.1 Bell态的制备与测量 【例5.2】 请给出如图5.2所示的量子线路的OpenQASM 代码。 图5.2 DJ算法的量子线路(n=2) 第5章 基于量子汇编指令的量子线路设计 81 解:图5.2所示的量子线路为Deutsch-Jozsa算法(简称DJ算法,详见7.1 节)的一种实现。该线路声明了一个3量子比特的量子寄存器和一个3比特 的经典寄存器,对应的OpenQASM 代码如下所示。 CH5-2.qasm:DJ 算法(n=2) OPENQASM 2.0; include "qelib1.inc"; qreg q[3]; creg c[3]; h q[0]; h q[1]; x q[2]; h q[2]; ccx q[0],q[1],q[2]; cx q[1],q[2]; cx q[0],q[2]; h q[0]; h q[1]; measure q[0]->c[0]; measure q[1]->c[1]; 5.1.3 图形化量子线路开发工具QuantumComposer QuantumComposer的用户界面如图5.3所示。 图5.3 QuantumComposer的用户界面 82 量子程序设计基础 表5.2给出了用户界面各功能区的简要说明(注:随着版本的更新,界面 会有所调整,但其功能结构基本一致)。 表5.2 QuantumComposer用户界面功能区说明 标识号功能区名称说 明 ① 菜单栏单步调试(inspect)和视图选择(view)等功能 ② 线路运行参数设置指定线路执行的后端(backend)和运行次数(shots)等 ③ 线路名称设置命名量子线路并以同名的OpenQASM 文件存储 ④ OpenQASM 代码编辑器编辑OpenQASM 代码,生成相应的量子线路 ⑤ 量子门线路符号列表 拖曳线路符号以在量子线路中插入量子门;可增 加自定义门 ⑥ 量子线路图形化编辑器通过线路符号创建量子线路;编辑、修改量子线路 ⑦ 应用切换 (ApplicationSwitcher) 在Quantum Composer、Quantum Lab、Services (后台实体机和模拟器列表等)、Jobs(工作任务) 和Documentation(各类文档)等之间进行切换 ⑧ 实时可视化窗口 (LiveVisualizations) 以多视图的形式展示量子线路的实时结果 5.2 OpenQASM 量子线路设计与调试 5.2.1 Bell态观测实验 Bell态(Bellstates)指双量子比特系统的四种最大纠缠态,式(5.1)给出 了这四种态,它得名于贝尔不等式的提出者———爱尔兰物理学家约翰·斯图 尔特·贝尔。 |Φ+ >=(|00>+|11>)/2 |Φ- >=(|00>-|11>)/2 |Ψ+ >=(|01>+|10>)/2 |Ψ- >=(|01>-|10>)/2 ì . í .... ... . (5.1) 【实验内容】 ① 基于自定义门nG0构建如图5.4所示的Bell态观测量子线路(5.2.2节)。 第5章 基于量子汇编指令的量子线路设计 83 图5.4 基于nG0门的Bell态观测量子线路 ② 在模拟器上运行该量子线路,对结果做可视化分析(5.2.3节)。 ③ 在远程实体机上运行该量子线路,对结果做可视化分析(5.2.4节)。 ④ 比较以上两步的运行结果。请思考分析:为何用两种不同的运行环 境执行同一量子线路时执行结果会有差异? 本节后续内容将以该实验为例介绍QuantumComposer量子线路的开发 流程。 QuantumComposer量子线路的开发流程主要包括以下三个步骤: ① 量子线路的创建(5.2.2节和5.2.3节); ② 选择指定后端执行量子线路(模拟器作为后端见5.2.6节;后台真实量 子计算机作为后端见5.2.7节); ③ 结果的可视化与分析(5.2.5节)。 QuantumComposer还提供了对量子线路的单步调试功能(5.2.4节)。 5.2.2 OpenQASM 自定义门的构建 除了代码编辑器提供的基本门汇编指令以外,还可将一条或多条量子汇 编指令封装成一个新的门。自定义门用来实现一个可以重复使用的独立功 能,类似于汇编语言或高级语言中函数的用法。OpenQASM 使用gate指令 定义一个新的门,其指令格式为 gate gatename(params) qargs; 其中,gate为指令助记符,gatename是新定义的门的名称;params是自定义 门需要指明的参数,为可选项;qargs是自定义门作用的量子比特名称的形式 参数列表。 【例5.3】 请将如图5.5所示的量子线路构造为一个自定义门nG0。 解:实现自定义门nG0的OpenQASM 代码如下。 84 量子程序设计基础 CH5-3.qasm:自定义门nG0 OPENQASM 2.0; include "qelib1.inc"; gate nG0 a, b { h a; //对量子比特a 进行H 门操作 cx a, b; //CNOT 门,a 为控制量子比特,b 为目标量子比特 } 以上代码新定义了一个名为nG0的量子门,形式参数a和b表示自定义 门作用的量子比特。 在代码编辑器中输入以上代码后,量子线路图形编辑器Quantum Composer的量子门线路符号列表中将新增如图5.6所示的nG0门的线路 符号。 图5.5 自定义门nG0的量子线路 图5.6 自定义门nG0的线路符号 5.2.3 量子线路图的输入与编辑 1.图形化用户界面方式 按照图5.4所示的Bell态观测量子线路,可在QuantumComposer的量 子线路图形化编辑器(图5.3的区域⑥)中录入该线路。选中量子线路中的某 一量子门线路符号,右击再选择“编辑”选项,即可调整该量子门的外联方式 和内部参数等。 2.OpenQASM 代码文本方式 在OpenQASM 代码编辑器(图5.3的区域④)中录入如下代码以生成量 子线路。 第5章 基于量子汇编指令的量子线路设计 85 #CH5-4.qasm:基于自定义门的Bell 态观测 OPENQASM 2.0; include "qelib1.inc"; gate nG0 a, b { h a; cx a, b; }q reg q[2]; creg c[2]; x q[0]; //初态设定,测试中根据需要修改 x q[1]; //初态设定,测试中根据需要修改 barrier q[0],q[1]; nG0 q[0], q[1]; barrier q[0],q[1]; measure q[0] -> c[0]; measure q[1] -> c[1]; 自定义门nG0的a映射在量子比特q0 上,b映射在量子比特q1 上。q1 为高位,q0 为低位,量子态记为|q1q0>。当初态为|11>时,QuantumComposer 中实测的末态与|Ψ- >相差一个整体全局相位因子-1。改变初态设定,利用 构造的自定义门nG0可得到式(5.1)所列的四种态,即 |00>→|Φ+ >,|01>→|Φ- > |10>→|Ψ+ >,|11>→|Ψ- > 特别提醒:对于QuantumComposer中的量子门线路符号、量子寄存器 或量子线路的n 个量子比特q0,q1,…,qn-1,其量子态记为|qn-1…q0>,其中 qn-1为高位,q0 为低位。 5.2.4 量子线路的单步调试 对量子线路进行单步调试依赖于模拟器。单步调试功能用来逐步查看 量子态的演化过程。 在菜单栏(图5.3的区域①)选择Inspect选项可对当前显示的量子线路 进行单步调试。图5.7所示为单步调试的用户界面,加载的量子线路为例5.1 中的CH5-1.qasm。单击控制面板上的左右箭头符号可令量子线路上的蓝色 框左右移动。蓝色框标示了当前选中的量子门,实时可视化分析工具将显示 当前量子门作用后的线路状态,其中的各类视图也会随之发生变化。 86量子程序设计基础 图5.7单步调试界面 5.2.5结果实时可视化与分析 实时可视化区域(LiveVisualizations)出现在QuantumComposer工作 区底部的窗口中(图5.3的区域⑧),它显示的是当前量子线路的实时状态,提 供了状态向量视图(StatevectorView)、测量概率视图(ProbabilitiesView)和 Q球视图(Q-sphereView)等结果可视化分析工具。在菜单栏的View选项 中可选择或取消相关的视图。 在真机上运行时,实时可视化分析工具不起作用。下面介绍Bel 态观测量 子线路在ibmq_qasm_simulator模拟器上运行后的实时可视化分析视图。实时 .e= 结果反映的是图57所示的Bl 线路。该线路的初态为| 0>,生成纠缠态|Φ+> (|00>+|11>)/2。单步调试时,断点位于CNOT门上的量子线路的状态。 1.状态向量视图 图5.tatevector视图中的量子态及其振幅的直方图。横轴为计 8所示为S 算基态,纵轴表示各计算基态的振幅值。该图表明:结果中仅出现了|00>和 707 。|11>,各自的振幅约为0.8所示的直方图的下方。 图5.9为状态向量视图中的另一部分,位于图5. 左图用色轮的颜色表示相位角,与图5.用颜色区分 8所示的直方图配合使用, 直方图各状态的相位角。对照色轮,可知图5.和 8所示的直方图中的|00> |11>的相位角均为0。图5.e态|Φ+>的状态向量为 9的右图中显示的Bl [0.707+0j,0+0j,0.j]。 j,0+0707+0 格式说明:IBMQuantumComposer的界面或QuantumLab代码运行 结果中输出的量子态状态向量会将各分量的格式显示为a+bj(a,b为实数), 其表示复数a+bi(a,b为实数);下文中,在用数学原理描述量子态状态向量 时,其分量采用a+bi(a,b为实数)的格式,但在说明软件界面输出或代码运 第5章 基于量子汇编指令的量子线路设计 87 图5.8 量子态及其对应的幅值直方图 图5.9 色轮与状态向量 行结果时,将直接采用系统输出结果,以保证书中内容与软件界面的显示或 代码输出的运行结果一致,从而便于读者验证代码、调试与运行结果。 当前版本的QuantumComposer中的状态向量视图支持显示的最大量子 比特数为6。 2.测量概率视图 图5.10所示的测量概率视图为量子态及其测量概率的直方图。纵轴为 计算基态,横轴表示各计算基态下测量得到的概率。根据窗口的大小,横轴 与纵轴会变换位置,概率值等于振幅值的平方。该图表明:结果中仅出现了 |00>和|11>,各自的概率约为50%。 对|Φ+ >=(|00>+|11>)/2重复进行测量,计算基态|00>和|11>的测量 概率分别为 p00=|<00|ψ>|2=|1/2|2=1/2=50% p11=|<11|ψ>|2=|1/2|2=1/2=50% { (5.2) 当前版本的QuantumComposer中的测量概率视图支持显示的最大量子 比特数为8。