大家好!
前几天,我访问了加拿大温哥华的D-Wave Systems。这是一家制造尖端量子计算机的公司。
我在那里学到了很多关于量子计算机的知识,所以我想在这篇文章中与你们分享我在那里学到的一些东西。
本文的目的是通过一个简单的例子让您准确地了解量子计算机是什么。
对于理解本文,无需具备量子物理或计算机科学的知识。
好,我们开始吧。
什么是量子计算机?
以下是量子计算机的一个总结:
量子计算机是一种使用量子力学原理来进行计算的计算机,它能比普通计算机更有效地执行特定类型的计算。
这句话中有很多东西需要解释,我用一个简单的例子来说明它到底是什么。
为了解释什么是量子计算机,首先需要解释一下常规(非量子)计算机。
普通计算机是如何储存信息的
一台普通的计算机以0和1的序列存储信息。
不同类型的信息,如数字、文本和图像都可以用这种方式表示。
这个由0和1组成的序列中的每个单元都被称为比特位。所以,比特位可以设置为0或1。
那么量子计算机呢?
量子计算机不使用比特来存储信息。相反,它使用一种叫量子位的东西。
每个量子位不仅可以设置为1 或 0,还可以设置为1 和 0。那这到底意味着什么呢?
用一个简单的例子来解释这个问题。这是一个人为的例子。但它仍然有助于理解量子计算机是如何工作的。
一个理解量子计算机如何工作的简单例子
现在,假设你在经营一家旅行社,你需要把一群人从一个地方搬到另一个地方。
为了简单起见,假设你现在只需要移动3个人——Alice, Becky和Chris。
假设你为此预定了两辆出租车,你想知道谁上了哪辆出租车。
另外,假设你得到了关于谁和谁是朋友,谁和谁是敌人的信息。
这里我们假设:
- Alice和Becky是朋友
- Alice和Chris是敌人
- Becky和Chris是敌人
假设你的目标是把这3个人分成两组并实现以下两个目标:
- 最大限度地增加共享同一辆车的朋友对的数量
- 最大限度地减少共享同一辆车的敌人对的数量
这是这个问题的基本前提。我们首先考虑如何用普通计算机解决这个问题。
用普通计算机解决这个问题
要用普通的非量子计算机解决这个问题,首先需要弄清楚如何用比特存储相关信息。
我们把这两个出租车标记为出租车1号和出租车0号。
然后,你可以用3个比特位表示谁进入哪辆车。
例如,我们可以通过将这3位设为0,0,和1来表示:
- Alice在0号出租车
- Becky在0号出租车
- Chris在1号出租车
因为每个人有两种选择,所以有2x2x2 = 8种方法将这群人分到两辆车上。
这里列出了所有可能的情况:
A | B | C
0 | 0 | 0
0 | 0 | 1
0 | 1 | 0
0 | 1 | 1
1 | 0 | 0
1 | 0 | 1
1 | 1 | 0
1 | 1 | 1
使用3个比特位,就可以表示这些组合中的任何一种。
计算每个配置的得分
现在,使用普通计算机,我们如何确定哪种配置是最好的方案呢?
为此,我们需要定义如何计算每个配置的得分。这个分数将代表每个解决方案达到我前面提到的两个目标的程度:
- 最大限度地增加共享同一辆车的朋友对的数量
- 最大限度地减少共享同一辆车的敌人对的数量
我们简单定义分数如下:
给定配置的分数 = 共享同一辆车的朋友对数 - 共享同一辆车的敌人对数
例如,假设Alice, Becky和Chris都乘坐出租车1号。用三个比特表示为111。
在这种情况下,只有一对朋友共用一辆车——Alice和Becky。
但是却有两对敌人共用一辆车——Alice和Chris, 以及Becky和Chris
所以,这个配置的总分为 1-2 = -1.
解决问题
有了这些,我们终于可以着手解决这个问题了。
对于一台普通的计算机,要找到最好的配置,你需要遍历所有配置,看看哪个达到了最高分。
所以,构建这样一个表格:
A | B | C | Score
0 | 0 | 0 | -1
0 | 0 | 1 | 1 <- 最佳解决方案之一
0 | 1 | 0 | -1
0 | 1 | 1 | -1
1 | 0 | 0 | -1
1 | 0 | 1 | -1
1 | 1 | 0 | 1 <- 另一个最佳解决方案
1 | 1 | 1 | -1
如你所见,这里有两个正确的答案——001和110,都达到了1分。
这个问题相当简单。但是随着越来越多的人参与到这个问题中来,用一台普通的电脑很快就会变得难以解决。
我们看到如果是3个人,需要遍历8种可能的配置。
如果有4个人呢?我们需要遍历2x2x2x2 = 16个配置。
对于n个人,我们需要通过遍历2的n次方个配置来找到最佳解。
所以,如果有100个人,我们需要遍历:
- 2¹⁰⁰ ~= 10³⁰个配置
这是用普通计算机根本无法解决的问题。
用量子计算机解决这个问题
我们如何用量子计算机来解决这个问题?
让我们回到把3个人分到两辆出租车的例子。
正如我们前面看到的,这个问题有8种可能的解决方案:
A | B | C
0 | 0 | 0
0 | 0 | 1
0 | 1 | 0
0 | 1 | 1
1 | 0 | 0
1 | 0 | 1
1 | 1 | 0
1 | 1 | 1
用一台普通的计算机,用3个比特位,我们一次只能表示其中一个解——例如001。
然而,使用量子计算机,通过3个量子位,我们可以同时表示所有8个解。
关于这个说法的确切含义存在争议,但我的看法是这样的。
首先,来看这3个量子位中的第一个量子位。当你将其设置为0和1时,就好像创建了两个并行世界(是的,很奇怪,请接着看下文)。
在其中一个平行世界中,量子位被设置为0,而在另一个平行世界中为1。
现在,如果再把第二个量子位也设为0 和 1呢?那么,就像是创造了4个平行世界。
在第一个平行世界中,两个量子位被设置为00,第二个平行世界中是01,第三个平行世界中是10,第四个平行世界中是11。
类似地,如果你将这三个量子位都设置为0和1,就会创建8个平行世界——000,001,010,011,100,101,110和111。
这是一种奇怪的思考方式,但它是解释量子比特在现实世界中的行为的正确方式之一。
现在,当你对这三个量子位进行某种计算时,你实际上是在同时对这8个平行世界进行同样的计算。
因此,我们可以同时计算所有解的分数,而不是按顺序遍历所有这些可能的解。
有了这个特殊的例子,理论上,你的量子计算机可以在几毫秒内找到最好的解——001或110,正如我们之前看到的:
A | B | C | Score
0 | 0 | 0 | -1
0 | 0 | 1 | 1 <- 最优解之一
0 | 1 | 0 | -1
0 | 1 | 1 | -1
1 | 0 | 0 | -1
1 | 0 | 1 | -1
1 | 1 | 0 | 1 <- 另一个最优解
1 | 1 | 1 | -1
实际上,要解决这个问题,你需要让你的量子计算机做两件事:
- 所有可能的解都用量子位表示
- 将每个可能的解转化成分数的函数。在本例中,这个函数计算共享同一辆车的朋友对和敌人对的数量。
具备了这两条,你的量子计算机将在几毫秒内给出其中一个最好的解决方案。在本例中,分数为1的是001或110。
现在,从理论上讲,量子计算机每次运行都能找到最好的解。
然而,实际上,在运行量子计算机时有可能存在错误。所以,它可能会找到次优解,次次优解,等等。
随着问题变得越来越复杂,这些错误变得越来越突出。
因此,在实践中,你可能希望在量子计算机上运行相同的操作数十次或数百次。然后从你得到的结果中选出最好的。
量子计算机是如何带来改进的
即使有我提到的错误,量子计算机也没有普通计算机所遇到的同样的计算规模问题。
当有3个人需要分到两辆车上时,我们需要在量子计算机上执行的操作数是1。这是因为量子计算机同时计算所有情况的分数。
当有4个人的时候,操作的次数仍然是1。
当有100人的时候,操作的次数仍然是1。仅仅一次操作,量子计算机就能同时计算出2¹⁰⁰~ = 10³⁰种情况的分数。
正如我之前提到的,在实践中,最好是运行量子计算机几十次或几百次,然后从得到的结果中选出最好的结果。
然而,它仍然比在普通计算机上运行同样的问题,并且必须重复同样类型的计算3.75亿次要好得多。
总结
特别感谢D-Wave Systems的每个人耐心地向我解释这一切。
D-Wave最近推出了一个与量子计算机交互的云环境。
如果你是一名开发人员,并且想尝试使用量子计算机,这可能是最简单的方法。
它叫Leap,访问地址为https://cloud.dwavesys.com/leap。你可以免费使用它来解决成千上万的问题,而且一旦你注册了,还会提供了易于学习的量子计算机教程。
补充
- 在本文中,我使用术语“常规计算机”来指代非量子计算机。然而,在量子计算行业中,非量子计算机通常被称为经典计算机。