LoginSignup
22
15

More than 5 years have passed since last update.

PythonフレームワークのQulacsで量子コンピュータに触れてみる

Last updated at Posted at 2018-12-19

最近はベンチャーも出てきていて、ブームがきているっぽい!
もともと物理学を専攻していたので、せっかくなのでいま流行りの物理に触れてみました。

量子コンピュータとは?

概要はここ(Qmediaという専門家が書いているサイト)などを参考に

通常のコンピュータは 0 or 1 の ビットで情報を表現して、反転させたりする操作で計算します。

 それに対して、量子コンピュータは0と1の重ね合わせ状態を作ることができて、そのような量子力学的なbitのことを量子ビット(qubit)といいます。
例えば、10個の量子ビット(10qubit)を準備すれば、2^10の1024通りの重ね合わせ状態を確定させることなく保持している状態を作ることができます。

 もうひとつ重要なポイントとして、量子ビットの状態は干渉ができるということです。量子ビットに対して適当な操作をして(干渉させて)、欲しい結果の状態が得られるようにすることができる(ここが一番すごいところ)。例えば、有名なものにショアのアルゴリズムという古典コンピュータより早く素因数分解を解くアルゴリズムがあります。

量子アルゴリズムについて詳しくはまだわからないので、これから勉強します。

プログラマとして今回は、量子計算をプログラミングを通して少し試してみたいと思います。いくつか量子コンピュータシミュレータはあるのですが、せっかくなので日本製のQulacs(京都大学の藤井研究室発 Qunasysがメンテナンス)を使ってみたいと思います。普段Pythonは使わないので、今回は手軽にPythonの環境を提供してくれているGoogle Colaboratory を使っていきます。

Google Colaboratory を触ってみよう

!ls のように ! をつけると、シェルコマンドが打てるようになります。これを使って、pipを動かしてQulacsを動かしていきます。

Qulacs をインストールしよう

!pip install qulacs

これをColaboratoryのノートブックで実行するとインストールできます。

Qulacsは量子回路シミュレーターで、現在のノイズのあるような量子コンピュータを再現するような機能も付いてるみたいです。
NISQなどの研究にも使えるらしい。

NISQ : Noisy Intermediate-Scale Quantum Computer

ノイズがあって、中くらいの大きさの量子コンピューター
大きさっていうのは、計算に使える量子ビットの数

Qulacsを使ってみよう

量子アルゴリズムに詳しくないので、今回はQulacsでテキトーな量子計算をしてみたいと思います。

量子計算は以下のような手順で行います。

  1. 量子回路に入力する量子状態を用意します
  2. 量子回路を作って計算します
  3. 計算後の量子状態を測定します
from qulacs import Observable, QuantumCircuit, QuantumState
from qulacs.gate import Y,CNOT,merge

# -----1. 量子回路に入力する量子状態を用意しましょう ----
# 3量子ビット用意します
state = QuantumState(3)
# 今回はランダムな初期状態を用意します
state.set_Haar_random_state()

# -----2. 量子回路を作って計算しましょう -----------
# 3量子ビットに対しての量子回路を作っていきます
circuit = QuantumCircuit(3)
# 0番目の量子ビットにXゲートをかけます
circuit.add_X_gate(0)
# CNOTゲートとYゲートとの組み合わせを作ります
merged_gate = merge(CNOT(0,1),Y(1))
# 組み合わせたゲートを回路に追加します
circuit.add_gate(merged_gate)
# 1番目の量子ビットにRXゲート(X軸回転ゲート)をかけます
circuit.add_RX_gate(1,0.5)
# 最後に作った量子回路で量子計算を実行します
circuit.update_quantum_state(state)

# -----3. 計算後の量子状態を測定しましょう -----------
# 今回は observableを使って物理量を測定してみます
# 3量子ビットを観測する用意をします
observable = Observable(3)
# 3番目の量子ビットのZ軸方向を測ります(上(+1)を向いているか下(-1)を向いているか)
observable.add_operator(1.0, "Z 2")
# 量子ビットが上向きか下向きかの期待値を計算します
value = observable.get_expectation_value(state)
print(value)

まとめ

量子コンピュータの概略の説明とツールとしてQulacsを使用して量子計算を試しました。新たにQulacsというツールを使ってPythonを書くことができ、いい学びになりました。

量子アルゴリズムについて勉強しなかったので、量子計算について詳しくわからなかったので、今後アルゴリズムについて勉強して、量子計算について書きたいです。通常のコンピュータよりも量子コンピュータが速いということも量子アルゴリズムの勉強の中で理解したいです。

22
15
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
22
15