当我们在等待我们的量子计算机时,是否可以编写一个软件模拟?我怀疑答案是否定的,但希望为什么不这样做的原因可以揭开谜团。
9 回答
实现它并不难。问题在于,计算和内存的复杂性与您想要模拟的量子比特数呈指数关系。
基本上,量子计算机一次在所有可能的 n 位状态上运行。而那些增长像2 ^ n。
运算符的大小增长得更快,因为它是一个矩阵。所以它像 (2^n)^2 = 2^(2*n) = 4^n
所以我希望一台好的计算机能够模拟高达约 20 位的量子计算机,但它会相当慢。
它们确实存在。这是一个基于浏览器的。这是用 C++ 编写的。这是用Java编写的。但是,正如 CodesInChaos 所述,量子计算机同时在所有概率幅度上运行。所以想象一个 3 qubit 的量子寄存器,它所处的典型状态如下所示:
a1|000> + a2|001> + a3|010> + a4|011> + a5|100> + a6|101> + a7|110>+ a8|111>
它是所有可能组合的叠加。更糟糕的是,这些概率幅度是复数。所以一个 n-qubit 寄存器需要 2^(2*n) 个实数。所以对于一个 32 量子位的寄存器,这是 2^(2*32) = 18446744073709551616 个实数。
正如 CodesInChaos 所说,用于转换这些状态的酉矩阵是那个数的平方。它们的应用程序是一个点积……至少可以说,它们的计算成本很高。
我的回答是肯定的:
您可以通过模拟量子机算法来模拟量子机的行为
D-Wave 量子机使用一种称为quantum annealing
. 该算法可以与simulated annealing
算法进行比较。
参考:
1.量子退火
2.模拟退火
正如维基百科所说:
经典计算机原则上可以(使用指数资源)模拟量子算法,因为量子计算不违反 Church-Turing 论点。
几年前,我在 Perl 会议上参加了一次演讲,Damian Conway(我相信)当时正在推测其中的一些内容。过了一会儿,有一个 Perl 模块可以做这些事情。在 CPAN 中搜索 Quantum::Superpositions。
有一个非常大的语言、框架和模拟器列表。一些在低级别模拟量子方程,其他的只是门。
- Microsoft Quantum 开发工具包 (Q#)
- Microsoft LIQUIi>IBM Quantum Experience
- 瑞杰提森林
- 项目Q
- QuTiP
- 开放费米子
- Qbsolv
- 脚手架CC
- 量子计算游乐场(谷歌)
- 雷神BBN
- 怪癖
- 森林
很高兴知道您对它们的功能和易用性的看法。
https://quantumcomputingreport.com/resources/tools/ https://github.com/topics/quantum-computing?o=desc&s=stars
Quipper是用于量子计算的全面模拟 EDSL,在 Haskell 中实施
量子计算的经典模拟难以进行的另一个原因是:您需要几乎完美的——即尽可能完美的——随机数发生器来模拟测量。
量子计算的经典模拟很难进行的另一个原因:要跟踪,您可能想在 n 量子比特门 (n>1) 的每个动作之后知道传出的量子比特是否纠缠。这必须以经典方式计算,但已知是 NP-hard。