参赛攻略 | 2023 MindSpore量子计算黑客松全国大赛 热身赛通关秘籍

今年大赛的四大亮点:

  • 黑客松大赛新增热身赛道,零基础起步,助您开启量子计算之旅,探索新世界。

  • 专家团队提供全方位服务:赛题解读和演练、课程培训、答疑等,帮助开发者快速成长。

  • 体验全新一代通用量子计算套件MindSpore Quantum和首发的量子模拟加速引擎QuPack。

  • 荣誉殿堂展播,黑客松决赛大奖、鼓励奖、推广奖等多重奖项可叠加。

假期赛程,炎炎夏日,潜研希尔伯特空间。初赛截止7月23日,决胜在8月17日。

1 参赛对象和赛程安排

对量子计算感兴趣,具备基本Python编程能力的所有开发者,均可报名参加。

热身赛为量子计算基础学习和编程演练,初赛为量子应用算法开发,分量子化学模拟量子组合优化两个独立赛道,可单选或同时挑战,决赛包括量子应用算法开发和答辩。

热身赛答题指导

热身赛为量子计算基础学习和编程演练。

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

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

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

热身参考文档:

https://competition.huaweicloud.com/informations/mobile/1000041884/circumstance

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

MindQuantum教程:https://hiq.huaweicloud.com/tutorial/parameterized_quantum_circuit

MindQuantum API参考:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/index.html

第一题:

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

on方法的API文档:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.gates.html#mindquantum.core.gates.BasicGate.on

点击下方链接,观看6月14日赛题讲解视频

蔻享:https://m.koushare.com/lives/room/261155

扫码观看赛题讲解视频

第二题:

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

Circuit类:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.circuit.html#mindquantum.core.circuit.Circuit

compress():

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.circuit.html#mindquantum.core.circuit.Circuit.compress

第三题:

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

reverse_qubits():

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.circuit.html#mindquantum.core.circuit.Circuit.reverse_qubits

第四题:

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

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

mindquantum.core.circuit:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.circuit.html

add_suffix():

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.circuit.html#mindquantum.core.circuit.add_suffix

第五题:

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

TimeEvolution类属于mindquantum.core.operator模块,主要功能是根据哈密顿量H生成式子

对应的量子线路。它接受两个输入参数:第一个是哈密顿量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。

TimeEvolution:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.operators.html#mindquantum.core.operators.TimeEvolution

mindquantum.core.operator:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.operators.html

第六题:

第6-9题都来源于同一个算法实践教程:通过量子神经网络对鸢尾花进行分类,可以进入链接参考详细内容。

https://hiq.huaweicloud.com/tutorial/classification_of_iris_by_qnn
 

此题需要我们将图中的encoder线路搭建出来。代码中已经搭建好了H和RZ这前两层,需要我们搭建的是红框部分。

因此,我们要在12行的区域搭建CNOT+RZ+CNOT这样的线路结构。通过观察作用的比特位和循环计数器 j 的关系,可以这样实现:X.on(j + 1, j)是CNOT门,RZ(f'alpha{j+4}').on(j + 1)是含参RZ门,然后再作用一次CNOT门,这样就实现了encoder线路的搭建。

第七题:

此题需要我们将图中的ansatz线路搭建出来。代码中已经给出了HardwareEfficientAnsatz模块,我们可以基于此模块搭建图中Ansatz。

可以看到,Ansatz中需要RY旋转门,并且纠缠层用的CNOT门(受控X门),一共作用在4个比特上,需要3层线路。因此可以这样实现:

HardwareEfficientAnsatz(4, single_rot_gate_seq=[RY], entangle_gate=X, depth=3).circuit

这样就完成了Ansatz线路的搭建。

HardwareEfficientAnsatz:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.algorithm.nisq.html#mindquantum.algorithm.nisq.HardwareEfficientAnsatz

第八题:

此题需要我们构造出哈密顿量Z2,Z3。在MindQuantum中,Hamiltonian模块是一个包装器,可以将用Qubitoperator构造的一些泡利算符包装成哈密顿量。因此这题可以这样实现:

[Hamiltonian(QubitOperator(f'Z{i}')) for i in [2, 3]]

这样就完成了哈密顿量的构造。

Hamiltonian:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.operators.html#mindquantum.core.operators.Hamiltonian

Qubitoperator:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.core.operators.html#mindquantum.core.operators.QubitOperator

第九题:

此题需要我们用get_expectation_with_grad接口得到先前搭建的变分量子线路的梯度算子。get_expectation_with_grad接口是mindquantum.simulator.Simulator类的一个方法,接受哈密顿量和线路,返回一个梯度算子。这个梯度算子可以接受变分线路中参数的值,然后返回对应的期望值和梯度。

因此,我们可以将先前构造的哈密顿量和线路输入到get_expectation_with_grad接口中:

grad_ops = sim.get_expectation_with_grad(hams, circuit)

这样就生成了可以计算期望值和梯度的算子grad_ops。

get_expectation_with_grad:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.simulator.html#mindquantum.simulator.Simulator.get_expectation_with_grad

mindquantum.simulator.Simulator:

https://mindspore.cn/mindquantum/docs/zh-CN/r0.8/mindquantum.simulator.html#mindquantum.simulator.Simulator

大赛报名&邀请好友参赛

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

大赛报名 | 2023 MindSpore量子计算黑客松全国大赛正式开启,新增热身赛道,小白和达人一起来挑战

邀请好友赢好礼 | 2023MindSpore量子计算黑客松全国大赛邀请好友参赛通道正式开启,众多好礼等你来拿!

猜你喜欢

转载自blog.csdn.net/Kenji_Shinji/article/details/131418403