《使用量子计算机进行开发》一书

图片您好,habrozhiteli!量子计算不仅会改变现实!一个崭新的产业正在我们眼前诞生,以创造一个不可想象的过去并贬低过去的某些成就。本书讨论了量子计算机最重要的组成部分:量子位,逻辑门和量子电路,并解释了量子体系结构与传统结构之间的区别。您可以使用IBM Q Experience在模拟器和真实的量子设备上免费试用它们。

您将学习如何使用QISKit(用于处理量子信息的软件工具),Python SDK和其他API(尤其是QASM)执行量子计算。

最后,您将学习实现纠缠,随机数生成,线性搜索,整数分解等的现代量子算法,我们将介绍描述纠缠的Bell状态,Grover线性搜索算法,用于整数分解的Shor算法,优化算法等。 。

您将学习:•使用Q Experience REST API远程运行程序。•编写与传统计算机的模拟软件相比性能最高的算法。•在Node.js上创建REST客户端以进行身份​​验证,侦听远程设备,请求有关量子处理器的信息,在云中进行远程控制和运行实验。•使用量子隐形传态。使用经典计算和发送方与接收方之间的量子纠缠,可以传输量子位的精确状态(量子信息)。•编程并播放海战的量子版本。•使用Q Experience Composer创建可视程序/实验。

摘抄。博弈论:借助量子力学,优势始终在您身边


本章探讨了两个游戏难题,这些难题证明了量子算法相对于经典算法的惊人优势。

  • 假硬币之谜。这是数学家E.D. Shell在1945年提出的经典称重问题。在其中,使用实验室秤进行有限的称量,您需要确定一种硬币的重量不同于其他硬币的重量(错误)。
  • Mermin的魔方-Perez。这是量子伪心灵感应的例子,也就是玩家只有在游戏过程中阅读彼此的想法时才能取得结果的能力。

在这两种情况下,量子计算都赋予玩家伪魔术的能力,就像他们一直在作弊一样。让我们看看这是怎么发生的。

假硬币之谜


玩家有八个硬币和一个实验室秤。其中一枚硬币是假的,因此比其他硬币轻。你能找到她吗?让我们简要地看一下图5所示的解决方案。7.1。

1.将硬币1-3放在秤的左侧,将4-6放在右侧。放置硬币7和8。2

.如果秤的右侧超过了称重范围,则在硬币1-3(左侧)中为假-。请记住,假硬币比较容易。然后取出硬币3,将硬币1放在秤的左侧,将硬币2放在右侧。

  • 如果右碗胜过,则为假-投币1。
  • 如果左碗重,则假一枚-硬币2。
  • 如果余额平衡,则为假-投币3。

3.如果秤的左侧超过了重量,则假硬币-在硬币4–6中。取出硬币6,将硬币4放在秤的左侧,将硬币5放在右侧。

  • 如果右碗胜过,则为假-硬币4。
  • 如果左碗重,则假一枚-硬币5。
  • 如果余额平衡,则为false-投币6。

4.如果天平处于平衡状态,则假币为7或8。将硬币7放在秤的左侧,将硬币8放在右侧,然后称重。

  • 如果右碗胜过,则为假-硬币7。
  • 如果左碗重,则假币8。

可以不考虑硬币总数N和伪造硬币数目k来实现经典算法。通常,广义伪硬币问题的时间复杂度为O(k log(N / k))。

注意
已经证明,使用经典计算机上的实验室天平,至少需要两次尝试才能检测到一枚假币。


图片

量子解决方案


信不信由你,有一种量子算法可以在一个量子称量中找到假硬币,而不管硬币的数量N!一般而言,对于任何数量的假币k,无论N是多少,这种算法的时间复杂度为图片

注意:
与经典硬币相比,用于确定假硬币量子算法是四度加速度的一个示例。

因此,在图。7.2显示了量子算法在解决伪造的硬币之谜方面优于经典的算法。让我们更详细地考虑它。一种伪造硬币的量子搜索算法图片可分为三个阶段:请求量子权重,创建量子权重和定义伪造币。

图片

步骤1.请求量子权重


量子算法将查询叠加的量子权重。为此,请使用二进制查询字符串在秤上编码硬币。例如,查询字符串11101111表示所有硬币都在秤上,但索引为3的硬币除外。如果没有伪造硬币,则秤是平衡的,否则倾斜。下表对此进行了说明。

图片

动作算法如下。

1.使用两个量子寄存器查询量子权重,其中第一个寄存器用于查询字符串,第二个寄存器用于结果。

2.用偶数个单位准备所有二进制查询字符串的叠加。

3.要获得偶数个状态的叠加,请在基本状态下执行Hadamard变换,并检查| x |的汉明权重。甚至。可以证明| x |的汉明权重。即使且仅当x1 x 2 x ... xN = 0时才为。

注意
字符串的汉明重量(hw)是所用字母的空字符以外的字符数。例如,hw(11101)= 4,hw(11101000)= 4,hw(000000)= 0。

4.最后,测量第二个寄存器。如果观察到某种情况图片,则第一个寄存器是所有所需二进制查询字符串的叠加。如果收到图片,则需要重复该过程直到观察到某种情况为止,图片

请注意,每次重复,成功的机率恰好为0.5。但是,经过几次重复,我们可以获得所需的状态叠加。清单7.1展示了用于查询权重的量子程序的实现,相应的图形如图7所示。7.3。

注意
为了简化识别,确定假硬币的程序分为清单7.1-7.3。尽管我希望您可以结合使用这些清单来运行该程序,但是完整的代码位于file的源代码中Workspace\Ch07\p_counterfeitcoin.py

清单7.1 量子权重查询脚本

# -------    
Q_program = QuantumProgram()
Q_program.set_api(Qconfig.APItoken, Qconfig.config["url"])

#  numberOfCoins +1 / 
#      
#  
qr = Q_program.create_quantum_register("qr", numberOfCoins + 1)

#     qr
cr = Q_program.create_classical_register("cr", numberOfCoins + 1)

circuitName = "QueryStateCircuit"
circuit = Q_program.create_circuit(circuitName, [qr], [cr])

N = numberOfCoins

#       N
for i in range(N):
     circuit.h(qr[i])

#  XOR(x)     CNOT  qr[0]
#  qr[N–1]     qr[N]
for i in range(N):
     circuit.cx(qr[i], qr[N])

#  qr[N]     cr[N]. ,
#  cr[N]  ,     
circuit.measure(qr[N], cr[N])

#     ,     
# cr[0]...cr[N],     |1>,
#   |0> - |1>  qr[N]
circuit.x(qr[N]).c_if(cr, 0)
circuit.h(qr[N]).c_if(cr, 0)

#      cr[N]
for i in range(N):
     circuit.h(qr[i]).c_if(cr, 2**N)

在图。7.3是包含8个硬币和1个具有索引6的伪造品的伪造币难题的完整轮廓。它显示了此处针对IBM Q Experience平台描述的所有步骤。算法的第二阶段是权重的创建。

图片

步骤2.创建量子权重


在上一节中,我们创建了所有二进制查询字符串的叠加,汉明权重为偶数。在这一步,创建一个量子平衡器,设置假硬币的位置。因此,如果k是假币相对于二进制字符串的位置,图片则量子尺度将返回:

图片

这是使用CNOT门实现的,其中xk作为控制qubit,第二个寄存器作为目标(请参见清单7.2)。

清单7.2。创建量子权重

#-----   
k = indexOfFalseCoin

#       
# (  cr,  )
circuit.cx(qr[k], qr[N]).c_if(cr, 0)

步骤3.识别假硬币


要在对权重查询后显示假硬币,请将Hadamard变换应用于二进制查询字符串。假设我们正在查询具有汉明权重均等的二进制字符串的量子权重,因此,在Hadamard变换之后以计算为基础进行了测量之后,我们可以确定一个伪造的硬币,因为只有它的标签与大多数标签不同(参见清单7.3)。

清单7.3。假币定义

# ---   
#     qr[0] ... qr[N-1]
for i in range(N):
     circuit.h(qr[i]).c_if(cr, 0)

#  qr[0] ... qr[N–1]
for i in range(N):
     circuit.measure(qr[i], cr[i])

results = Q_program.execute([circuitName], backend=backend, shots=shots)
answer = results.get_counts(circuitName)

print("Device " + backend + " counts " + str(answer))

#     
for key in answer.keys():
     normalFlag, _ = Counter(key[1:]).most_common(1)[0]

for i in range(2,len(key)):
     if key[i] != normalFlag:
          print("False coin index is: ", len(key) - i - 1)

当最左边的位为0时,可以通过找到一个权重与其他权重不同的伪币指数来确定。例如,在N = 8且假币指数为6的情况下,结果应为010111111或001000000。请注意,由于我们使用cr [N]来控制权重请求前后的操作:

  • 如果最左边的位是0,则我们已经成功识别了假币;
  • 如果最左边的位是1,则我们没有获得所需的叠加,必须再次重复该过程。

在远程IBM Q Experience模拟器上运行该程序时,您将获得显示在该书的源代码中的结果Workspace\Ch07\p_counterfeitcoin.py请注意,我使用Windows: 如果您无权访问该书的源代码,但仍想尝试使用此脚本,则将清单7.4中脚本容器中前几节的代码片段放入清单(检查缩进,此Python语法功能很简单)疯)。 清单7.4。假硬币谜语的主脚本容器

c:\python36-64\python.exe p_counterfeitcoin.py
Device ibmq_qasm_simulator counts {'001000000': 1}
False coin index is: 6






import sys
import matplotlib.pyplot as plt
import numpy as np
from math import pi, cos, acos, sqrt
from collections import Counter
from qiskit import QuantumProgram
sys.path.append('../Config/')
import Qconfig

#      
import basic plot tools
from qiskit.tools.visualization import plot_histogram

def main(M = 16, numberOfCoins = 8 , indexOfFalseCoin = 6
      , backend = "local_qasm_simulator" , shots = 1 ):

      if numberOfCoins < 4 or numberOfCoins >= M:
           raise Exception("Please use numberOfCoins between 4 and ", M-1)
      if indexOfFalseCoin < 0 or indexOfFalseCoin >= numberOfCoins:
           raise Exception("indexOfFalseCoin must be between 0 and ",
           numberOfCoins-1)

      //   7.17.3 

#################################################
# main
#################################################
if __name__ == '__main__':
     M = 8                      #    
     numberOfCoins = 4          #  M-1,  M —   
     indexOfFalseCoin = 2             #   0, 1... numberOfCoins — 1

     backend = "ibmq_qasm_simulator"
     #backend = "ibmqx3"
     shots = 1                         #      

     main(M, numberOfCoins, indexOfFalseCoin, backend, shots)

任意数量假币的通用算法


为了解决伪造的硬币之谜,数学家Terhal和Smolin在1998年创建了一种通用算法,用于处理任意数量的伪造的硬币(k> 1)。在其实现中,使用“ B-oracle”模型(“ balanced oracle”),而:

  • 在输入 图片
  • 创建一个查询字符串,该字符串由N个三元组组成,图片以使相同的数字1和–1;
  • 答案是这样的
    图片

注意
Oracle是算法的一部分,被视为黑匣子。它用于简化方案并比较量子算法和经典算法的复杂性。一个好的甲骨文必须快速,通用并且易于实现。

将B-oracle用于k = 2和N = 6的两个伪造硬币的示例如图2所示。7.4。

图片

通常,与经典币种相比,伪造的硬币之谜是量子算法加速的典型示例。在下一部分中,我们将考虑另一个特殊的伪魔术难题,称为“ Mermin的魔方-Perez”。

关于作者


弗拉基米尔·席尔瓦(Vladimir Silva)毕业于田纳西州立大学,拥有计算机科学硕士学位。五年来,他在IBM担任研究工程师,在分布式和GRID计算领域积累了丰富的经验。

弗拉基米尔(Vladimir)具有许多证书,包括OCP(Oracle认证专家),MCSD(Microsoft认证解决方案开发商)和MCP(Microsoft认证专家)。他还是IBM developerWorks网站上大量技术文章的作者。他撰写了以下书籍:开发人员的网格计算(Charles River Media),实用的Eclipse富客户端平台(Apress),Pro Android游戏(Apress)和Advanced Android 4 Games(Apress)。

弗拉基米尔(Vladimir)是一位狂热的马拉松运动员,曾参加北卡罗来纳州的16场比赛(在撰写本文时)。他喜欢弹古典吉他,并且喜欢量子力学之类的奇妙事物。

关于科学编辑


原始版

Jason Whitehorn是一位经验丰富的企业家和软件开发人员。他通过运营数据收集,SCADA(监督控制和数据采集)和机器学习帮助许多石油和天然气公司实现自动化和改进其技术。 Jason毕业于阿肯色州立大学,拥有计算机科学学士学位。

杰森(Jason)喜欢与妻子和四个孩子一起度过闲暇时光。住在俄克拉荷马州塔尔萨。有关Jason的更多信息,访问他的jason.whitehorn.us网站

俄文版

Mikhail Korobko-物理学家,从事有关量子光学,光力学和量子测量的应用的理论和实验,以提高重力波探测器的灵敏度。自2012年以来,它已成为LIGO重力波探测器的科学家国际合作的成员。

Mikhail毕业于莫斯科国立大学物理系。罗蒙诺索夫,目前是汉堡大学激光物理研究所的研究生。他与家人一起度过闲暇时光,撰写有关量子物理学的热门科学文章,并在Twitter(@hbar_universe)上发布帖子。

»书上的更多信息上可以找到出版商的网站
» 目录
» 摘录

对于Savingsbenders 25%的优惠券- 席尔瓦

支付纸质版本的书后,就会通过电子邮件发送电子书。

All Articles