首页 > 其他分享 >第六届·2024 MindSpore 量子计算黑客松热身赛赛题解读

第六届·2024 MindSpore 量子计算黑客松热身赛赛题解读

时间:2024-05-11 09:09:54浏览次数:27  
标签:线路 TimeEvolution 哈密顿量 比特 可以 赛题 2024 MindSpore 量子

第六届·2024 MindSpore量子计算黑客松火热进行中。本次大赛由量子信息网络产业联盟主办,昇思MindSpore Quantum社区承办,多所高校和单位联合举办。开发者将全面体验全新一代通用量子计算框架MindSpore Quantum。

热身赛为量子计算基础学习和编程演练。完成热身赛的前100名选手将有机会获得定制文化衫1件,数量有限,不容错过。

第一步:关注MindQuantum代码仓,参见量子软件编程指南

第二步:注册并完成华为云账号实名认证

第三步:登录HiQ量子计算云平台进行在线答题。

热身赛参考文档:https://competition.huaweicloud.com/information/1000042022/noise

每道题目的上方都有两个链接:MindQuantum教程MindQuantum API参考。两个链接中都能找到题目的解答。小技巧:在MindQuantum API参考中搜索题目中的关键词,可以快速找到对应的内容。

热身赛通过攻略视频回放:https://www.koushare.com/live/details/33684

第一题

这道题考的是如何在线路中用on的方式添加量子门,在MindQuantum中,每个量子门都有on方法,比如X.on(0, 1)就意味着将X门作用在第0个比特上,并且受第1个比特控制。本题要求X门作用在第2个比特上,受第0个和第1个比特控制。因此可以用X.on(2, [0, 1])来表示。可以看到,on方法的第二个参数可以接受包含多个控制位的列表,因此可以方便的添加多控制门。详细用法可以参考 on方法的API文档

第二题

这道题考的是如何对量子线路进行压缩。在MindSpore Quantum中,Circuit类是量子线路模块,其中实现了很多操作量子线路的方法。其中就有一个方法可以压缩线路,接口名就叫作compress()。因此,这道题调用compress()方法就可以成功通过了。

第三题

这道题考的是线路翻转,也就是说,我们需要将线路的比特顺序上下颠倒。题中给出了一个很长的线路,但是我们并不需要关心线路的具体内容,因为Circuit类中有一个方法可以直接实现线路翻转的功能——reverse_qubits(),我们在代码中直接调用该方法就可以成功通过了。

第四题

这道题考的是如何给参数化量子线路中的变量名添加后缀,掌握这种技巧就可以很方便的搭建变分量子线路了。在mindquantum.core.circuit模块中,add_suffix()函数就可以实现添加后缀的功能。具体来说,它需要接受一个量子线路和一个后缀字符串作为输入参数,然后返回一个添加了后缀的新的量子线路。选手只需要将这个新的量子线路通过+=的方式添加到新构造的线路后面,就可以构造出多层的变分线路了。题中的代码如下:

首先我们需要将add_suffix()函数 import 进来。题目中需要搭建3层线路,因此可以用一个循环实现,在每次循环中都对 new_circ 用+=的方式添加add_suffix()函数返回的新线路,后缀字符串设置为循环计数器的值p,就可以成功通过题目了。

第五题

题目中给出了所有需要用到模块的链接,点击即可查看用法。其中,第三个门——RY受控门可以用RY门简单搭建出来:circ += RY(0.1).on(1, 0) 。QubitOperator可以构造泡利算子,Hamiltonian则是构造哈密顿量的类,因此题中的哈密顿量可以这样构建:ham = Hamiltonian(QubitOperator(“X0 Y1”)) 。最后,运行 sim.get_expectation(ham, circ) 就得到哈密顿量的期望值了。

第六题

mindquantum.algorithm.nisq 中可以看到各种已实现的Ansatz线路,只需要传入比特数和层数即可构造(题中ansatz为RYCascade),构造完成后,circ = RYCascade(n_qubits, depth).circuit 就得到ansatz线路了。

第七题

这题考的是Rn门的构造,以及如何求变分线路参数关于哈密顿量的期望值和梯度。Rn门有3个参数,因此可以像这样构造含参线路: circ += Rn(‘a’,’b’,’c’).on(0) ,哈密顿量的构造方法与第五题类似:ham = Hamiltonian(QubitOperator(“Z0”)) ,梯度算子需要调用模拟器的类方法来得到:grad_ops = sim.get_expectation_with_grad(ham, circ) ,得到的梯度算子可以传入线路参数的具体数值,并返回相应的期望值和梯度: f, g = grad_ops(np.array([alpha, beta, gamma])) ,由于题目需要求α的导数值,最后将得到的梯度值的第一个参数的实部返回即可:return np.real(g[0,0,0]) 。

第八题

此题中涉及的数学概念较多,但总的来说考的是TimeEvolution模块的使用,下面我们详细分析一下。

TimeEvolution类属于mindquantum.core.operator模块,主要功能是根据哈密顿量生成式子对应的量子线路。它接受两个输入参数:第一个是哈密顿量H,第二个是演化时间t。调用TimeEvolution().circuit方法将返回一个量子线路,对应于算符。在某些情况下,生成的线路只是理论值的一种近似,因此会出现精度问题,而这种近似可以通过增加近似阶数 n 来提高精度(具体近似公式如题中所述)。在本题中,我们需要用TimeEvolution生成 n 阶的近似线路,并与理论计算得到的精确值相比较。

可以看到,在题目代码中已经给出了哈密顿量H(第7行)和精确值 m1(第8行),并且在循环中给出了线路对应的矩阵m2(第14行),以及m1与m2比较的代码(第15行)。我们只需要补充第12行,即:用TimeEvolution生成 n 阶的近似线路。

在近似公式中可以发现,所谓n阶近似,就是将演化时间t除以n,变成,再将该式子作用 n次,即。这个式子可以这样构造:括号中的式子可以用TimeEvolution模块生成量子线路,然后将该线路重复n次,即可得到n阶近似线路。我们可以很简洁的实现整个过程:TimeEvolution(h, 1.0/n).circuit*n,一行简短的代码就构造出了n阶近似。

之后这个线路的矩阵m2会与理论解m1相比较,如果达到精度1e-2的话,则跳出循环,这样就得到了达到精度所需的最小的n。

第九题

本题考的是如何在线路中添加噪声。在MindQuantum中,通过ChannelAdder可以构建噪声模型。首先我们通过GateSelector设置需要添加噪声的门,然后用MixerAdder结合想要添加的噪声,例如:MixerAdder([GateSelector('x'),DepolarizingChannelAdder(0.05, 1)]) 。Y门和CNOT门以此类推,最后,通过SequentialAdder结合成一个噪声模型:

第十题

本题考虑的是运行真实量子硬件的情况,此时我们无法直接求得关于哈密顿量的期望值,只能通过处理多次采样获得的比特串来得到结果。 假设线路末态为

,则期望值为(因为)。在采样10000次后,得到的比特串分布应当近似于相应的系数,因此可以认为:a=res.data.get('00', 0)/shots,以此类推,最后将计算出的期望值返回即可。

大赛报名&邀请好友参赛

点击查看奖品和操作步骤:https://competition.huaweicloud.com/information/1000042022/invite

奖品图片仅做参考,以实际收到奖品为准,数量有限,先到先得!

大赛链接:https://competition.huaweicloud.com/information/1000042022/introduction

 

点击关注,第一时间了解华为云新鲜技术~

 

标签:线路,TimeEvolution,哈密顿量,比特,可以,赛题,2024,MindSpore,量子
From: https://www.cnblogs.com/huaweiyun/p/18185689

相关文章

  • 2024年5月10日第四十六篇
    今天写了好多sql语句,包括对外键的使用,多主键的设置CREATETABLEstudent(snoCHAR(8)PRIMARYKEYCOMMENT'学号',snameVARCHAR(20)COMMENT'姓名',sexCHAR(2)COMMENT'性别',sdeptVARCHAR(20)COMMENT'所在系');CREATETABLEcourse(cnoCHAR(......
  • # 2024_5_10 区间分配tric
    2024_5_10区间分配tric考虑这样一个问题,\(n\)个区间,给每个\([l,r]\)之间的点分配一个区间,要求每个区间可以分配给区间内的点,最多分配给一个点。考虑化简,对于两个同左端点的区间\([a,b],[a,c],b\leqc\),那么效果完全等价于\([a,b],[a+1,c]\)。经过这样的变化就不存在左端点相同......
  • 2024-05-10 闲话
    最近做了一些六级听力,收获比较大2023-06第一套tranquiladj.平静的,安宁的atranquilscene一篇祥和的景象spaciousadj.宽广的Thehousehasaspaciouskitchen.shabbyadj.破旧的shabbyoldjeansandT-shirt.solitaryadj.独自的,单独的Heledasolitarylife.......
  • THUSC & PKUSC & APIO 2024 游记
    \(\texttt{2024/5/10}=\texttt{Day0}。\)\(\texttt{Day0}\)早上八点的飞机,六点起来,七点之前必须到机场,也是非常准时的卡点了。一看,呵呵,果然是最后一个到的。我到的时候,有几个都过安检了,我还在那里不慌不忙的走。没什么波折,也是很快上飞机了。让我们观察一下各位同学在飞机......
  • 一道DP(2024ICPC武汉邀请赛A)-shaking trees
    ShakingTrees题外话这题易哥哥跟我说这题的时候,点明了这题是关于高度\(100\)的\(O(n^3)\)或者\(O(n^4)\)的dp,还有提出切割点的概念使序列化。dp是真的,序列化也是真的。只能说易哥哥我的神。不过其实切割点是根据树形态而变的,之前一直以为是不变的,歪了好久。不知道是我没get到......
  • THUSC & APIO 2024 游记
    前言我应该算年龄很小的,这次旅途我没很多追求,具体的签约我也没弄清楚是什么回事,只知道我就是去那边考个试,但是还是蛮兴奋的,因为上次去集训面基到了0人,看这次能不能撞见几个大佬。至于APIO,我翻了翻去年的APIO成绩,发现Cu好像并不是那么难。说不定我rp++了就Cu了。我以......
  • hdu2024递归水题
    importjava.util.Scanner;publicclasshdu2044{publicstaticvoidmain(String[]args){//TODO自动生成的方法存根//坑点long[]aa=newlong[51];aa[1]=1;aa[2]=2;for(inti=3;i<aa.length;......
  • 渝 2024.05.06 流(重庆八中谢自均)
    渝2024.05.06流(重庆八中谢自均)渝2024.05.06流(重庆八中谢自均)2CF1630FMakingItBipartite即选出来最多点,使得不存在一个点既是其他点的倍数又是其他点的因数。建图。\(i_0\)表示\(i\)为其他点的因数,\(i_1\)表示倍数。发现一个连边方式:\((i_0,i_1)\)连一条边(不能同......
  • 2024-05-10 js 常用数组方法
    push():向数组的末尾添加一个或多个元素,并返回新的长度。pop():删除并返回数组的最后一个元素。shift():删除并返回数组的第一个元素。unshift():向数组的开头添加一个或多个元素,并返回新的长度。splice():通过删除或替换现有元素或者添加新元素来修改数组,并以数组形式返回被修改......
  • 2024-05-10 BFC是什么
    BFC(BlockFormattingContext)即块级格式化上下文,是W3CCSS2.1规范中的一个概念。它指的是浏览器中创建的一个独立的渲染区域,并且拥有一套渲染规则,决定了其子元素如何定位,以及与其他元素的相互关系和作用。BFC是一个完全独立的空间(布局环境),让空间里的子元素不会影响到外面的布局,反......