量子プログラミング~マルレク・QA&トラブルシューティング


はじめに

最近、量子コンピュータの話題が増えてきており、たとえば日経新聞では取り上げられる機会が増えているように思います。
Googleが量子超越の実証を発表したり、暗号基盤の危機かもしれないと話題になったりといったことで、興味を持つ方が増えてきていると思います。

量子コンピュータの理解を深めるためには、実際に触ってみるのが一番の近道だと思います。
そして、そのひとつが量子プログラミングです。

しかしながら、どうにも馴染みのない言葉やら何やらが多い・・・。
そこで今回、マルレクの教材を使った学習を行うことにしました。

ここでは、マルレクの教材に沿って進める中で出てきた私の素朴な疑問トラブルシューティングを整理しておきたいと思います。

対象者

量子コンピュータの基本を学習しながら、量子プログラミングをやってみたい方。

前提

量子プログラミングの入門として以下を利用します。

  1. マルレク「量子コンピュータで学ぶ量子プログラミング入門」
  2. IBM Q Experience  (Qiskitバージョン:0.13.0)

1.マルレク「量子コンピュータで学ぶ量子プログラミング入門」

マルレクは、IT技術の普及などを目的に運営されています。
今回はその中の「量子コンピュータで学ぶ量子プログラミング入門」を利用します。
「0_setup.ipynb」の手順に沿って進めれば、準備は完了です。

2.IBM Q Experience

Webブラウザで使える量子プログラミングツールです。
アカウント登録すれば、誰でも使えます。

マルレクのノートブックは、「Qiskit Notebooks」でノートをインポートすることもできます。
  

■QA

✅ Q Experience の使い方がわからない!


画面の左端にあるヘルプマークを開こう。

基本的な使い方や、Slackコミュニティへのリンクなどがある。
但し、すべて英語になるため、日本語で知りたい場合は有志の翻訳やチュートリアルを探す必要がある。

例えば以下のページ。

✅ Qiskit の API はどこで確認できるの?

ヘルプ画面から辿ることができる。(Qiskit Documentation → API References)

直リンクはこちら。
https://qiskit.org/documentation/apidoc/qiskit.html

ちなみに、API Referenceは日本語で表示が可能。
左下のメニューで言語が切り替えられる。

✅ qubitの表現にはなぜ複素数が使われるのか?

qubitの状態は以下の式で表すことができる。

|\psi\rangle = \alpha|0\rangle + \beta|1\rangle

ここでの $\alpha, \beta$ はいずれも複素数であるが、なぜ複素数なのか?
以下が参考になる。

特に後者がわかりやすい。
この中のポイントを拾ってみる。

  • 虚数軸の導入は、数直線(一次元)上に展開された実数を平面(2次元)に広げるということ。(複素平面を作る)
  • 複素平面導入のポイントは、2変数で表される物理量などを一つの数字として取り扱えること。
  • 複素平面を導入すると2つの実数を使わなくても、一つの複素数で平面上の点を表せるので、代数計算が簡単になる場合がある。(典型的な例が波動の重ね合わせの記述)
  • 実数だけを用いたデカルト座標系で波動を取り扱うことも可能だが、計算が面倒になるから使っていない

<その他参考>

✅ |0〉の記号の意味は?

マルレク内にはket記法であると書かれているが、それ以上の詳しい説明はない。

ketを含むブラケット記法については以下が参考になる。

複素ベクトルの内積を表すために便宜的に導入された記法ということのようだ。

さらにEMANのページには 複素共役†(ダガー) についての説明もあるため、合わせて理解しておきたい。
※マルレクにも説明はあるが、簡略化されているため上記の方がわかりやすい。

✅ Cの表す意味とは?

qubitの状態は以下の式である。

|\psi\rangle = \alpha|0\rangle + \beta|1\rangle

規格化条件はこのように記述される。

|\alpha|^2+|\beta|^2=1 ; \alpha,\beta\in\mathbb{C}

ここで用いられる$\mathbb{C}$は、複素数(Complex number)を表す。
wikipediaが詳しい。

ちなみに$\in$は、集合に対する元の帰属関係を表す。
つまり$\alpha,\beta$は、複素数の集合$\mathbb{C}$の元であることを示す。

✅ qubitの状態はなぜブロッホ球でうまく表現できるのか?

qubitは以下の数式で表せるということだった。

|\psi\rangle = \alpha|0\rangle + \beta|1\rangle  ・・・(1)
|\alpha|^2+|\beta|^2=1・・・(2)

複素数は実数・虚数の2つの自由度を持っている(複素平面は2次元)。
式(1)の右辺で自由度を考えてみると、2つの複素数があるため合計で4の自由度ということになる。
さらに(2)の規格化条件により、自由度が1つ減り3になることから、3次元で表現できる。

式(1)をオイラーの公式などを使って変形することで、以下の数式が得られる。

 ※「EMANの物理学・量子力学」より

これを球にプロットしたものがブロッホ球ということになる。
以下が詳しい。

■トラブルシューティング

✅ [5_ibm_q.ipynb]でエラーが出る(UsageError)

マジックコマンドが使えないとのことで、以下のようにコードを書きかえてやればよさそうだ。

#%qiskit_backend_monitor backend_ibmq

from qiskit.tools.monitor import backend_monitor
backend_monitor(backend_ibmq)

API Reference - qiskit.tools.monitor

✅ [5_ibm_q.ipynb]でエラーが出る(TypeError)

現在、「monitor_async」なるキーワード引数はない。
API Reference - job_monitor

エラーなく動かすために、以下のように書き換える。

from qiskit.tools.monitor import job_monitor

#job_monitor(job, monitor_async=True)
job_monitor(job)

モニタリングについてはこちら(IBMQ + Qiskit 使い方まとめ)にも情報がある。

おわりに

マルレクの教材はわかりやすくできていると思います。
Qiskitの基本的な使い方を知ることが出来ました。

但し、説明部分においては、多少の前提知識がないと唐突な印象を受ける点がいくつかあるかもしれません。
書籍等とあわせて学習されることをおすすめします。