Qiskitとは
「研究、教育及びビジネスにおいて今日の量子計算を活性化させるためのオープンソースの量子計算フレームワーク」である。Qiskitは、Terra、Aer及びAquaの3つで構成される。
An open-source quantum computing framework for leveraging today's quantum processors in research, education, and business
Qiskit Terra
Qiskit Terraは「ソフトウェア・スタックのためのプラットフォーム」である。Terraには、「回路及びパルスのレベルで量子プログラムを構成し、特定の物理的な量子プロセッサの制約に合わせて量子プログラムを最適化し、リモートで実験のバッチ実行を管理するための一連のツール」がある。また、Terraは「モジュールで構成されているため、回路最適化とバックエンドの機能拡張は容易」である。
Qiskit Terra provides the foundational roots for our software stack. Within Terra is a set of tools for composing quantum programs at the level of circuits and pulses, optimizing them for the constraints of a particular physical quantum processor, and managing the batched execution of experiments on remote-access backends. Terra is modularly constructed, simplifying the addition of extensions for circuit optimizations and backends. We welcome your contributions!
Qiskit Aer
Qiskit Aerは、「Qiskitソフトウェア・スタックのためのハイパフォーマンス・シミュレータ・フレームワーク」である。Aerは、「Terraでコンパイルされた回路を実行するための最適化済C++シミュレータ」を持ち、「実デバイスでの実行中に発生するエラーによる実ノイズ環境をシミュレーションするために、様々な調整が可能なノイズモデルを構築するためのツール」が含まれる。
Qiskit Aer provides a high performance simulator framework for the Qiskit software stack. It contains optimized C++ simulator backends for executing circuits compiled in Qiskit Terra, and tools for constructing highly configurable noise models for performing realistic noisy simulations of the errors that occur during execution on real devices.
Qiskit Aqua
Qiskit Aquaは、「短期間の量子計算アプリの開発に使うクロス・ドメイン量子アルゴリズムのライブラリ」が含まれる。Aquaは、「量子アルゴリズムを容易に追加できるプラガブルなフレームワーク」である。現在のところ、「短期間の量子コンピュータのための、化学、AI、最適化及び金融のアプリケーションを実験」できる。
Qiskit Aqua contains a library of cross-domain quantum algorithms upon which applications for near-term quantum computing can be built. Aqua is designed to be extensible, and employs a pluggable framework where quantum algorithms can easily be added. It currently allows the user to experiment on chemistry, AI, optimization and finance applications for near-term quantum computers.
インストール
システム要件
- OS
- Ubuntu 16.04 or later
- macOS 10.12.6 or later
- Windows 7 or later
- Python
- Python 3.5 or later.
by https://qiskit.org/documentation/install.html
事前準備
事前にpython-envをインストールしておく、しないと 「Python.h: そのようなファイルやディレクトリはありません」 というエラーが出る。
sudo apt install python-dev
sudo apt install python3-dev
pyenv
仮想環境作成。
mkdir qiskit
python3 -m venv qiskit
pip
pipでインストール。
pip install qiskit qiskit-aqua
または、公式サイトがJupiterNotebookを公開しているので、そこで動かしてみる手もある。
開発の流れ
Qiskitを使った量子計算のワークフローは以下の2つで構成される。
- Build:量子回路を作成
- Execute:さまざまなバックエンドでそれらを実行
以下でGetting Started with Qiskitに沿って、ワークフローの実例を紹介する。
Build
量子ビット定義
3量子ビットを定義。
import numpy as np
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute
q = QuantumRegister(3, 'q')
量子回路定義
量子回路 circ
を生成して、アダマール演算子Hと制御NOT演算子Cxを適用する。
circ = QuantumCircuit(q)
circ.h(q[0])
circ.cx(q[0], q[1])
circ.cx(q[0], q[2])
Execute
実験
バックグラウンド定義
CPUでいうとx86とx86_64みたいなアーキテクチャの違いみたいなものが量子コンピュータにもあるらしく、Qiskitはそれを「バックグランド」と呼んでいる。
で、典型的なバックグラウンドはすでに用意されているのでそれを使っておく。
from qiskit import BasicAer
backend = BasicAer.get_backend('statevector_simulator')
計算実行
計算を実行する。
job = execute(circ, backend)
結果取得
計算結果を取得する。
result = job.result()
outputstate = result.get_statevector(circ, decimals=3)
実験結果確認
文字列出力
実験結果を文字列出力する。
print(outputstate)
こんなんでてきた。
[0.707+0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j 0. +0.j
0.707+0.j]
グラフ出力
実験結果をグラフ出力する。
from qiskit.tools.visualization import plot_state_city
plot_state_city(outputstate)
こんなんでてきた。
by Getting Started with Qiskit
Qiskit Aqua
Oracle
Aquaのアルゴリズムはブラックボックス化されたOracleを与えることで駆動する。GiHubを見ると、OracleはPython EDAの単なるラッパーである。PythonEDAにより、ブール代数演算をサポートし、量子演算への変換を容易にしているようだ。