0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用个人电脑打造量子模拟器?

dKBf_eetop_1 来源:未知 作者:胡薇 2018-08-30 15:20 次阅读

1 量子计算机与量子编程

1.1 量子计算机

所谓量子计算即利用量子力学现象来进行计算,例如量子叠加和量子纠缠。量子计算机是一种执行量子计算的设备。

1.2 量子编程语言

量子编程是一种能够在量子计算机上运行的指令序列,称为量子程序。量子编程语言有助于使用高级结构来表达量子算法

1.3 量子编程语言种类

量子编程语言包括命令式量子编程语言、函数式量子编程语言和多范式量子编程语言三类。命令式量子编程语言有 QCL、Quantum pseudocode、Q|SI>、Q language、qGCL、QMASM;函数式量子编程语言有 QFC 和 QPL、QML、LIQUi|>、Quantum lambda calculi、Quipper;而下面我们要介绍的 Q# 就属于多范式量子编程语言。

2 搭建量子编程环境

量子计算机真正可以使用还有较长一段时间,目前还没有成熟的量子编程环境和编译工具,微软算是在该领域发力比较早的公司。在本月11日发布了一个量子开发工具包的免费预览版,本文将介绍使用微软量子开发工具包(Microsoft Quantum Development Kit,简称为 QDK)在 Visual Studio 中进行 Q# 量子编程。

2.1 量子开发工具包介绍

在今天9月下旬的 Ignite 大会上,微软将量子计算列为三大关键技术之一(另外两项为人工智能和虚拟现实),这三项关键技术将会改变我们所知道的科技行业。该公司还宣布计划在今年晚些时候发布量子计算机的新编程语言。

2017年即将结束,微软也如期推出了免费的 Quantum 开发套件预览版,该套件包括量子计算模拟器,Q# 编程语言(发音为“Q Sharp”)以及其他资源。

微软量子开发工具包预览版提供了一个完整的开发和仿真环境,其中包含了以下组件:Q# 语言和编译器、Q# 标准库、本地量子机模拟器、量子计算机跟踪模拟器、Visual Studio 扩展。

微软也正在制作一套全面的开发文档,以及库和示例程序,为人们提供所需要的背景知识,了解量子系统的独特之处,比如量子隐形传态。

2.1.1 Q# 量子编程语言

微软对Q#的描述称之为“一种用于表达量子算法领域专用编程语言”。它被用于编写在一个附属量子处理器上执行的子程序,在一个经典主机程序和计算机的控制下。

借助 Visual Studio 的强大功能,将来使用 Q# 进行量子编程操纵量子比特,就像使用 C#、F# 或 C++ 等语言开发传统经典应用程序一样简单。

2.1.2 量子模拟器

使用作为套件一部分的量子模拟器,您可以在笔记本电脑上模拟一个约30个逻辑量子位的量子计算机。所以,你不需要依赖于某个远程服务器。如果您愿意推出边界并模拟40多个逻辑量子位,则可以使用基于Azure的模拟器。

模拟器不仅可以运行量子程序,甚至可以在 Visual Studio 中测试和调试你的量子程序,比如设置断点、单步调试、变量跟踪等。

使用该开发工具包的优点在于,当我们插入量子硬件时,这个代码不需要改变。这点其实和我们使用 iOS 模拟器或 Android 模拟器开发移动应用程序是一样的,模拟器屏蔽了底层硬件实现的差异。

先决条件:1. 使用该量子开发工具包,需要使用最新版本的 Visual Studio 2017。2. 目前该模拟器只能运行在64位的 Windows 系统上。3. 需要使用支持高级向量扩展(AVX)指令集的 CPU

当你运行程序报类似System.DllNotFoundException:“无法加载 DLL“Microsoft.Quantum.Simulator.Runtime.dll”: 异常来自 HRESULT:0xC000001D。”的异常时,可能就是因为你的 CPU 不支持 AVX 指令集,请考虑换一台电脑吧!

(按照微软的说法,Intel 2011年第一季度以及之后出货的 CPU 支持 AVX 功能)。你可以使用CPU-Z之类的工具自行检测。如下图所示说明你的 CPU 支持 AVX 指令集:

2.2 下载并安装 Visual Studio

如果你还没有安装 Visual Studio 集成开发环境,请先下载Visual Studio 2017并进行安装。注意在安装时,在“工作负载”选项卡下选中“通用 Windows 平台开发”和“.NET 桌面开发”两个复选框。

2.3 下载并安装量子开发工具包

2.3.1 方式一:在 Visual Studio 市场下载

2.3.1.1 下载

在 Visual Studio Marketplace 市场下载量子开发工具包,它是一个 Visual Studio 扩展包,名称为 QsharpVSIX.vsix,非常小,只有1MB左右大小。该量子开发工具包为 Q# 编程语言开发量子算法提供支持。

如果你希望收到工具包或开发资源的更新消息,可以点击试用Quantum开发套件,在线填写一份表格。内容包括姓名、邮箱、电话和公司信息等,工具包或开发资源一旦有更新,会将最新消息发送到你的填写的邮箱。(注意:填写信息后在试用页面点击下载,国内网络是乎不会跳转到上述下载页面)。

2.3.1.2 安装

找到下载的 QsharpVSIX.vsix 文件双击运行,等待片刻即可安装完成。

2.3.2 方式二:Visual Studio 扩展和更新

如果知道扩展的名称或关键字,使用这种方式安装是最简单快捷的,只需要搜索相应关键字找到想要的扩展,点击即可下载和安装。

2.3.2.1 下载

打开 Visual Studio 2017,选择“工具(T)”->“扩展和更新(U)…”,在弹出的扩展和更新窗口中选择“联机”菜单,在右侧搜索框中输入 “Quantum” 并回车,点击 “Microsoft Quantum Development Kit” 中的“下载(D)”会弹出对话框进行下载。搜索下载 QDK 扩展如下图所示:

2.3.2.2 安装

等待下载完成后,关闭所有 Visual Studio 窗口后将自动执行开始安装。

2.4 验证安装

如果不出意外,安装成功后,新建项目时会看到多出3个模板,分别为:Q# Application、Q# Library 和 Q# Test Project。如下图所示:

同时在 Visual Studio 中,选择“帮助(H)”->“关于 Microsoft Visual Studio” 也可以看到 “Microsoft Quantum Development Kit - 0 and 1” 的字样。如下图所示:

3 第一个量子程序

你可以到 GitHub 上克隆微软的Microsoft Quantum Developer Kit Samples and Libraries示例项目,然后直接运行验证安装并查看效果。这里我们从新建项目开始,手动编写一些代码,对量子位(Qubit)执行一些操作,让量子位呈现叠加状态或两个量子进行纠缠,然后测试并输出结果。演示量子世界里最简单的量子纠缠--贝尔态。

3.1 创建解决方案和项目

打开 Visual Studio 2017,选择“文件(F)”->“新建(N)”->“项目(P)…”,在“已安装”->“Visual C#”,然后选择 Q# Application 模板。填写项目名称和解决方案名称,并选择一个存放项目的目录,然后点击“确定”按钮。

项目创建后 Visual Studio 会生成并打开两个文件,分别为 Operation.qs 和 Driver.cs。后缀为 .qs 的 Q# 文件是量子程序的代码文件,但其本身不能直接运行,需要使用 C# (也可以使用其他编程言来调用,如 F#、VB、C++ 或 Python 等)程序作为驱动进行调用。项目结构如下图所示:

3.2 编写 Q# 代码

为了方便说明,我们将 Operation.qs 重命名为 Bell.qs(该文件中会定义一个名为 BellTest 的操作,编译后在 C# 中使用BellTest调用时,IED 会有智能感知提示。虽然不改名称代码也可以正常运行,但在 C# 驱动程序中会有红线错误出现)。

在 Q# 中是通过定义“操作”来获取或设置量子位状态的,在定义操作之前,我们需要先引入操作量子位的原语Microsoft.Quantum.Primitive命名空间,该命名空间定义了很多基本的量子逻辑门操作,例如:M()、X()、Z()、H()、CNOT()等。

在 Bell.qs 中定义一个Set操作,其作用非常简单,判断给定的量子位状态是否与期望的结果一致。如果一致,则啥也不做;若不一致,就将其进行翻转过来。代码如下所示:

operation Set(desired: Result, q1: Qubit) : () { body { // 测量(M)q1 量子位的状态 let current = M(q1); if (desired != current) { // 如果与期望的不相等,将其进行翻转(X) X(q1); } } }

定义操作的方式非常简单,只需要使用operation关键字,紧跟着是操作的名称,名称后面用一个元组作为操作的参数,参数包含名称和类型。操作参数后面跟上一个冒号,然后用一个元组来表示操作的返回值,返回值只需要提供数据类型,不需要名称;如果没有返回值,则直接写上一对小括号即可。需要注意的是:具体的操作代码应当写在用大括号包裹的操作体body {}中。

下面定义一个操作BellTest来测试两个量子位的纠缠,将操作代码添加到 Bell.qs 文件的Set操作下方,代码如下所示:

operation BellTest() : (Result, Result) { body { // 用于保存量子位状态的可变局部变量 mutable s1 = Zero; mutable s2 = Zero; // 分配两个量子位 using (qubits = Qubit[2]) { // 将第一个量子位执行阿达马门实现状态叠加 H(qubits[0]); // 通过可控非门将两个量子进行纠缠 CNOT(qubits[0], qubits[1]); // 测量两个量子位的状态 set s1 = M(qubits[0]); set s2 = M(qubits[1]); // 释放量子位前需要将其重置0状态 Set(Zero, qubits[0]); Set(Zero, qubits[1]); } // 返回两个量子位的状态 return (s1, s2); } }

上述操作分配了两个量子位,并对第一个量子位执行阿达马门H操作,使其处于叠加状态,然后通过可控非门CNOT将两个量子进行纠缠,最后分别测量两个量子的状态并以元组方式返回。

需要注意的是:使用 using 分配量子位后,会在程序离开结束的大括号{时进行自动释放,在释放时需要先将量子位状态重置为 0 状态。

3.3 使用 C# 调用 Q# 操作

前面提到需要使用 C# 作为驱动程序来调用 Q# 程序,那它是怎么做到的呢?事实上 Visual Studio 在编译的时候,会把每个 xxx.qs 文件都会生成一个对应的 xxx.q.cs 文件,保存在项目下的 objqsharpsrc 目录下。

在 xxx.g.cs 文件中,会将每个操作生成对应的类,比如上述 Bell.qs 中的Set操作和BellTest操作,会生成对应的Set类和BellTest类。这两个类继承至Operation抽象类,每个类中都包含一个静态的异步 Run 方法。

在 C# 驱动程序中,首先定义一个量子模拟器,然后循环 10 次测试两个量子位纠缠后的状态,并输出到控制台。具体代码如下所示:

static void Main(string[] args) { using (var sim = new QuantumSimulator()) { for (int i = 0; i < 10; i++)        {            var (s1, s2) = BellTest.Run(sim).Result;            Console.WriteLine($"第{i}次:Q1状态 {s1,-5} Q2状态 {s2,-5}");        }    }    Console.WriteLine("按任意键继续...");    Console.ReadKey(); }

创建量子模拟器前需要导入Microsoft.Quantum.Simulation.Simulators命名空间,如果你的代码用到量子Result状态枚举,你还需要导入Microsoft.Quantum.Simulation.Core命名空间。

3.4 运行结果

从运行结果可以看出,不管运行多少次,第一个量子位的状态始终与第二个量子位的状态保持一致。运行结果如下图所示:

4 参考资料

Microsoft Quantum Development Kit

Setting up the Q# development environment | Microsoft Docs

Microsoft Quantum Developer Kit Samples and Libraries

The future is quantum: Microsoft releases free preview of Quantum Development Kit

Microsoft Quantum Development Kit: Introduction and step-by-step demo

Quantum Computing - Top 3 Microsoft Breakthroughs with Krysta Svore

Quantum mechanics

Quantum programming

Quantum algorithm

Quantum annealing

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3587

    浏览量

    93577
  • 量子计算机
    +关注

    关注

    4

    文章

    527

    浏览量

    25367

原文标题:量子计算机如何编程?教你用个人电脑打造量子模拟器

文章出处:【微信号:eetop-1,微信公众号:EETOP】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PC慢慢_解决个人电脑运行缓慢的问题

    PC慢慢(PCslow Doctor) V3.2_解决个人电脑运行缓慢的问题PC慢慢—主要用于解决个人电脑运行缓慢的一款免费扫描软件 ,是国内最流行的电脑优化加速软件。电脑运行缓慢的原
    发表于 04-13 12:13

    打造99%安全个人电脑

    [原创]打造99%安全个人电脑第一节软件介绍:大家好,我是:RaScal   今天给大家做的教程是:打造99%安全个人电脑第一节ps.此教程为语音
    发表于 11-14 16:58

    专访阿里巴巴量子实验室:最强量子电路模拟器“太章”到底强在哪?

    摘要: 刷爆朋友圈的最强量子电路模拟器到底强在哪呢?云栖社区采访了阿里巴巴量子实验室团队的施尧耘博士和陈建鑫博士来位大家一一解读。本月早些时候,阿里巴巴量子实验室成功研制当前世界最强的
    发表于 05-23 11:18

    个人电脑变网站服务解决方案

    个人电脑变网站服务解决方案 怎么回事,我的主页不能访问了?!唉,原来这个免费空间又暂停服务了。   到哪里给我们的网站找个
    发表于 02-01 11:58 967次阅读

    UMPC超移动个人电脑全面解析(上)

    UMPC超移动个人电脑全面解析(上)  UMPC全称Ultra-Mobile PC,超移动个人电脑,是英特尔与微软都极力推广的一种产品。
    发表于 02-06 17:13 1826次阅读

    个人电脑日常维护指南

    个人电脑日常维护指南 有经验的电脑用户都有这样的体会,一台PC经过格式化,新装上系统时,速度很快,但使用一段时间,性能就
    发表于 02-24 11:46 391次阅读

    LAN供电驱动!全球首台无电源个人电脑

    日本惠普(HP)宣布,将于7月下旬开始销售无需电源的显示一体型企业用个人电脑。该产品利用与IP电话相同的供电技术,通过1根LAN(局域网)线缆供电来驱动个人电脑和显示。这
    发表于 07-05 08:59 1983次阅读

    51量子模拟器成功研发,可揭示复杂的量子过程

    哈佛大学 Mikhail Lukin,Markus Greiner 教授领导的研究团队与麻省理工的 Vladan Vuletic 教授共同开发了一种特殊的量子计算机——量子模拟器。这一量子模拟器由激光捕获的超冷铷原子所编码,将这
    发表于 12-05 11:10 925次阅读

    华为继AI芯片后又发布了量子计算模拟器

    华为近年来在芯片方面取得的成就有目共睹,但华为并不仅仅满足于此。华为今日在HUAWEI CONNECT 2018发布量子计算模拟器HiQ云服务平台,包括量子计算模拟器与基于
    发表于 08-09 11:48 1512次阅读

    中科大研制出非局域量子模拟器,可实现超光速通讯

    中国科大郭光灿院士领导的中科院量子信息重点实验室在量子模拟器研究中取得重要进展,该实验室李传锋教授研究组研制出非局域量子模拟器模拟宇称-时间(Parity-time, PT)世界中的
    发表于 12-12 15:10 1128次阅读

    非局域量子模拟器或将能实现超光速通讯

    中国科大郭光灿院士领导的中科院量子信息重点实验室在量子模拟器研究中取得重要进展,该实验室李传锋教授研究组研制出非局域量子模拟器模拟宇称-时间世界中的超光速现象。
    发表于 03-06 11:50 731次阅读

    量子计算最新研究进展:在71个格点的超冷原子量子模拟器中求解施温格方程

    原标题:中国科大量子计算和模拟研究突破再登《自然》 在71个格点的超冷原子量子模拟器中求解施温格方程 示意图:规范场理论描述基本粒子之间的相互作用、产生和湮灭过程可以用晶格中超冷原子之间的相互作用
    的头像 发表于 11-20 15:48 1942次阅读

    阿里巴巴全面开源量子模拟器太章2.0

    今日,阿里巴巴发布阿里云量子开发平台(ACQDP),并全面开源量子模拟器“太章2.0”,支持从业人员设计量子硬件、测试量子算法,并探索在材料、分子发现、优化问题、机器学习等领域内的应用
    的头像 发表于 12-24 10:11 2243次阅读

    带操纵杆的量子模拟器

    电子发烧友网站提供《带操纵杆的量子模拟器.zip》资料免费下载
    发表于 11-21 10:53 0次下载
    带操纵杆的<b class='flag-5'>量子</b>位<b class='flag-5'>模拟器</b>

    带有Arduino的纠缠量子比特模拟器

    电子发烧友网站提供《带有Arduino的纠缠量子比特模拟器.zip》资料免费下载
    发表于 12-05 10:50 0次下载
    带有Arduino的纠缠<b class='flag-5'>量子</b>比特<b class='flag-5'>模拟器</b>