Microsoft 根据“软件招式”(Code Katas)这一理念,开源了一个称为“ Quantum Katas ”的项目。该项目意在帮助开发人员迈出使用 Q#语言实现量子计算的第一步。它提供了一组复杂度递增的编程练习,并可向学习者提供即刻反馈。
Quantum Katas 当前提供四种招式,每种招式涵盖一个特定的量子计算主题:
- 如何使用基本的量子计算逻辑门,包括使用单量子位(qubit)门和多量子位门。
- 准备叠加(Superposition)状态。叠加和纠缠(entanglement)是量子系统独具的特性。叠加允许在某个特定的量子位中同时存在多个逻辑状态。
- 在量子实验中,使用测量抽取经典信息(classical information)。测量步骤可能会使量子位脱离叠加态,这将会破坏量子系统的相干性。
- 编写实现经典函数和 Deutsch–Jozsa 算法的量子预言机(Oracle)。Deutsch–Jozsa 算法是一种比确定性经典算法的速度快指数级别的量子算法。
招式组织为一组复杂度递增的编程任务。每个任务使用测试驱动编程(TDD),关联到一个初始未通过的单元测试。在可用的参考资料帮助下,开发人员需要填充其中的代码,使测试得以通过。参考资料和参考解决方案一并提供在招式中。
招式中涵盖的问题来自于Microsoft 于去年九月首次推出的 Q#编程大赛。
下面给出两个例子。一个是几乎最简单的招式,翻转一个量子位的状态。另一个招式稍为复杂,根据当前状态更改量子位的状态。
////////////////////////////////////////////////////////////////// // 第一部分,单量子位逻辑门(Single-Qubit Gates) ////////////////////////////////////////////////////////////////// // 任务 1.1: 状态翻转:从 "|0>" 翻转为 "|1>",或是反之。 // 输入:一个量子位,状态为|ψ> = α|0> + β|1>. // 目标:将量子位状态更改为 α|1> + β|0>。 // 例子: // 如果量子位处于状态“|0>”,更改其状态为“|1>”。 // 如果量子位处于状态“|1>”,更改其状态为“|0>”。 // 注意:该操作是自伴的(self-adjoint),即再次应用同一操作,量子位将恢复原状态。 operation StateFlip (q : Qubit) : () { body { // Pauli X 门将更改状态“|0>”为状态“|1>”,或是反之。 // Type X(q); // 然后重新构建项目,并重运行测试。现在,测试 T11_StateFlip_Test 将会通过~ // …… } adjoint self; } // 任务 1.6*:更改相位(Phase change)。 // 输入: // 1. 一个状态为“β|0> + γ|1>”的量子位。 A qubit in state β|0⟩ + γ|1⟩. // 2. 以弧度表示的α角度,表示一个 Double。 // 目标:将量子位的状态更改如下: // 如果量子位的状态为“|0>”,不更改其状态; // 如果量子位的状态为“|1>”,更改其状态为“exp(i*alpha)|1>”; // 如果量子位处于叠加态,根据基矢量(basis vectors)的效果更改其状态。 operation PhaseChange (q : Qubit, alpha : Double) : () { body { // …… } adjoint auto; }
运行 Microsoft Quantum Katas 需安装 Quantum Development Kit 开发包。该开发包提供了 Windows 10、macOS 和 Linux 上的可用版本。每个招式位于独自的目录中,并关联一个 Visual Studio 解决方案。在 macOS 和 Linux 上,只要安装了.NET Core SDK 2.0 或以后的版本,开发人员就可以使用 Visual Studio Code 或命令行运行各个招式。
查看英文原文: Microsoft Quantum Katas Help Developers Discover Quantum Computing with Q#
评论