代码
第七届·2025 MindSpore量子计算黑客松全国大赛——热身赛通关攻略

第七届·2025 MindSpore量子计算黑客松全国大赛——热身赛通关攻略

第七届·2025 MindSpore量子计算黑客松全国大赛——热身赛通关攻略

无论您是初学小白,还是技术达人,参赛即有收获!报名截止日期5月20日,诚邀您报名参赛,勇攀量子世界的高峰,挑战黑客松年度总冠军,赢取属于你的荣誉和机遇!

大赛报名:https://developer.huaweicloud.com/competition/information/1300000041

# 01 答题准备

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

第一步:注册并完成华为云账号实名认证[1];

第二步:准备开发环境,详见本地安装使用MindSpore Quantum操作指导[2];

第三步:了解热身赛答题指南[3];

**热身赛题目文档:**https://developer.huaweicloud.com/competition/information/1300000041/html2

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

**直播预告:**我们将于2025年4月8日 周二晚上19:00准时直播《第七届·2025 MindSpore量子计算黑客松全国大赛——热身赛通关攻略直播宣讲》

# 02 热身赛答题指导 题目1:制备一个量子线路

题目描述:

制备一个量子线路,该线路包含三个量子比特(q0, q1, q2)。线路由以下三个门组成:

1、一个作用在q0比特上的H门。

2、一个X门,作用在q1比特上,受q0比特控制。

3、一个X门,作用在q2比特上,受q0和q1比特共同控制。

题目图示:(这里对应 1.ipynb 中显示的量子线路图)

解题思路:

这道题考查的是如何在MindSpore Quantum中构建基础的量子线路,特别是如何使用量子门的on方法来指定目标比特和控制比特。

  • on 方法:

MindSpore Quantum中几乎所有的量子门都继承自BasicGate类,并拥有on()方法。这个方法的第一个参数是目标比特的索引(一个整数),第二个可选参数是控制比特的索引(可以是一个整数,或者一个包含多个整数的列表)。

解题步骤:

1)对于作用在q0上的H门,目标比特是 0,没有控制比特,所以使用H.on(0)。

2)对于作用在q1上、受q0控制的X门,目标比特是1,控制比特是0,所以使用 X.on(1, 0)。

3)对于作用在q2上、受q0和q1控制的X门,目标比特是2,控制比特是0和1。当有多个控制比特时,需要将它们的索引放在一个列表里作为on方法的第二个参数,所以使用 X.on(2, [0, 1])。

将这三步添加到Circuit对象中即可完成线路的构建。

相关API文档:

Circuit 类: https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.10/core/circuit/mindquantum.core.circuit.Circuit.html

量子门模块(mindquantum.core.gates):

https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.10/core/mindquantum.core.gates.html#module-mindquantum.core.gates

BasicGate.on 方法:

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

题目2:为量子线路添加控制比特

题目描述:

给定一个已有的量子线路u1(在此例中是作用在q0和q1上的2比特量子傅里叶变换线路),要求使用q2作为控制比特,将其转换为一个受控量子线路u2。也就是说,u1中的每一个量子门操作,在u2中都将受到q2的控制。

题目图示:(这里对应 2.ipynb 中显示的量子线路图)

解题思路:

这道题主要考查 mindquantum.core.circuit.controlled() 函数的使用。这个函数非常方便,它可以将一个完整的量子线路(或者单个算符)整体添加上控制位。

  • controlled() 函数:

它接受一个参数circuit_fn:需要被控制的对象,可以是一个Circuit 实例(如此题中的 u1),也可以是可以生成量子线路的函数。

该函数返回一个新的函数,这个函数需要传入控制比特的索引,然后才会返回添加控制比特后的电路。

解题步骤:

1)题目已经给出了原始线路u1=qft(range(2))。

2)题目要求将q2添加为控制位。由于u1作用在q0和q1(索引为0和1),新添加的控制位q2的索引自然就是2。

3)先调用 controlled(u1) 获取一个可以添加控制位的函数,再传入控制位索引2生成目标线路u2。该函数会自动处理u1中的所有门,为它们添加上索引为2的控制位。

相关API文档:

controlled 数: https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.10/core/circuit/mindquantum.core.circuit.controlled.html

三、 题目3:量子线路的厄米共轭

解题思路:

这道题考查的是如何获取一个量子线路的厄米共轭形式。MindSpore Quantum提供了便捷的mindquantum.core.circuit.dagger()函数来完成这个任务。

  • dagger() 函数:

该函数接受一个 Circuit 对象(或其他支持厄米共轭操作的对象,如算符)作为输入,并返回一个新的 Circuit 对象,该对象即为输入线路的厄米共轭线路。它会自动处理门顺序的反转和每个门自身的厄米共轭替换。

解题步骤:

1)首先,根据“原始线路”图示,构建出circ对象。这需要依次添加H门、受控T门、S门和受控X (CNOT)门。

2)然后,直接调用 dagger(circ) 函数,将返回的厄米共轭线路赋值给dag_circ。

相关API文档:

dagger 数:

https://www.mindspore.cn/mindquantum/docs/zh-CN/r0.10/core/circuit/mindquantum.core.circuit.dagger.html

更多答题攻略,请点击下方链接查看:

https://h5.clewm.net/?url=qr61.cn%2FoxlATu%2Fqb38fRV&hasredirect=1

参考链接

[1]https://support.huaweicloud.com/usermanual-account/zh-cn\_topic\_0077914254.html

[2]https://www.hiascend.com/developer/blog/details/0272153713041042040

[3]https://www.hiascend.com/forum/thread-0201177851995961032-1-1.html