Raspberry PIで量子コンピューターをシミュレーションする(blueqat環境構築編)

## :atom: この記事の目的

現代のコンピューターの性能を凌ぐと期待されている量子コンピューター。
ハード面ではまだまだ技術的な問題があります(令和2年現在)が、いずれこれらの課題が解消され、実用的な段階に入ることが望まれています。

量子コンピューターの実機は量子力学などの物理法則に従って挙動を示しますが、この挙動を現代のコンピューター(古典コンピューターとも呼びます)の上で仮想的に実現したものをシミュレータと呼びます(シミュレータは一般用語ですが)。

この記事では、持ち運びにも便利なシングルボードコンピューターのラズベリーパイ(Raspberry PI)を使って、量子コンピューティング・シミュレータを作ってみたいと思います。

## :atom: 量子コンピューティング・シミュレータ ソフトウェア「blueqat」

量子コンピューティング・シミュレータを実現するソフトウェアとして、日本では、blueqat株式会社(旧称、MDR株式会社)からオープンソースの **blueqat** がリリースされています。blueqatは”ブルーキャット”と発音します。(マンガに出てくる、日本の超スーパーコンピュータを備えた青色の猫型ロボットが名前の由来だそうです)


■**blueqat：オープンソース量子コンピューティングプラットフォーム**
https://blueqat.com/?hl=ja

blueqatの特徴は、直感的に扱いやすい上に、アニーリング方式やゲート方式の計算ロジックを備えた多機能性で、世界的にも人気のソフトウェアです。

また、blueqatはPython言語で書かれており、動作するにはPythonの環境が必要です。

## :atom: Pythonのバージョン確認とインストール

今回は以下の内容でRaspberry PIを用意しました。

■Raspberry PI スペック
(令和2年7月時点)

>Raspberry PI バージョン：Raspberry PI 4 Model B (8GB)
>OSバージョン：Linux raspberrypi 4.19.97-v7l
>Pythonバージョン：Python 3.7.3
>Micro SDカード容量：16GB

Raspberry PIのインストールでは、本家サイトからNOOBS v3.3.1を取得し、Micro SDカード上に展開、その後Raspberry PIを起動しインストールを進めました。


インストール完了後、プロンプト画面(LXTerminal)を起動し、Pythonのコマンド `python -V` を実行しPythonのバージョンを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d208887c-7154-b5e9-f0fd-1186b95d70f5.png)

標準設定でpythonコマンドはPython2を指定していました。
続いて `python3 -V` とコマンドを実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/29170be2-531a-fb11-700d-a46a49232a84.png)

当マシンの標準設定では、Python3はコマンドpython3で実行される設定のようです。
では、blueqatをインストールします。

`pip install blueqat`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/42396c4c-1385-c172-54b1-3b88d4b08d99.png)

blueqatをインストールする際にいくつかのエラーが出ましたので以下にまとめました。以下の「インストール時のトラブルシューティング」をご参照下さい。

インストールが終わりましたら、「インストール後の動作確認」へ進んで下さい。


## :atom: インストール時のトラブルシューティング

blueqatをインストールする際にいくつかのエラーが出ましたので以下にまとめました。

**①pipインストールエラーの対応**

pip installを実行すると、以下のエラーが出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/7aa32bc3-393a-07e7-0653-5f058a5c7345.png)

これは、システムにpipモジュールが無いためにおこるエラーです。
以下のコマンドでpipモジュールをインストールして下さい。

`curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py`

以下はコマンド実行後の様子です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/689629db-914e-e584-41e6-d9b6f3c012a5.png)
モジュール取得後、以下でインストール
`sudo python get-pip.py`


**②pythonコマンドのエラーの対応**

Pythonのバージョン確認を行った際に、システムの標準設定ではPython2を指定していました。blueqatのインストール処理内部で「python ...」コマンドが実行されるため、pythonコマンドがPython3を指すようにシステムの修正が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/a6db01cc-d284-0593-96b2-dd902ebe1b2e.png)

以下のコマンドで修正を行って下さい。

`sudo ln -sf /usr/bin/python3 /usr/bin/python`
※強制実行オプション"f"が付いているので実行の際はご注意下さい。

修正後は、`python -V` コマンドでPython3が指定されていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/953b4276-98c3-3be0-247c-0bb020a23d02.png)

**③scipyモジュールインストールエラーの対応**

内部的にscipyモジュールをインストールする際に、いくつかの補助モジュールが不足しているために生じるエラーです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d38d2146-351d-68d5-02df-1f7c6d0c800f.png)

以下の2つのコマンドを予め実行して下さい。
`sudo apt-get install libatlas-base-dev`
`sudo apt-get install gfortran libopenblas-dev liblapack-dev`


## :atom: インストール後の動作確認

以下を実行し、念のためblueqatが正常に動作することを確認して下さい。

**①バージョンの確認**

`pip list | grep blueqat`
バージョンが表示されればOKです。
(以下は令和2年7月現在)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1c9fd994-8940-da78-8ab6-e92ef6c473a3.png)



**②importのテスト**

python対話モードで以下を実行して下さい。
`from blueqat import Circuit`
エラーが出なければOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/03fee6d4-04f2-c70c-6e81-3aafe8d8da4b.png)



**③量子演算のテスト**
Hゲート(アダマールゲート)を作用させてみます。
`Circuit().h[0].run()`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/0a4c6f27-7fac-453f-0ccf-9412baf87335.png)


動作に問題無ければこれで終了です。


## :atom: 関連情報

■Blueqatで簡単な頂点被覆問題を解く
https://qiita.com/ttlabo/items/b4ab222ef9c5ee99233c

■Blueqatでナップサック問題を解く一例
https://qiita.com/ttlabo/items/537564c90056a6d56879

## :atom: ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。