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

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

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

image.png

今年大赛的四大亮点:

  • 黑客松大赛新增热身赛道,零基础起步,助您开启量子计算之旅,探索新世界。
  • 专家团队提供全方位服务:赛题解读和演练、课程培训、答疑等,帮助开发者快速成长。
  • 体验全新一代通用量子计算套件MindSpore Quantum和首发的量子模拟加速引擎QuPack。
  • 荣誉殿堂展播,黑客松决赛大奖、鼓励奖、推广奖等多重奖项可叠加。

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

1

参赛对象和赛程安排

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

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

image.png

2

热身赛答题指导

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

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

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

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

热身参考文档:

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

image.png

可以看到,在每道题目的上方都有两个链接**: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

第一题:

image.png

这道题考的是如何在线路中用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

扫码观看赛题讲解视频

image.png

第二题:

image.png

这道题考的是如何对量子线路进行压缩。在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

第三题:

image.png

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

reverse_qubits():

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

第四题:

image.png

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

image.png

首先我们需要将**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

第五题:

image.png

cke_27374.png

cke_30883.png

第六题:

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

https://hiq.huaweicloud.com/tutorial/classification\_of\_iris\_by\_qnn

image.png

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

image.png

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

第七题:

image.png

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

image.png

可以看到,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

第八题:

image.png

此题需要我们构造出哈密顿量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

第九题:

image.png

image.png

此题需要我们用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

3

大赛报名&邀请好友参赛

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

image.png

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

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