クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

量子シミュレーターの基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 14分コマンド7個

量子ビットは、ふつうのビットと何がちがうのか

ビットは 0 か 1 です。量子ビットは、答えごとにひとつずつ、2つの数で表され、測定するとその2つの数から 0 か 1 のどちらか一方が、偶然で決まります。この決まりを、自分で読める短い Python のファイルとして作ります。ふつうのコンピュータで動くので、これはシミュレーターであって量子コンピュータではなく、量子コンピュータが速いかどうかを見せることはできません。見せられるのは、決まりのほうです。

このレッスンが終わると

メモ

量子ビットを作り、ゲートをかけ、測定して、回数の表が何を示すかを言うことができる。

キーワード

  • 量子ビット:ビットの量子版。2つの振幅で表す。
  • 振幅:ひとつの結果につく数。2乗すると、その結果が出る確率になる。
  • ゲート:X や H のように、振幅を変える一歩。
  • 測定:量子ビットを読むこと。0 か 1 がひとつだけ、偶然で出る。
  • ショット:1回の実行。最後は測定で終わる。
  • シミュレーター:決まりに従って動く、ふつうのコンピュータ上のプログラム。

はじめに:もう知っていること

メモ

頭の中で答えてください。1. 2ビットで表せる値は何通りですか。2. 公平なコインを1000回投げると、表はおよそ何回出ますか。3. 0.5 を2乗するといくつですか。答え: 4通り(ただし一度にひとつだけ)。約500回。0.25。

始める前に

メモ

レッスンの上のバーにある ラボを開始 を押し、動いていると表示されるまで待ちます。コンテナはひとつ、jupyter だけで、ターミナルからは docker exec jupyter でその中の Python を使います。これはコンテナの中でコマンドをひとつ実行する命令です。JupyterLab のリンクを押すと、ポート 8888 の画面が開きます。下の 実行 ボタンは、それぞれのコマンドをラボのターミナルに、同じセッションの中で順番に入力します。様子を見たいときや自分で入力したいときは、バーの ターミナルを開く(新しいタブ) を押します。

シミュレーターは、読めるファイルです

ls は作業フォルダーの中身を表示します。シミュレーターの qsim.py(NumPy で書かれた70行に満たないファイル)、ノートブックの start.ipynb、そしてフォルダー steps があります。最初のスクリプトは、状態 |0> の量子ビットを作ります。最初に表示される 1.000|0> は「答え 0 の振幅が 1」という意味です。確率は [1. 0.] で、読めば必ず 0 です。量子ビット2つなら、00、01、10、11 のそれぞれに振幅が1つずつ、合わせて4つ必要です。

コマンド
docker exec jupyter ls

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

コマンド
docker exec jupyter python3 steps/qubit.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

ゲートは振幅を変える

X ゲートは 0 と 1 を入れ替えるので、|0> は 1.000|1> になります。H ゲートは、2つを等しく混ぜます。0.707|0> + 0.707|1> です。どちらの振幅も 0.707 で、0.707 を2乗すると 0.5 なので、確率は [0.5 0.5] です。

コマンド
docker exec jupyter python3 steps/gates.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

測定は偶然でひとつの答えを返す

このスクリプトは、H の状態を1000回測定します。乱数の種を固定してあるので、何度実行しても同じです。種が 1 のときは 0 が507回、1 が493回。種が 2 のときは 503回と497回。種 1 をもう一度使うと、最初とまったく同じ答えです。どちらもほぼ半分で、ぴったり半分にはなりません。それが偶然です。

コマンド
docker exec jupyter python3 steps/measure.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

確かめよう

ヒント

H の状態は、どちらの答えも振幅が 0.707 です。回数が 707 と 707 ではなく、500 と 500 に近いのはなぜですか。答え: 確率は振幅の2乗で、0.707 の2乗は 0.5 であり、2つの確率を足すと 1 になるからです。

2つの量子ビットを結びつける

1つ目の量子ビットに H、続けて CNOT をかけると、ベル状態 0.707|00> + 0.707|11> になります。回数の表には 00 と 11 だけが出ます(507回と493回)。01 や 10 は出ません。2つの量子ビットはいつも同じ答えになるのに、ひとつだけ見ればコイン投げと同じです。

コマンド
docker exec jupyter python3 steps/bell.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

振幅は打ち消し合う

H を2回かけると 1.000|0> にもどり、H、Z、H の順にかけると 1.000|1> になります。2つ目の H は振幅を足し合わせ、間に Z があると、2つの答えのうちひとつが打ち消されます。これが干渉で、量子プログラムはこれで確率を思うほうへ寄せます。

コマンド
docker exec jupyter python3 steps/interfere.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

確率をひとつの答えへ寄せる

4つの項目に 00、01、10、11 と番号をつけ、11 に印をつけます。どれも振幅は 0.500 から始まるので、確率は 0.25 ずつです。印のついた項目の符号を反転しても、どの確率も変わりません。しかし、もう一歩、すべての振幅を平均を中心に折り返すと 1.000|11> が残ります。印のついた項目が、確実になりました。

コマンド
docker exec jupyter python3 steps/amplify.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある思い込み

注意

量子コンピュータはすべての答えを同時に試して、いちばんよいものを見せるだけだと思われがちです。測定で出る答えはひとつで、振幅の2乗に従って偶然で決まります。大切なのは、ゲートと干渉で振幅を整えて、ほしい答えが出やすくなるようにすることです。

シミュレーターに見せられないこと

これは、ふつうのコンピュータで動く qsim.py です。すべての振幅を記憶に持つので、量子ビットがひとつ増えるたびに仕事が2倍になり、速くなることは示せません。決まりをそのまま正確にたどるので、決まりを学ぶのには向いていますが、本物の機械の作りや速さについては何も言えません。

同じことをノートブックで

バーから JupyterLab を開き、start.ipynb をダブルクリックします。スクリプトと同じことを、セルごとに行い、最後はベル状態の回数の棒グラフで終わります。セルをクリックして Shift と Enter を押すと実行されます。最後のセルは、あなた自身の問いを書く場所です。

最後の確認

ヒント

見返さずに答えてください。1. 振幅がわかっているとき、その結果が出る確率はどう求めますか。2. H ゲートは |0> に何をしますか。3. ベル状態では、どの組の答えが出ますか。4. このシミュレーターで、量子コンピュータが速いことを示せますか。答え: 振幅を2乗する。等しく混ぜ、どちらも 0.707 になる。00 と 11 だけ。示せない。ふつうのコンピュータ上のシミュレーターだから。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボはサービスがひとつで、生徒が読める小さな NumPy のシミュレーターが入った JupyterLab です。自動採点はありません。生徒は qsim.py を使った自分のノートブックを JupyterLab からダウンロードして、わかったことの一文といっしょに提出します。学習のポイント:1. 量子ビットは2つの振幅で、確率はその2乗。2. ゲートは振幅を変え、測定は偶然でひとつの答えを返す。3. 干渉は確率を寄せる。よくある思い込み:「すべての答えを同時に試す」。用意するもの:ラボとブラウザー。ヒント:実行を押す前に、それぞれの出力を予想させてください。乱数の種は固定なので、どのコピーでも同じ数になり、ラボは速さを示せないことをはっきり述べています。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。

このラボとソースについて: 量子シミュレーターラボ:JupyterLab で量子ビット、ゲート、測定

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。