量子コンピューターを待っている間に、そのソフトウェア シミュレーションを作成することは可能ですか? 答えは「いいえ」だと思いますが、そうでない理由が謎に光を当てることを願っています.
9 に答える
それを実装することはそれほど難しいことではありません。問題は、計算とメモリの複雑さが、シミュレートする量子ビットの数で指数関数的になることです。
基本的に、量子コンピューターは可能なすべての n ビット状態を一度に処理します。そして、それらは 2^n のように大きくなります。
行列であるため、演算子のサイズはさらに急速に大きくなります。したがって、 (2^n)^2 = 2^(2*n) = 4^n のように大きくなります。
そのため、20 ビット程度までの量子コンピューターをシミュレートできる優れたコンピューターを期待していますが、かなり遅くなります。
それらは存在します。これがブラウザベースのものです。これはC++で書かれたものです。これはJavaで書かれたものです。しかし、CodesInChaosが述べているように、量子コンピューターはすべての確率振幅で一度に動作します。したがって、3キュービットの量子レジスタを想像してみてください。これは、次のような典型的な状態です。
a1 | 000> + a2 | 001> + a3 | 010> + a4 | 011> + a5 | 100> + a6 | 101> + a7 | 110> + a8 | 111>
これは、考えられるすべての組み合わせの重ね合わせです。さらに悪いことに、これらの確率振幅は複素数です。したがって、nキュービットレジスタには2 ^(2 * n)の実数が必要になります。したがって、32キュービットレジスタの場合、2 ^(2 * 32)=18446744073709551616実数になります。
そして、CodesInChaosが言ったように、これらの状態を変換するために使用されるユニタリ行列は、その数の2乗です。それらのアプリケーションはドット積です...控えめに言っても、それらは計算コストがかかります。
ウィキペディアの状態として:
量子計算はチャーチ・チューリングのテーゼに違反しないため、古典的なコンピューターは原則として (指数関数的なリソースを使用して) 量子アルゴリズムをシミュレートできます。
Years ago I attended a talk at a Perl conference where Damian Conway (I believe) was speculating on some of this. A bit later there was a Perl module made available that did some of this stuff. Search CPAN for Quantum::Superpositions.
量子コンピューティングの古典的なシミュレーションが難しいもう 1 つの理由: 測定をシミュレートするには、ほぼ完璧な (つまり、可能な限り完全な) 乱数発生器が必要です。
量子計算の古典的なシミュレーションが難しいもう 1 つの理由: 追跡するために、n キュービット ゲート (n>1) の各アクションの後に、発信キュービットがエンタングルされているかどうかを知りたい場合があります。これは古典的に計算する必要がありますが、NP 困難であることが知られています。
ここを参照してください: https://stackoverflow.com/a/23327816/363429
Quipperは、Haskell で実装された、量子コンピューティング用の完全なシミュレーション EDSL です。私は、Deutsch、Deutsch–Jozsa、Simon's、Shor's アルゴリズムなどのいくつかの QC アルゴリズムの動作をシミュレートする経験があり、非常に簡単です。