[初心者向け]量子ゲートシミュレータとは?

そういえば、量子ゲートのシミュレータにピンと来ていない人って結構いるような気がして、その話を書きます。
量子ゲートのシミュレータは、量子ゲート方式コンピュータの老舗が比較的古くから出しているIBMの[Qiskit](https://qiskit.org/), Rigettiの[pyquil](https://github.com/rigetti/pyquil)の他、最近ではGoogleの[Cirq](https://github.com/quantumlib/Cirq), Microsoftの[Q#](https://docs.microsoft.com/en-us/quantum/?view=qsharp-preview)などがあり、また、私は[Blueqat](https://github.com/mdrft/blueqat/)を開発しています。

# 量子コンピュータって、どんな命令が実行できるの?

通常のコンピュータ(CPU)であれ、量子コンピュータであれ、コンピュータとは何らかの「命令」を実行できる装置です。
難しければ「計算」と考えても差し支えありません。

コンピュータで何かをやりたいときには、CPUにあらかじめ用意されている「命令」あるいは「計算」を組み合わせて、やりたいことを実現します。
通常のコンピュータでは、最近では、その命令を直接人間が書くことは少なく、プログラミング言語で書いたコードをコンパイラが「命令」に変換してくれます。

量子ゲート方式のコンピュータに対する命令は、「量子ゲート」という小さな計算の組み合わせでできています。
1つの量子ビットを回転させるゲート(回転角が指定できる回転ゲートや、Hゲート、Tゲート、パウリ行列など)と、2つの量子ビットを相関させるゲート(CNOTゲートやCZゲート)が用意されています。
これらのゲート操作を組み合わせて、量子ビットを操作していきます。

# 量子ゲートシミュレータとは?
量子ゲート方式のコンピュータに対する命令である、「量子ゲート」の操作を解釈し、量子ビットの状態をシミュレーションし、「もし量子コンピュータで計算したらどういう結果が得られるか」を計算するプログラムです。

これ自体は通常のコンピュータで動くプログラムで、Pythonライブラリとして提供されていることが多いです。
量子ビットの状態は大きな配列、量子ゲートを使った計算は、配列の操作や行列の掛け算といった形で実現されています。

# 量子ゲートシミュレータQ&A
量子ゲートシミュレータにありがちな疑問点を、Q&A形式で書いていきます。

## なぜ通常のコンピュータで量子計算ができるのですか?
量子計算自体は、ただの行列演算なので、通常のコンピュータでも行うことができます。

ただし、巨大な量子コンピュータをシミュレーションしようとすると、膨大なメモリや計算時間が必要となります。(約50量子ビットを超えてくると、スパコンでも厳しいと考えられています)

## 通常のコンピュータで量子計算ができるなら、量子コンピュータはいらないのでは?
量子ビットの数が増えてくると、通常のコンピュータでは計算できないと考えられています。
シミュレーションにかかるメモリ使用量や計算時間は、ざっくり言って、1量子ビット増えるごとに倍になると考えられます。
(量子ビットが増えると、シミュレーションが指数関数的に大変になります)

## 本物の量子コンピュータはあるんですか?
IBM, Rigetti, Google他が作っています。
普通の人が最も手軽に利用できるのはIBMの量子コンピュータだと思います。5量子ビットのマシンと14量子ビットのマシンをクラウドで無償で利用できます。
[このへん](https://www.ibm.com/developerworks/jp/cloud/library/cl-quantum-computing/index.html)を読みながら試せます。

## およそ何量子ビットくらいまでシミュレーションできますか?
まず足かせになるのはメモリかと思います。
量子状態を保存するのに、複素数(つまり、浮動小数点数が2つ)を2の量子ビット数乗個必要になるので、
例えば量子ビット数をN、複素数の精度をdoubleとすると、量子状態を保存するだけで 16 * 2^N バイトのメモリを必要とします。
なので、おおよそ、

|量子ビット数|必要なメモリ|
|:-:|:-:|
|10|16 KB|
|20|16 MB|
|25|512 MB|
|26|1 GB|
|27|2 GB|
|28|4 GB|
|29|8 GB|
|30|16 GB|
|35|512 GB|
|40|16 TB|

の配列を確保する必要があります。
(配列だけでこれだけ使います。他にも多少はメモリ使いますし、OSなども立ち上がってないといけないので、例えばメモリ16GBのパソコンでは30ビットは載らない、ということになります)

また、計算時間も指数関数的に時間がかかります。
市販のパソコンでは25〜30の間くらいに限界がある、と考えるのが現実的かと思います。

スパコンでのシミュレーションに関しては、世界中で「量子コンピュータに負けないよう頑張ろう」という試みが行われており、中国のAlibabaは81量子ビットいけたと言っています。
(「ランダム量子回路」と呼ばれるタスクで、量子コンピュータとスパコンは勝負しています。この勝負は「量子コンピュータにとって最も有利な課題を、量子コンピュータもスパコンも手加減なしで計算する。この計算以外には使えなくてもいいので、本気でチューニングする」といった勝負なので、もしかするとこれは、ランダム量子回路に特化したものかもしれません)
2018年現在では、スパコンに勝てる量子コンピュータは発表されていません。

## 実用的な量子コンピュータが完成したら、量子ゲートシミュレータは必要なくなりますか?
すごく普及したら、そうかもしれません。

それでも、アルゴリズム開発などでは、恐らく、いきなりは大きな問題を解かずに、小さな問題から始めると思うので、そういった場面では役立つかもしれません。

また、「量子状態」は、本物の量子コンピュータでは直接見ることはできないのですが、シミュレータだと、タダの配列なので、いくらでも見ることができます。
なのでデバッグなどには有利かもしれません。

## 現在の量子コンピュータはエラーが多いと聞きましたが、シミュレータではどうですか?
シミュレータでは、エラーのない理想的な量子計算ができます。
ただし、シミュレータによっては、エラーを再現するために、わざとエラーを入れられるようになっています。

# まとめ
量子ゲートシミュレータとは何か、量子コンピュータとの違いは何かについて見ていきました。

| |量子コンピュータ|シミュレータ|
|:--|:--|:--|
|なにで動くか?|超伝導量子ビットなどの量子デバイス|従来のコンピュータ|
|量子加速 (量子情報の性質による計算量の削減)はあるか?|ある|ない|
|何量子ビットまで動くか?|2018年現在、IBMが無償公開しているのは14量子ビット、パートナーに有償公開しているのは20量子ビット。Googleは72量子ビットを作ったが、まだうまく動いていない|量子ビット数を増やすと必要メモリや計算時間が指数関数的に増える。そのへんのパソコンでは〜30くらいまで。スパコンではAlibabaが81量子ビットのランダム量子回路の計算|
|エラーはあるか?|現状はある|ないが、意図的に入れることはできる|
|量子状態を直接見ることはできるか?|できない|できる|