
Q#
文章平均质量分 92
MOVCat
游戏开发爱好者
展开
-
Q_01_01 什么是量子计算?
在过去的几年里出现了许多新的计算机技术,量子计算可以说是需要开发人员最大范式转变的技术。 量子计算机是在20世纪80年代Richard Feynman和Yuri Manin提出的。 量子计算背后的直觉源于经常被看作是物理学中最令人尴尬的事情之一:即使是简单的系统也无法建模,所以科学进步非常显着。 你看,量子力学是在1900年到1925年间发展起来的,它仍然是化学,凝聚态物理学和从计算机芯片到LED...翻译 2018-05-06 19:52:00 · 385 阅读 · 0 评论 -
Q_03_03_04 原始操作计数器
原始操作计数器 原子Primitive Operations Counter是量子计算机Trace Simulator的一部分 。 它计算在量子程序中调用的每个操作使用的原始执行次数。 Microsoft.Quantum.Primitive所有操作均以单量子位旋转,T门,单量子位Clifford门,CNOT门以及多量子位泡利可观测量的量度表示。 收集的统计数据汇总在操作调用图的边缘。 现在让我们...翻译 2018-05-07 13:13:20 · 221 阅读 · 0 评论 -
Q_03_03_05 宽度计数器
宽度计数器 Width Counter计算每个操作分配和借用的量子位数。 所有来自Microsoft.Quantum.Primitive命名空间的操作都是以单量子位旋转,T门,单量子位Clifford门,CNOT门以及多量子位Pauli可观测量的量度来表示的。 一些原始操作可以分配额外的量子位。 例如,乘法控制的X门或受控的T门。 让我们计算实现一个乘法控制的X门所分配的额外量子比特的数量: Q#...翻译 2018-05-07 13:13:33 · 211 阅读 · 0 评论 -
Q_04_01 什么是Q#?
什么是Q#? Q#是用于量子计算的可扩展的多范式特定领域编程语言。 Q#是一种量子编程语言,它可以用来描述如何在量子机器上执行指令。 可以定位的机器包括许多不同的抽象层次,从各种模拟器到实际的量子硬件。 Q#是多范式的,因为它支持功能和命令式编程风格。 Q#具有可扩展性,因为它允许编写程序到各种尺寸的机器,范围从仅有几百个量子位的小型机器到具有数百万个量子位的大型机器。 尽管大型物理机器可能...翻译 2018-05-07 13:13:55 · 2768 阅读 · 0 评论 -
Q_04_03 局部变量
局部变量 通过使用let关键字,可以将Q#中的任何类型的值分配给变量,以便在操作或函数内重用。 例如: Q# let measurementOperator = [PauliX; PauliZ; PauliZ; PauliX; PauliI]; 这将Pauli运算符的特定数组分配给称为measurementOperator变量。 小费 请注意,我们不需要明确指定新变量的类型,因为let语句右...翻译 2018-05-07 13:14:15 · 402 阅读 · 0 评论 -
Q_04_04 Q#类型模型
Q#类型模型 在讨论如何定义Q#操作和函数时,我们已经看到来自可调参数的输入和输出每个都与它们的类型一起表示。 在这一点上,退一步讨论这些类型会更有帮助。 特别是,我们注意到Q#是一种强类型语言,因此仔细使用这些类型可以帮助编译器在编译时提供有关Q#程序的强大保证。 警告 为了提供最强有力的保证,Q#中的类型之间的转换必须通过调用表示该转换的函数来显式进行。 作为Microsoft.Quant...翻译 2018-05-08 14:19:59 · 227 阅读 · 0 评论 -
Q_04_05 使用Qubits
使用Qubits 现在已经看到了Q#语言的各种不同部分,让我们深入了解它,并了解如何使用量子比特本身。 分配Qubits 首先,为了获得我们可以在Q#中使用的量子比特,我们在一个using块中分配量子比特: Q# using (register = Qubit[5]) { // Do stuff...} 以这种方式分配的任何量子位都以 状态开始; 在上面的例子中, register...翻译 2018-05-08 14:20:14 · 434 阅读 · 0 评论 -
Q_04_06 把它放在一起:传送
把它放在一起:传送 让我们回到在量子电路中定义的远距传感电路的例子。 下面显示的是一个实现远距传送的教科书量子电路,包括量子部分,测量和经典控制的校正操作。 我们现在可以将这个量子电路中的每个步骤转换为Q#。 首先,我们开始定义一个新的操作,同时执行两个量子位msg的远距传送: Q# operation Teleport(msg : Qubit, there : Qubit) : () { ...翻译 2018-05-08 14:20:28 · 162 阅读 · 2 评论 -
Q_04_07 进一步探索
现在您已经看到了如何在Q#中编写有趣的量子程序,本节将进一步介绍几个更高级的主题,这些主题将在未来发挥作用。 通用操作和功能 Tip 本节假定您对C#中的泛型,F#中的泛型 , C ++模板或类似的其他语言元编程方法有一定的基本了解。 我们可能希望定义的许多函数和操作实际上并不严重依赖于它们的输入类型,而只是通过其他函数或操作隐式地使用它们的类型。 例如,考虑许多功能语言通用的地图概念; 给...翻译 2018-05-08 14:20:39 · 211 阅读 · 0 评论 -
Q_04_08 测试和调试
测试和调试 与经典编程一样,能够检查量子程序如预期的那样工作并能够诊断不正确的量子程序是至关重要的。 在本节中,我们将介绍Q#提供的用于测试和调试量子程序的工具。 单元测试 测试传统程序的一种常见方法是编写称为单元测试的小程序,它在库中运行代码并将其输出与某些预期输出进行比较。 例如,我们可能想要确保Square(2)返回4 ,因为我们知道22=4 的先验 。 Q#支持为量子程序创建单元测...翻译 2018-05-08 14:20:50 · 195 阅读 · 0 评论 -
Q_06_01 Q#编程语言
Q#编程语言 介绍 量子计算的一个自然模型是将量子计算机视为协处理器,类似于用于GPU,FPGA和其他辅助处理器的处理器。 主要控制逻辑在古典“主机”计算机上运行古典代码。 在适当和必要时,主机程序可以调用在附属处理器上运行的子程序。 当子程序完成时,主程序可以访问子程序的结果。 在这个模型中,有三个计算级别: 读取输入数据的经典计算,设置量子计算,触发量子计算,处理计算结果并将结果呈现给用...翻译 2018-05-08 14:21:06 · 667 阅读 · 0 评论 -
Q_06_02 类型模型
类型模型 本节展示Q#类型模型并描述用于指定和处理类型的语法。 原始类型 Q#提供了几种基本类型,其中构造了所有其他类型: Int类型表示一个64位有符号(二进制补码)整数。 Double类型表示一个双精度浮点数。 Bool类型表示一个布尔值,无论是true还是false 。 Qubit类型表示量子比特或量子比特。 Qubit对用户是不透明的; 除了将它们传递给另一个操作之...翻译 2018-05-08 14:21:18 · 250 阅读 · 0 评论 -
Q_06_03 表达式
表达式 分组 给定任何表达式,括在圆括号中的相同表达式是相同类型的表达式。 例如, (7)是一个Int表达式, ([1;2;3])是Int类型数组的表达式, ((1,2))是类型为(Int, Int)的表达式。 在类型模型中描述的简单值和单元素元组之间的等价性消除了(6)作为一个组和(6)作为单元素元组之间的歧义。 符号 绑定或分配给类型'T值的符号的名称是'T类型的表达式。 例如,如果符...翻译 2018-05-08 14:21:28 · 249 阅读 · 0 评论 -
Q_06_04 语句和其他构造
语句和其他构造 注释 注释以两个正斜杠开始// ,并一直持续到行尾。 虽然表达式可以分成多行,但不支持表达式中间的行尾注释。 评论可能出现在Q#源文件的任何地方,包括语句无效的地方。 文档评论 以三个正斜杠开头的注释///在编译器出现在操作,函数或类型定义之前时会特别处理。 在这种情况下,它们的内容将作为定义的可调用或用户定义类型的文档,与其他.NET语言一样。 在///注释中,作为AP...翻译 2018-05-08 14:21:38 · 198 阅读 · 0 评论 -
Q_06_05 文件结构
文件结构 AQ#文件由一个或多个名称空间声明组成。 每个名称空间声明都包含用户定义类型,操作和函数的定义。 名称空间声明可以包含任何数量的每种类型的定义,但它必须至少包含一个定义。 用户定义的类型声明 Q#为用户声明新的用户定义类型提供了一种方式,如Q#类型模型部分中所述。 即使基础类型相同,用户定义的类型也是不同的。 特别是,如果底层类型相同,则两个用户定义类型之间不会自动转换。 用户...翻译 2018-05-13 00:03:59 · 231 阅读 · 0 评论 -
Q_02_02 Writing a Quantum Program
你会学到什么 如何在Visual Studio中设置量子解决方案和项目 Q#操作的组件 如何从C#调用Q#操作 如何构建和执行您的量子算法 在Q#中创建一个钟状态 现在您已经安装了Microsoft Quantum Development Kit,并了解了它的工作原理,我们来编写您的第一个量子应用程序。 我们将从最简单的程序开始,并将其构建起来以展示量子叠加和量子纠缠。 我们将从基础...翻译 2018-05-06 19:53:29 · 196 阅读 · 0 评论 -
Q_01_06 狄拉克符号
狄拉克符号 虽然列矢量符号在线性代数中无处不在,但量子计算通常很麻烦,特别是在处理多个量子比特时。 例如,当我们将 定义为一个向量时,它并不清楚 是一个行还是一个列向量。 因此,如果 和 是向量,那么同样不清楚 是否被定义,因为 和 的形状在上下文中可能不清楚。 除了关于矢量形状的模糊性之外,使用之前介绍的线性代数符号表达甚至简单的矢量可能非常麻烦。 例如,如果我们想描述一个n -qubit状态,...翻译 2018-05-06 19:52:53 · 5217 阅读 · 1 评论 -
Q_09 声明
本翻译本源于方便自己学习而翻译本系列部分使用机器翻译后经手工修改,仅供学习使用如有细节错误还请指出方便我修改原创 2018-05-13 00:04:28 · 189 阅读 · 0 评论 -
Q_01_02 向量和矩阵
对矢量和矩阵的一些熟悉对于理解量子计算至关重要。 我们在下面简要介绍一下,感兴趣的读者推荐阅读线性代数的标准参考文献,如Strang,G。(1993)。 线性代数导论(第3卷)。 威尔斯利,马萨诸塞州:韦尔斯利 - 剑桥出版社或线性代数等在线参考文献。 维度(或大小)n的列向量(或简单的向量)v是排列为列的n复数(v1,v2, ...,vn)的集合:矢量v的范数定义为 。 如果一个向量的范数...翻译 2018-05-06 19:52:15 · 285 阅读 · 0 评论 -
Q_01_03 高级矩阵概念
高级矩阵概念我们现在将我们对矩阵的操纵扩展到特征值,特征向量和指数,它们构成了我们需要描述和实现量子算法的基本工具。特征值和特征向量设M是一个方形矩阵,v是一个不是全零向量的向量(即所有入口等于0的向量)。 我们说v是M的一个特征向量 ,如果Mv=cv对于某些数字c 。 我们说c是对应于特征向量v的特征值。 一般来说,一个矩阵M可能将一个向量转换为任何其他向量,但是一个特征向量是特殊的,因为除了乘...翻译 2018-05-06 19:52:25 · 474 阅读 · 0 评论 -
Q_01_04 量子比特
量子比特正如比特是经典计算中信息的基本对象, 量子比特 (量子比特)是量子计算中信息的基本对象。 为了理解这种对应关系,我们来看一个最简单的例子:一个量子位。 代表一个量子比特 虽然一位或二进制数字可以具有0或1的值,但量子位可以具有这些值中的任何一个或者是0和1的量子叠加。 单个量子位的状态可以用单位范数的二维列向量来描述,也就是说,其条目的幅度平方必须总和为1。 这个向量称为量子态矢量,它拥有...翻译 2018-05-06 19:52:33 · 2099 阅读 · 0 评论 -
Q_07 词汇表
术语 定义 Adjoint 操作的复共轭转置。 对于实现单一运算符的操作,伴随点是操作的逆向操作。 Callable 操作和功能统称为可召集 。 Canon 在Q#中定义的操作和函数建立在前奏中定义的逻辑上。 对于目标机器,canon实现是不可知的。 Clifford group 占据Bloch球体八分之一的操作集。 这些包括: X , Y , Z , H和S Cont...翻译 2018-05-13 00:04:09 · 159 阅读 · 0 评论 -
Q_08 更多信息
更多信息 在本简要介绍中,我们已经回顾了量子计算机如何被看作是一种将信息作为单位向量存储在指数级大向量空间中的设备,并且了解量子门如何用于旋转信息,例如进行计算。 我们还讨论了用于描述量子运算的有用语言,如量子电路和狄拉克符号,它们允许开发人员快速理解复杂的量子态和子程序。 虽然这些工具是量子软件开发人员的基础,但他们决不会跨越量子计算机编程和算法设计已知的深度或广度。 由于量子计算仍然是一个迅...翻译 2018-05-13 00:04:20 · 325 阅读 · 0 评论 -
Q_01_05 多个量子比特
多个Qubits 虽然单量子比特门具有一些反直觉特征,例如在给定时间处于多于一种状态的能力,如果我们在量子计算机中所有的都是单量子比特门,那么我们将具有计算能力的设备即使是一台计算器,更不用说一台经典的超级计算机了。 量子计算的真正能力只有在我们增加量子比特时才变得可见。 这种能力的产生部分是因为量子态矢量随量子比特数呈指数增长的向量空间的维数。 这意味着虽然单个量子位可以进行简单模拟,但模拟一...翻译 2018-05-06 19:52:40 · 3772 阅读 · 0 评论 -
Q_02_01 安装和验证Q#开发环境
安装和验证Q#开发环境 必需的先决条件 Windows,MacOS或Linux的64位安装。 (Microsoft Quantum Development Kit已经在Ubuntu Linux下进行了测试,但可能适用于其他发行版)。 .NET Core SDK 2.0或更高版本。 可选的先决条件 .NET Core支持的开发环境: 对于Windows:我们推荐Visual Stu...翻译 2018-05-06 19:53:19 · 247 阅读 · 0 评论 -
Q_03_01 经典驱动和机器
你会学到什么 量子算法如何执行 量子模拟器包含在这个版本中 如何为您的量子算法编写C#驱动程序 Quantum开发工具包执行模型 在编写量子程序时 ,我们通过将QuantumSimulator对象传递给算法类的Run方法来执行量子算法。 QuantumSimulator类通过完全模拟量子状态向量来执行量子算法,它非常适合运行和测试Teleport 。 有关量子状态矢量的更多信息,请参...翻译 2018-05-06 19:53:36 · 140 阅读 · 0 评论 -
Q_03_02 Quantum开发套件全状态模拟器
Quantum开发套件全状态模拟器 量子开发套件提供了一个完整的量子模拟器,类似于微软研究院的LIQUi|> 。 这个模拟器可以用来执行和调试你的计算机上用Q#编写的量子算法。 这个量子模拟器通过QuantumSimulator类暴露出来。 要使用模拟器,只需创建该类的一个实例并将其传递给您想要执行的量子操作的Run方法以及其余参数: C# using (var sim = new...翻译 2018-05-06 19:53:43 · 267 阅读 · 0 评论 -
Q_03_03 量子轨迹模拟器
量子轨迹模拟器 微软量子计算机轨迹模拟器在没有实际模拟量子计算机状态的情况下执行量子程序。 由于这个原因,轨迹模拟器可以执行使用数千个量子位的量子程序。 它有两个主要用途: 调试作为量子程序一部分的经典代码。 估算在量子计算机上运行量子程序的给定实例所需的资源。 当必须执行测量时,跟踪模拟器依赖用户提供的附加信息。 有关详情,请参见章节提供测量结果的可能性 。 提供测量结果的可能性 量子...翻译 2018-05-07 13:12:27 · 245 阅读 · 0 评论 -
Q_03_03_01 深度计数器
深度计数器 Depth Counter是量子计算机Trace Simulator的一部分 。 它用于收集量子程序中调用的每个操作的深度计数。 Microsoft.Quantum.Primitive所有操作均以单量子位旋转,T门,单量子位Clifford门,CNOT门以及多量子位泡利可观测量的量度表示。 用户可以设置每个基本操作的深度。 默认情况下,除深度为1的T门以外,所有操作的深度均为0。这...翻译 2018-05-07 13:12:39 · 275 阅读 · 0 评论 -
Q_03_03_02 不同的输入检查器
不同的输入检查器 Distinct Inputs Checker是量子计算机Trace Simulator的一部分 。 它旨在检测代码中的潜在错误。 考虑下面的一段Q#代码来说明这个包检测到的问题: Q# operation DoBoth( q1 : Qubit, q2 : Qubit, op1 : (Qubit=>()), op2 : (Qubit=>()) ) : () { ...翻译 2018-05-07 13:12:48 · 161 阅读 · 0 评论 -
Q_03_03_03 无效的Qubits使用检查器
无效的Qubits使用检查器 Invalidated Qubits Use Checker是量子计算机Trace Simulator的一部分,用于检测代码中的潜在错误。 考虑下面的一段Q#代码来说明由Invalidated Qubits Use Checker检测到的问题。 Q# operation UseReleasedQubitTest () : () { body { ...翻译 2018-05-07 13:13:08 · 181 阅读 · 0 评论 -
Q_04_00 量子发展技术
量子发展技术 本节详细介绍用于在Q#中创建量子程序的核心概念,以及与来自传统.NET应用程序的那些程序进行交互。 本节假设量子计算概念中描述的那些量子计算概念的一些知识。...翻译 2018-05-07 13:13:45 · 193 阅读 · 0 评论