Googleの量子コンピュータフレームワークだ!Q#も一応トライしたが、マスターする前にある程度動かした状態で投げ出してしまっていた。
GitHub
ドキュメント
- Welcome to Cirq's documenttation! Welcome to Cirq’s documentation! — Cirq 0.1 documentation
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)
チュートリアル
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───────────────