如果要在模拟中从头开始构建量子计算机(例如人们在Nand2Tetris课程中如何从头开始构建经典计算机),这可能吗?
如果是,那有什么可能的方法?
而且,鉴于特定数量的经典计算能力,这种模拟机器的局限性是什么?例如,如果我们要选择您的平均台式机/笔记本电脑,限制是多少?如果我们使用一台超级计算机(如Titan),那么极限将是多少?
如果要在模拟中从头开始构建量子计算机(例如人们在Nand2Tetris课程中如何从头开始构建经典计算机),这可能吗?
如果是,那有什么可能的方法?
而且,鉴于特定数量的经典计算能力,这种模拟机器的局限性是什么?例如,如果我们要选择您的平均台式机/笔记本电脑,限制是多少?如果我们使用一台超级计算机(如Titan),那么极限将是多少?
Answers:
您问题的第一部分似乎与现有QC SE帖子的重复:是否存在用于量子计算机的仿真器?。
我不能完全确定您在模拟中从头开始建立量子计算机的意思。但是,是的,您可以使用普通的笔记本电脑/台式机对量子计算机进行软件仿真。确切的“限制”将取决于计算机的规格。
由于量子计算机没有违反Church-Turing命题,因此从理论上讲,绝对有可能使用理想的 Turing机器来模拟量子计算机。模拟这种系统的明显方法是在经典计算机上需要指数时间,并且空间复杂度是所模拟的量子位数的指数函数。假设您模拟了一个位量子计算机,那么您需要在每个瞬间将大约2 n位信息存储在您的经典计算机中。此外,就时间和空间复杂性而言,实施量子门将再次占用大量资源。在n个量子比特上运行的量子门的实现必须存储约(因为您可以将所有量子门操作表示为大小为 2 n × 2 n的矩阵)。
您可以根据经典计算机的规格来估算“极限”。例如,如果您的经典计算机的(访问)存储器大小约为 TB,我期望可以模拟日志4(8 × 10 12)≈ 21位的量子计算机(要在安全方面比方说20)。但是,请记住,与实际的量子计算机相比(取决于量子计算机的硬件),传统计算机将花费更多的时间来访问所有单个信息位。所以会变慢比真正的量子计算机!其他一些限制是,在位量子位门的每次动作之后,您需要跟踪哪些输出量子位被纠缠,这是一个NP难题。而且,由于传统上没有真正的随机数生成器,因此无法在经典计算机上精确地模拟测量。
好吧,我目前正在研究量子计算机的模拟器。当然,量子计算的基本思想是将矩阵表示的门应用于矢量表示的量子位。使用Python的numpy包,从最基本的意义上讲,这并不难编写。
从那里,当然可以在接口上进行扩展。可能还需要考虑使其成为非理想量子计算机的模拟器,即考虑到退相干时间和纠错。
然后,您进入了一个未知的领域。您如何为量子计算机构建指令集?谁知道。您必须弄清楚。您还必须弄清楚汇编的版本,甚至高级编程语言的版本。
那么,经典计算机的局限性在此吗?好吧,这是一个非常复杂的问题(恕我直言,值得单独询问),但这是一个简短的摘要:
我觉得这个答案主要取决于对“模拟”某些东西的潜在误解。
一般而言,“模拟”复杂的系统意味着使用易于控制的平台(通常但并非总是经典计算机)重现该系统的某些功能。
因此,“一个人是否可以在经典计算机中模拟量子计算机”的问题有些不适。如果您要复制“量子计算机”的各个方面,那将永远不会发生,就像您永远无法模拟任何经典系统的各个方面一样(除非您使用相同的相同系统系统)。
另一方面,您当然可以模拟复杂设备的许多方面,例如“量子计算机”。例如,可能要模拟量子电路中状态的演化。确实,这可能非常容易做到!例如,如果您的计算机上装有python,则只需运行以下命令
import numpy as np
identity_2d = np.diag([1, 1])
pauliX_gate = np.array([[0, 1], [1, 0]])
hadamard_gate = np.array([[1, 1], [1, -1]]) / np.sqrt(2)
cnot_gate = np.kron(identity_2d, pauliX_gate)
H1_gate = np.kron(hadamard_gate, identity_2d)
awesome_entangling_gate = np.dot(cnot_gate, H1_gate)
initial_state = np.array([1, 0, 0, 0])
final_state = np.dot(awesome_entangling_gate, initial_state)
print(final_state)
恭喜,您只是“模拟”了可分离的两个量子比特状态到贝尔状态的演变!
但是,如果您尝试用40量子位和非平凡的门来做同样的事情,那么您将无法轻松地将其退出。天真的原因是,即使只是存储状态-qubit(非稀疏)状态,您需要指定〜复数,这很快就会占用大量内存。我在这里说“天真”,因为在许多情况下,可能会有一些技巧可以避免此问题。这就是为什么许多人努力寻找巧妙的技巧来用经典计算机来模拟量子电路(以及其他类型的量子系统)的原因,而且这并非易事。
其他答案已经涉及到这种硬度的各个方面,而这个其他问题的答案已经提到了许多可用的平台来模拟/仿真量子算法的各个方面,因此我将不去赘述。
(1) 一个有趣的例子是模拟玻色子采样设备的问题(从通过一系列门的状态演化来看,这不是量子算法,但它仍然是非平凡的量子设备的一个例子)。BosonSampling是一个采样问题,其中一个任务是采样问题从特定的概率分布来看,这已经证明(在可能的假设下)不可能用经典的设备有效地完成。尽管从来没有证明它是这种硬度的基本方面,但是与模拟玻色子采样设备相关的一个肯定不平凡的问题是必须计算要从中采样的指数级概率。但是,最近发现,确实不需要计算要从中进行采样的整套概率(1705.00686和1706.01260)。从原理上讲,这与模拟量子电路中许多qubit的演化并不需要在任何给定点存储系统的整体状态相距不远。关于更直接的量子电路,最近在模拟能力方面取得突破的例子是1704.01127 和1710.05867(也是尚未发布的超最新版本是1802.06952)。
(2) 实际上,已经证明(或者为事实提供了强有力的证据)不可能有效地模拟大多数量子电路,请参见1504.07999。