測ると答えは0か1になる
量子ビットの測定は、状態を読み出して、0か1のどちらかの答えを得る操作です。答えは確率で決まるので、同じ状態でも結果は毎回変わります。
たくさん測って、結果の割合を見れば、確率が分かります。このレッスンでは、測る規則と、回数の読み方を学びます。
このレッスンのゴール
メモ
状態を測ったときの結果と回数を、確率から予想できる。
キーワード
| ことば | いみ |
|---|---|
| 測定 | 状態を読み出して、0か1の答えを得ること |
| ショット | 同じ状態を1回測ること |
| カウント | ショットごとの結果を、種類別に数えた回数 |
| 累積確率 | 確率を、先頭から順に足していった数 |
| 乱数の種 | 乱数の並びを決める数。同じ種なら同じ並び |
学生が入力するセルは、このプレビューでは空白です。
測ると確率どおりに1つ出る
測ると、結果は0か1の1つだけです。0が出る確率は、0の振幅の大きさの2乗です。
[0.6, 0.8] なら、0は36%、1は64%です。このシミュレータは、状態を作り直しながら何度も測り、結果を数えます。
例: 予想される回数
| 状態 | ショット数 | 0の目安 | 1の目安 |
|---|---|---|---|
| [0.707, 0.707] | 10 | 5 | 5 |
| [0.707, 0.707] | 1000 | 500 | 500 |
| [0.6, 0.8] | 1000 | 360 | 640 |
| [1, 0] | 50 | 50 | 0 |
学生が入力するセルは、このプレビューでは空白です。
ラボは1000回測って数える
ラボの measure.py は、H ゲートを当てた状態を、1000回測ります。乱数の種を1にした場合と2にした場合を、表示します。
表示される言葉は英語です。1000 shots, seed 1 は、1000回測り、乱数の種が1という意味です。波かっこの中が、0と1の回数です。
1000回測って数える
docker exec jupyter python3 steps/measure.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
測定は累積確率と乱数で決まる
シミュレータは、0以上1未満の乱数を1つ引きます。確率を順に足した累積確率と比べ、乱数が初めて下回った場所を答えにします。
[0.6, 0.8] の累積確率は、0.36 と 1 です。乱数が0.2なら0、0.5なら1になります。
決めた乱数で10回測る
# 乱数の代わりに、決めた10個の数で10回測ります。
state = [0.6, 0.8]
chance_zero = abs(state[0]) ** 2
draws = [0.1, 0.9, 0.35, 0.37, 0.7, 0.05, 0.5, 0.2, 0.99, 0.6]
zeros = 0
for r in draws:
if r < chance_zero:
zeros = zeros + 1
print("0:", zeros, "1:", len(draws) - zeros)
# 0.9 を 0.1 に変えて、もう一度実行してください。
# 0の回数は、いくつになりますか。
よくある間違い
注意
確率が0.5なら、10回測れば必ず5回ずつ出ると考えがちです。確率は、出やすさを表すだけです。1000回測っても、507対493のように少しずれます。
乱数の種で結果をそろえる
乱数の並びは、乱数の種で決まります。同じ種なら、同じ並びになり、回数も同じです。ラボが毎回同じ数を表示するのは、このためです。
種を2に変えると、並びが変わります。回数は 503 対 497 に変わりますが、どちらも500に近い数です。
さらに挑戦: 回数を増やす
ノートブックで、measure(state, 10, 1)、100、10000 を試します。0の割合は、500に近づくでしょうか。
回数が増えるほど、割合はどうなるかを、表に書いてください。ラボは結果を保存しないので、書き写しておきます。