- 量子ビットは、nビットで通りを表せる
- nビットが一度にもてる値も通り(量子力学による重ね合わせの原理が働いているから)
- ただし、測定で得られる結果は確率的に出てきて、その値は1回に1個。1測定で状態は変わってしまう。何度も測定することもあり。求める解が出る確率を高める工夫をする必要が実用上は大事
- 量子ビットは、複素数の組で、2つの複素数の絶対値の二乗の和が1
- 古典ビットは0か1か。それをと書くことにすると、と表せる
- 複素ベクトルの内積をと書くことにすると
- と書ける
- 量子ビットを測定すると、|0>または|1>が得られる。それぞれが得られる確率がである
- 古典コンピュータでは、0,1の値を変化させる。コンピュータの内部的には、AND, OR, XORなどの基礎的演算ですべてのプログラムは動いている
- 量子コンピュータでは、量子状態を発展させる。このとき、状態発展なので、測定して得られる確率が全部で1、を守るような発展をすることが必要で、そのような発展がユニタリ発展
- 具体的にはユニタリ行列によって状態ベクトル(重ね合わせ)は発展する
- ユニタリ行列は
- 古典コンピュータでは、0,1の値を取って、0,1の値を返す基礎演算を電子回路で作成した
- 量子コンピュータでは、ユニタリ発展をハードウェアとして実装する
- 量子状態の区別。量子状態は、確率を測定してみて、初めてわかるもの(らしい)。したがって、測定して確率情報を得ることで状態についての知識が得られる。確率情報が同じだが、異なる量子状態は区別できない。ある状態では確率が同じだが、ユニタリ発展させると確率が変わるような量子状態は、ユニタリ発展させてみることで区別が可能になる。他方、ユニタリ発展させても、区別できないような異なる量子状態というものも存在する。ある量子状態に絶対値1の複素数をかけてできる量子状態は、この「区別できない量子状態」である
- RにQuantumOpsというパッケージがある。それを使って、上記のことをやってみる。資料はこちら
library(QuantumOps)
k1 <- ket(1,2)
k1
k2 <- ket(1i, 2*1i)
k2
-
- Multi-qubit Kets
- 要素で作ることができる
ket(1,1,3,1)
k1 <- ket(0,1)
k2 <- ket(1,1)
k1k2 <- tensor(k1,k2)
k1k2
k1k2k2 <- tensor(k1k2,k2)
k1k2k2
tensor(k1,k2,k2)
dirac(k1)
dirac(k1k2)
dirac(k1k2k2)
> dirac(k1k2)
[1] "0.707|10> + 0.707|11>"
> dirac(k1)
[1] "1|1>"
> dirac(k1k2)
[1] "0.707|10> + 0.707|11>"
> dirac(k1k2k2)
[1] "0.5|100> + 0.5|101> + 0.5|110> + 0.5|111>"
-
-
- input registerの情報に基づき、target registerの値を変える。RのQuantumOpsパッケージのUf()関数の仕様確認は→こちらの記事で
- 量子回路にはユニタリ発展に相当するユニタリ行列を配置する。入力と出力を持つ
- 量子回路からの測定は、量子回路から、古典回路に値をコピーする、という形式で表す
- RのQuantmuOpsパッケージでは、I(),X(),Y(),Z(),H(),R(),S(),T()という、1量子ビット用の演算関数が用意されている。その演算の行列表示は
X
- 2量子ビットはなどと書く
- 次のようにも書く。
- 量子もつれ
- 量子ビットをコピーすることはできない。そのようなユニタリ行列が存在しないことからそれが分かる
- RのQuantumOpsパッケージでは、CX(),CY(),CZ(),BELL()関数が、2量子ビット用に、TOFFOLI()が3量子ビット用に用意されている
- 演算子(関数)もtensor()関数を使って、多量子化できる
- 2量子ビットのユニタリ発展は4x4行列が必要。規模が大きくなると行列が大きくなる
- それを防ぐのに次のルールがある
- このようなことができるのは、量子がもつれていないとき
第6章 量子プログラミング・入門編
- QiskitをローカルPCで実行する環境を作る
- こちらに従って、Anacondaインストール後に
- Windows10のスタートアップメニューからAnaconda promptを立ち上げ、そこで
conda create -n myHoge python=3
activate myHoge
-
- すると、プロンプトにmyHogeに入っている、と見える。そのうえで
pip install qiskit
pip install qiskit-terra[visualization]
-
- これで準備ができたはず
- そのまま、myHogeのプロンプトで、
jupyter notebook
-
- とjupyter notebookを起動し、新しい、python3 ノートを開けば
import qiskit
-
- がきちんと(ちょっとロードに時間がかかるが)回る
- Macではターミナルから
conda create -n myHoge python=3
activate myHoge
pip install qiskit
pip install qiskit-terra[visualization]
jupyter notebook
-
- というわけで準備ができたので、本のサイト(こちら)のjupyter notebookをダウンロードして、この環境で開けばなぞれる
第7章 量子プログラミング・実機編
- IBMのサイトに行って、そのアカウントにTokenを使ってローカルからアクセスして…というのは、本が書かれた時から仕様変更があるらしく、難航
- それよりはIBMのサイト上で遊ぶのがよいかも
- いずれにしてもtutorialはこちら
qiskit.org