FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Googleの量子コンピュータNISQ向けオープンソースフレームワークCirqを試す (1. インストールとチュートリアル)

https://github.com/quantumlib/Cirq/raw/master/docs/Cirq_logo_color.svg?sanitize=true

Google量子コンピュータフレームワークだ!Q#も一応トライしたが、マスターする前にある程度動かした状態で投げ出してしまっていた。

GitHub

github.com

ドキュメント

Cirqのインストール

インストールは Ubuntu 18.04 LTS の上で行った。 "Installing Cirq"を参考にインストールする。

$ sudo apt-get install python3-tk texlive-latex-base latexmk
$ pip3 install --upgrade pip
$ pip install cirq

動作確認は以下で実行するらしい。なるほど、実行できた。でもこれは何だ?

$ python -c 'import cirq; print(cirq.google.Foxtail)'
(0, 0)───(0, 1)───(0, 2)───(0, 3)───(0, 4)───(0, 5)───(0, 6)───(0, 7)───(0, 8)───(0, 9)───(0, 10)
│        │        │        │        │        │        │        │        │        │        │
│        │        │        │        │        │        │        │        │        │        │
(1, 0)───(1, 1)───(1, 2)───(1, 3)───(1, 4)───(1, 5)───(1, 6)───(1, 7)───(1, 8)───(1, 9)───(1, 10)

チュートリアル

Tutorialを読んで、ソースコードをコピペしてみる。

Qubitの定義

以下のような記述でQubitを定義するらしい。そしてこれはすべてPythonで記述できる。

  • cirq_qubits.py
import cirq

# define the length of the grid.
length = 3
# define qubits on the grid.
qubits = [cirq.GridQubit(i, j) for i in range(length) for j in range(length)]
print(qubits)
$ python3 cirq_qubits.py
[GridQubit(0, 0), GridQubit(0, 1), GridQubit(0, 2), GridQubit(1, 0), GridQubit(1, 1), GridQubit(1, 2), GridQubit(2, 0), GridQubit(2, 1), GridQubit(2, 2)]

この「グリッド」が何者なのかはまだよくわからないが、まあとりあえずこの例では3×3の量子ビットを定義したと考えていいだろう。

これに対してHゲート(Hadamard)と、Xゲート(量子の回転)を定義する。量子ビットのグリッド(X, Y)X+Yが偶数ならばHゲート、奇数ならばXゲートを適用する。

$ python3 cirq_qubits.py
(0, 0): ───H───────

(0, 1): ───────X───

(0, 2): ───H───────

(1, 0): ───────X───

(1, 1): ───H───────

(1, 2): ───────X───

(2, 0): ───H───────

(2, 1): ───────X───

(2, 2): ───H───────

とりあえずチュートリアルをしっかり読まないと理解できそうにないが、コピペするとこんな格好いい量子回路を作ることができるらしい。面白いな!

$ ./qbit_one_step.py
(0, 0): ───X^0.1───X───────────@───────X───────────────────────────────────────────────────────@───────────────
                               │                                                               │
(0, 1): ───X^0.1───────────────┼───────X───@───────X───────────────────────────────────────────@^0.3───@───────
                               │           │                                                           │
(0, 2): ───X^0.1───Z^0.2───────┼───────────┼───────X───@───────X───────────────────────────────────────@^0.3───
                               │           │           │
(1, 0): ───X^0.1───Z^0.2───X───@^0.3───X───┼───────────┼───────X───@───────X───────────────────────────────────
                                           │           │           │
(1, 1): ───X^0.1───Z^0.2───────────────X───@^0.3───X───┼───────────┼───────────@───────────────────────────────
                                                       │           │           │
(1, 2): ───X^0.1───────────────────────────────────X───@^0.3───X───┼───────X───┼───────@───────X───────────────
                                                                   │           │       │
(2, 0): ───X^0.1───────────────────────────────────────────────X───@^0.3───X───┼───────┼───────────────@───────
                                                                               │       │               │
(2, 1): ───X^0.1───Z^0.2───────────────────────────────────────────────────────@^0.3───┼───────────────@^0.3───
                                                                                       │
(2, 2): ───X^0.1───Z^0.2───────────────────────────────────────────────────X───────────@^0.3───X───────────────
f:id:msyksphinz:20180725002739p:plain