LoginSignup
8
8

More than 5 years have passed since last update.

量子コンピュータ学習時の手計算を代わりにやってくれるコード組んだ

Last updated at Posted at 2018-01-18

量子コンピュータの勉強、いくら紙あっても足りんわ。

……ということで、ゲート演算をいい感じにやってくれるライブラリ作ってみました。
https://github.com/gyu-don/gate_operation

特徴

  • 量子コンピュータの参考書などに出てくる小さい量子回路を再現するのが目的
  • メソッドチェーンっぽい書き方ができる
  • IPythonやJupyter Notebookなどのインタラクティブな環境での使いやすさを重視
  • 回路を作り終えてからシミュレートするのではなく、ゲートを適用するたびに計算が走る
  • バックエンドにNumPy版とSymPy版の両方を用意している(ただし SymPyはNumPyより遅い)
  • Qubitと、ユニタリ行列と、後で再利用できるよう操作を覚えておくためのクラスの3種類を用意している
  • 現時点ではコロコロ仕様変えるかも。バグったコードをmasterにpushしたりとかもよくある。

まだだけど、そのうちやりたいこと(上の方が、優先したいお気持ちが強い)

  • 高速化
  • いろんな量子回路を組んで、examplesとしてgithubに載せる
  • ユニタリ行列のフィデリティを計算する機能を追加
  • 観測を何度も行うとか、量子トモグラフィ的なやつとか、そういう機能の充実
  • Jupyter Notebook用の表示をもっとかっこよくする(Displayとか使う)
  • UnitTest作る
  • ドキュメント書く
  • OpenQLプロジェクトとの統合
  • PyPIに登録
  • OpenQASMや、qiskitのQuantumProgram、pyquilのProgramへの変換

使い方

量子テレポーテーションやってみよう

量子テレポーテーション

import np_gate # NumPy backendを使用

# aliceに何か1Qubitもたせる。
alice = np_gate.Qubit(1).h(0).t(0)

# シミュレータなので、クローンできる。
# |circuit> = |alice>
circuit = alice.clone()

# |0>を2個付け加える
# |circuit> = |alice>|00>
circuit.append_qubit(2)

# 付け加えた2つをベル状態にする
# |circuit> = (|alice>|00> + |alice>|11>) / sqrt(2)
circuit.h(1).cx(1, 2)

# 以下の量子ゲートを適用
# --*--H-----*--
# --|-----*--|--
# --X-----X--Z--
circuit.cx(0, 1).h(0).cx(1, 2).cz(0, 2)

# 1番目、0番目のQubitを捨てる(観測される)
circuit.drop_qubit(1).drop_qubit(0)

# 残ってるやつとaliceのQubitとのフィデリティを取ると、だいたい1になる(テレポーテーション成功)
print(alice.fidelity(circuit)) # => Almost 1

2ビットのGroverでもっと詳細な使い方

ここに置いてます。
https://github.com/gyu-don/gate_operation/blob/master/examples/Grover%20algorithm%202qubit.ipynb

Shorの誤り訂正符号(1Qubit送るのに9Qubit使ったら、そのうちの1つがごちゃごちゃになっても復元できるやつ)

ここに置いてます。ちなみに、SymPyでやると9Qubitは非常に計算が重かったので、NumPyでやってます。
https://github.com/gyu-don/gate_operation/blob/master/examples/Shor%20error%20correcting%20code.ipynb

まとめ

量子コンピュータはいいぞ

8
8
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
8
8