一匹の妖怪がIT産業を徘徊している――量子コンピューターという妖怪が。
というわけで、将来は立派なおばけになりたい私としても量子コンピューターに触れておきたい。
丁度、IBM Q Experience のように無料で
量子コンピューターを利用できるサービス (実行回数制限あり) もあるので、早速始めてみる。
と言いたいのだけれど、そう思い立った頃は PC を買い換えようかと考えていたので、一生懸命環境構築
したところで、すぐに環境を捨ててしまうことになる。
できるだけ手間いらずにしたい。こういう時は Web 上の IDE を使うのが一番。早速 Cloud9 を開く。
Cloud9、Amazon に買収されてた。
おのれー、Exit おめでとうございます💢
まあいいや、さくっと環境を作ってしまおう。
えーっと。
もー!もー!手軽に開発環境を用意できるのが良かったのに、めんどくさーい!
どうにか環境を用意できたので、IBM Q の実行環境を構築し始める。
まずは Python 3 を使うために AWS Cloud9 の Python サンプル
を参考にして virtualenv の仮想環境を構築してから切り替える。
$ unalias python
$ cd ~/environment/
$ virtualenv -p /usr/bin/python36 ibmq
$ source ibmq/bin/activate
次に pip で Qiskit をインストールする。
$ pip install qiskit
これで ローカルシミュレーター上でのプログラムの実行はできるようになったので、~/environment の配下に
ibmq_sample というディレクトリを作ってから、qiskit_sample.py というファイルを作って、
Qiskit documentation の Getting Started の最初に書いてあるコードをコピペする。
# 仮想環境のディレクトリ名、なんか別のにしとけばよかったな。
qiskit_sample.py を保存したら、実行する。バケラッタ!(実行の意)
$ python qiskit_sample.py
正常に実行できれば、こんな感じの結果が出力されるはず。
{'00': 525, '11': 499}
サンプルプログラムは get_counts メソッドが返した辞書オブジェクトをそのまま画面に表示していて、キーが結果として
得られた古典ビット列、 値が対応する古典ビット列の出現回数になっている。量子コンピューターの出力は結果とその
確率のペアらしいので、多分それを表現しているんだろう。
せっかくだからシミュレーターだけじゃなくて、実機でも実行してみたい。
というわけで、Qiskit のチュートリアルから適当なプログラムをコピペする。
ここで一つ問題が。
Qiskit のチュートリアルに載ってるサンプルプログラムの多くは、結果を柱状グラフで表示するのだけれど、
この柱状グラフが別ウィンドウで表示されてしまう。
ローカルの環境であれば特に問題はないが、今回は横着して Cloud9 を使ったのでグラフが出てこない。
というわけで、Qiskit の plot_histogram を改変して plot_histogram_file.py を作成し、グラフをファイルに出力する。
|
|
なんか、ほとんど plot_histogram のまんまだし、Python もよく知らないから行儀のいい書き方かどうか
怪しいけど、これでグラフがファイルに出力されるはず。
そいでもって、サンプルプログラムから呼び出すメソッドを plot_histogram_file に変えておく。
ここでは、チュートリアルの 1. Hello, Quantum World に載ってるプログラムを改変する。
|
|
あと、6行目の circuit_drawer はなんかエラーになるし、とりあえず不要なのでコメントアウトする。
それから、ファイル名を hello_quantum_world.py として保存する。
ソースコードを保存したら、IBM Q Experience にログインして、APIトークンを発行してから実行する。
$ python hello_quantum_world.py
実行するとAPIトークンを聞かれるので入力する。
Please input your token and hit enter:
何回かエラーが返ってくることがあるけれども、気にせずにプログラムの終了を待つと、
You have access to great power!
['ibmqx2', 'ibmqx4', 'ibmqx5']
The least busy backend is ibmq_5_tenerife
Status @ 0 seconds
{'job_id': None, 'status': <JobStatus.INITIALIZING: 'job is being initialized'>,
'status_msg': 'Job is initializing. Please, wait a moment.'}
{'job_id': '5b5428fe221a72003943d00f', 'status': <JobStatus.DONE: 'job has successfully run'>,
'status_msg': 'job has successfully run'}
You have made entanglement!
結果が返ってくる。
(ここの実行結果例は読みやすいようにエラー出力を省略して、さらに途中で改行している)
# available_backends の結果がチュートリアルと全然違うのが気になる。なんか間違えてるかな。
で、プログラムの実行が正常に終了していれば、result.svg というファイルがソースコードと同一の
ディレクトリに出力されているので、ダウンロードして開いてみると、
こんな感じのグラフが出てくる。
シミュレーターと違って実機の場合はノイズがあるので、 “00”、 “11” 以外の結果も出てくる。
とここまで、Cloud9 で IBM Q を動かしてみる方法を書いてみたものの、久々に試してみたらやたらと
エラーが出まくるし、Qiskit は名前からして変わってるしで何だかもやもやする。
あれか、妖怪のしわざってやつか。