9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

量子コンピューター入門 IBM Quantum Composer編

Last updated at Posted at 2021-11-26

$$
\def\bra#1{\mathinner{\left\langle{#1}\right|}}
\def\ket#1{\mathinner{\left|{#1}\right\rangle}}
\def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}
$$

IBM Quantum Composer (https://quantum-computing.ibm.com/composer) を使って、量子コンピューターの計算をしてみましょう。パソコンまたは、iPadなどのタブレット端末で実行できます。

0. はじめの設定

0-1) ホーム画面からComposer(コンポーザー)画面へ行く

まず、こちらからIBM Quantumのダッシュボードにログインします。ID登録がまだの方は、『IBM Quantum Experienceへの登録(くわしいバージョン)』を参考に、登録してください。
ログインできたら、左側の青色の「Launch Composer」をクリックします。
はじめの設定.png

ポップアップウィンドウが出てきた場合は、確認して、Xマークをクリックして閉じます。
はじめの設定2.png

下のようなコンポーザー画面で計算します。左上のファイルアイコン「Composer files」をクリックして閉じるとComposer画面が大きくなります。
はじめの設定3.png

0-2) 量子ビットの数の設定

初期設定では、5量子ビットが並んでいますが、まず、1量子ビットで実験しますので、1量子ビットの回路に変更します。
1)マウスをq1に近づけると、ゴミ箱マークが出てくるので、クリックして消します。同じように繰り返して、q0だけ残して、量子ビットが1つだけの回路にします。
はじめの設定4.png

2)左下の「Probabilities」をクリックして「Statevector」を選択し、青い棒グラフを出してください。
はじめの設定5.png

下の画面がセットできたら、始めましょう。
はじめの設定6.png

1. Xゲート

上に並んんでいるH,$\oplus$,・・・T,S, などの量子ゲートの箱をドラッグアンドドロップで下の回路に移動させて量子回路を作っていきます。Xゲートは$\oplus$の記号になっています。
xゲート1.png

図の回路を作ってみてください。下に表示される棒グラフの変化を確認しましょう。
1-1) 1-1.png
1-2)1-2.png
1-3)1-3.png

量子ビットの初期値は、$\ket{0}$ なので、 反転ゲート のXを1回使うと$\ket{0}$が$\ket{1}$に、また2回使うと$\ket{0}$に戻ることが量子回路の下の棒グラフを見て確認できます。
1-32.png

次の章に移る前に、Xゲートを右クリックして、「Cut」を選んで置いたゲートを取り除いてください。この方法で3つのXゲートを削除して、量子回路を元の空の状態にできます。
1-33.png

2. Hゲート

Hゲートは、アダマールゲートと呼ばれるもので、量子重ね合わせ状態を作ることができる重要なゲートです。$\ket{0}$が、$\ket{0}$と$\ket{1}$の重ね合わせ状態になります。
次の図の回路を作ってみてください。下側の棒グラフの変化を確認しましょう。

2-1)2-1.png

量子ビットの初期値は$\ket{0}$ なので、アダマールゲートHを適用すると、$\ket{0}$と$\ket{1}$の重ね合わせ状態になります。これは、$\ket{0}$でもあり$\ket{1}$でもある状態ですが、量子ビットを測定するまでどちらの状態かわかりません。2-14.png
青い棒グラフにカーソルをもってきて、右クリックすると、大きさが0.707があるのが読めます。式で書くと、
  $\ket{0} →(H)→ 0.707\ket{0}+0.707\ket{1}$
です。(これは、$\frac{1}{\sqrt{2}}\ket{0}+\frac{1}{\sqrt{2}}\ket{1}$ と等しいです。)

測定する前にどのくらいの確率で$\ket{0}$と$\ket{1}$が測定されるか事前に予測できます。下の図のように、棒グラフの上の「Statevector(状態ベクトル)」をクリックして「Probabilities(確率)」にしてみましょう。0と1の確率が50%ずつの均等な重ね合わせの状態ができていることがわかります。これは、この状態の量子ビットを測定すると0か1のどちらかが観測されるのですが、たくさん測定されると、例えば1000回測定されると約500回は0が観測され、約500回は1が観測されるということです。
2-13.png

続けます。
2-2) Hゲートも2回繰り返すと棒グラフの値が元に戻ることを確認しましょう。
2-2.png
2-3)2-3.png

$\ket{0}$にXゲートを使うと$\ket{1}$になり、$\ket{1}$にHゲートを使うと棒グラフの$\ket{1}$の部分が赤色になりました。これはマイナス(ー)の意味があります。
2-34.png

式で書くと、
 $\ket{1} →(H)→ 0.707\ket{0}-0.707\ket{1}$
です。(これは、$\frac{1}{\sqrt{2}}\ket{0}-\frac{1}{\sqrt{2}}\ket{1}$ と等しいです。)
$\ket{0}$にHゲートだけを使った状態と同じように、$\ket{0}$でもあり$\ket{1}$でもある状態ですが、$\ket{1}$の前にマイナス(ー)がついているので、別の状態と考えて計算に使います。

2-4) 続けてHゲートをもう一度かけると棒グラフはどうなりますか?
2-4.png

2-5) q[0]の下にある灰色の「+」マークをクリックして2量子ビットの回路をセットし、Hゲートをそれぞれ使ってみましょう。棒グラフには何個の状態がありますか?
2-5.png

2-6) 5量子ビットの時の重ね合わせです。何通りの状態ができますか?
2-6.png

3. Zゲート

次の図の回路を作ってみてください。それぞれ棒グラフの変化を確認しましょう。
3-1)3-1.png
3-2)3-2.png

棒グラフの色は何色になりましたか?
Zゲートは、$\ket{1}$に操作するとマイナスがつくゲートです。
  $\ket{0} →(Z)→ \ket{0}$
  $\ket{1} →(Z)→ -\ket{1}$
3-23.png
3-24.png

続いて次の回路を作ってみてください。
3-3)3-3.png
3-4)3-4.png

棒グラフの色と下の数字のプラス・マイナスの符号を確認してみましょう。
Zゲートは、重ね合わせの+と-の符号を入れ替えるゲートです。
3-32.png
3-42.png

〜〜少し高度な説明〜〜
Hゲートは$\ket{0}$と$\ket{1}$の重ね合わせを作るゲートでしたので、
  $\frac{1}{\sqrt{2}}\ket{0}+\frac{1}{\sqrt{2}}\ket{1} → (Z) → \frac{1} {\sqrt{2}}\ket{0}-\frac{1}{\sqrt{2}}\ket{1} $
  $\frac{1}{\sqrt{2}}\ket{0}-\frac{1}{\sqrt{2}}\ket{1} → (Z) → \frac{1}{\sqrt{2}}\ket{0}+\frac{1}{\sqrt{2}}\ket{1} $
になっていることが確認できると思います。このとき
  $\frac{1}{\sqrt{2}}\ket{0}+\frac{1}{\sqrt{2}}\ket{1} =\ket{+}$
  $\frac{1}{\sqrt{2}}\ket{0}-\frac{1}{\sqrt{2}}\ket{1} =\ket{-}$
とかくことにすると、
  $\ket{+} → (Z) → \ket{-}$
  $\ket{-} → (Z) → \ket{+}$
になります。
Zゲートは、重ね合わせの+と-の符号を入れ替えるゲートです。
〜〜少し高度な説明ここまで〜〜

4. 練習問題 A

次の棒グラフが表示されるような量子回路を作ってみましょう。答えは一つではないので、どんな作り方でもOKです。
ヒント:棒グラフ下の右側の数字が上側の量子ビットq0に対応していることに注目して作ってみましょう。
A.png

さらにヒント:使うゲートはX、H、Zだけです!
4-1)4-1.png
4-2)4-2.png
4-3)4-3.png
4-4)4-4.png
4-5)4-5.png
4-6)4-6.png

次はCXゲートを練習します。

5. CXゲート

CXゲート(コントロールNOTゲート)は2量子ビットを使う計算をします。
CXゲートは、下の図にあるような記号で、+がついていない側が制御ビット、+がついている側が目標ビットと呼ばれます。制御ビットが$\ket{1}$のときのみ、目標ビットを反転(NOT)するゲートです。下の図では、q0がXゲートで$\ket{1}$になっているので、q1の値$\ket{0}$を反転して$\ket{1}$にします。
5-0.png

次の図の回路を作ってみてください。q0が$\ket{1}$のときのみ、q1の値が反転していることを確認しましょう。
5-1)5-1.png
5-2)5-2.png
5-3)5-3.png
5-4)5-4.png
5-5)5-5.png
最後の回路の棒グラフを見てみましょう。
5-52.png

これは、q0だけみると$\ket{0}$と$\ket{1}$の重ね合わせ、q1だけみても$\ket{0}$と$\ket{1}$の重ね合わせですが、$\ket{00}$, $\ket{01}$, $\ket{10}$, $\ket{11}$の4状態ではなく、$\ket{00}$, $\ket{11}$の2つの状態のみになっています。
これはエンタングルメント状態とよばれる量子状態で、q0が$\ket{0}$のときはq1も$\ket{0}$、q0が$\ket{1}$のときはq1も$\ket{1}$という、q0とq1が切っても切れない関係になっている特別な状態です。量子コンピューターはこのエンタングルメント状態を上手に使って複雑な計算を行っていきます。

このエンタングルメント状態の2つの量子ビットを遠くに離した時、例えば、片方は地球上に置いたまま、もう片方は宇宙の遥か遠くに離した時を考えます。それぞれ$\ket{0}$と$\ket{1}$の50%ずつの重ね合わせ状態でどちららか分からないのですが、地球の量子ビットを測定してそれが$\ket{0}$だと判明すると、遠くの宇宙にある量子ビットも$\ket{0}$だと瞬時にわかるという不思議な現象が起こることが考えられます。この思考実験は、アインシュタインが考えたもので、アインシュタインはこれを不気味な遠隔作用と呼び、疑っていたのですが、このエンタングルメント状態は今、IBMの量子コンピューターで誰でも実験してみることができます。

これまでは、IBM Quantum Composerの計算機能のみ使っていたので、実際に測定してみましょう。

6. 測定してみる

次のようにして測定します。
6-1.png
(1) 測定ゲートをq0とq1に設置します。
(2) 左上の「Untitled Experiment(名無しの実験)」あたりにマウスを持っていくと鉛筆マークが出てくるのでクリックして名前を「エンタングルメント」などにします。
(3) 右上の青の「Setup and run」をクリックします。
(4) 下の図のようなポップアップウィンドウが出てきます。
まず、量子シミュレーターでやってみましょう。シミュレーターは、本物の量子コンピューターで実験する前に、回路があっているか確認するためなどに使います。ポップアップウィンドウ左側のデバイス一覧をスクロールします。
(5) 下から2番目の「ibmq_qasm_simulator」を選びます。
(6) そのほかの設定はそのままで、右下の青い「Run on ibmq_qasm_simulator」をクリックして実行します。
6-4.png
(7) 結果を見てみましょう。左側のバーから矢印アイコンの「Composer jobs」をクリックします。
(8) すでに計算が終わっていると思いますので、「Completed:日付時間」をクリックします。
6-7.png
(9) ヒストグラムから、00が約50%、11が約50%ずつ観測されたことがわかります。より50%に近くするにはショット数を大きくします。
7-9.png

次に、ニューヨークにあるIBMの実物の量子コンピューターでやってみましょう。
(10) 再び右上の青い「Setup and run」をクリックします。
(11) スクロールして一番空いている(Total pending jobsの少ない)量子コンピューター・デバイスを見つけて選択します。緑色の丸で「Online」になっているものの中から選びます。(下から5番目の「ibmq_armonk」は1量子ビットなので選ばないでください。下のほうにある「simulator_」から始まるシミュレーターも今回は選ばないように注意してください。)IBMの量子コンピューターは、世界中の人が常に実験しているため、多少混んでいるときがあります。
7-11.png
私が今、この文書を書いている時には、「ibmq_lima」が13個のみ実験を待っている状態で最も空いていましたので、こちらを選びました。
(12) そのほかの設定はそのままで、右下の青い「Run on デバイス名」をクリックして実行します。
(13) 左上の「Jobs」をクリックして実行状況を確認します。
6-13.png

(14) 混雑の具合にもよりますが、しばらく、結果待ち(Pending)になります。「Pending:」をクリックしてみます。6-14.png
今の私の状況では計算が終わるまで9分かかるようです。
6-14-2.png
(15) 下のように計算が終わると、結果が表示されます。
6-15.png
シミュレーションの時とちがって、00と11以外の結果、01、10も出ています。実際の量子コンピューターの計算には、このように結果にエラーが含まれますが、00と11が最も多く観測されることがわかります。

7. 練習問題 B

次の状態の量子回路を作ってみましょう。答えは一つではないので、どんな作り方でもOKです。
ヒント:使うゲートはX、H、Z、CXゲートだけです!
7-1)  $\frac{1}{\sqrt{2}}(\ket{00}-\ket{11})$
7-1.png
 
7-2)  $\frac{1}{\sqrt{2}}(\ket{01}+\ket{10})$
7-2.png

7-3)  $\frac{1}{\sqrt{2}}(\ket{01}-\ket{10})$
7-3.png

みなさん、最後までできましたか?
ぜひ感想を下のコメント欄に残してください。

ここから先は更に詳しく学んでいきたい方のための応用編(の入り口紹介)です。

8. 応用編:IBM Quantum LabとQiskit

最後に、IBM Quantum Composerで作った量子回路をQiskitで実行する方法をご紹介します。これまで画面の右側には、「OpenQASM 2.0」という量子アセンブラ言語が表示されて、みなさんが作っている量子回路がリアルタイムにこのコードに変換されていました。
8-1.png
この「OpenQASM 2.0」をクリックして「Qiskit」を選択すると、Qiskitというpythonベースの量子プログラミング言語で同じように作成中の量子回路が表示されます。
ここで、「Open in Quantum Lab」をクリックしてみましょう。
8-2.png
先ほどのQiskitのコードが「IBM Quantum Lab」上に表示されます。
8-3.png

Qiskitを使うと更に高度な量子計算を行うことができます。詳しく学びたい方は、ぜひQiskitテキストブック「Qiskit を使った量子計算の学習」をご参照ください。

更新履歴

2022/03/03:2-1)の確率振幅のグラフを修正しました。

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?