はじめに

時々勉強会を開催していますが、windowsのひとやmacの人やlinuxの人がいてなかなか環境を揃えるのが大変です。ですので、ブラウザベースで簡単にjupyter notebookみたいなpythonかける環境があるといいなと考えました。

google colaboratory

googleから簡単にpython環境をブラウザベースで使用できるものがでてましたので、それに量子コンピュータ向けのSDKをいれて見て計算して見ました。
使用の仕方は簡単で、特に設定なく、下記のページにアクセスしてログインするとすぐにpythonで書き始められます。
https://colab.research.google.com

Welcome to Colaboratory!
Colaboratory is a Google research project created to help disseminate machine learning education and research. It's a Jupyter notebook environment that requires no setup to use and runs entirely in the cloud.Colaboratory notebooks are stored in Google Drive and can be shared just as you would with Google Docs or Sheets. Colaboratory is free to use.For more information, see our FAQ.

使用するSDK

量子ゲートモデルは、
Rigett社のPyquil
https://github.com/rigetticomputing/pyquil

IBM社のQiskit
https://github.com/QISKit/qiskit-sdk-py

量子アニーリングは手前味噌ですが、
MDR社のwildcat
https://github.com/mdrft/wildcat

です。

まずRigetti社のPyquil

細かいことはこちらをご覧ください。
https://qiita.com/YuichiroMinato/items/9de89b4467e3341c9dbd

早速インストールしていきます。

!pip install pyquil

これで早速インストールされました。
続いて設定ファイルを作成します。

!touch .pyquil_config

これで設定ファイルができました。
この設定ファイルに設定内容を書き込みます。
詳しい内容は下記を参照していただきまして、API情報を書き込みます。
https://qiita.com/YuichiroMinato/items/9de89b4467e3341c9dbd

*じるしの部分を自分の取得した情報と入れ替えてください。

!echo "[Rigetti Forest]\nkey: ***********************\nuser_id: ***************************" >> .pyquil_config

こうしますと設定は完了ですのであとはコードを書きます。
RigettiのQVM、量子バーチャルマシンへ接続して波動関数を取得します。

example.py
from pyquil.quil import Program
from pyquil.api import QVMConnection
from pyquil.gates import *

qvm = QVMConnection()
p = Program(H(0), CNOT(0,1))
qvm.wavefunction(p).amplitudes

アダマールとCNOTを含む回路を作成し、波動関数を得るということをしました。
実行を行うと下記のように正しく結果を得ることができました。

result
array([0.70710678+0.j, 0.        +0.j, 0.        +0.j, 0.70710678+0.j])

続きまして同様にIBMのQiskit

QiskitはIBMの出している量子コンピュータ向けのSDKです。
こちらもまずはインストールです。

!pip install qiskit

実機に繋がない限りはこれで終わりですので、
早速コードを書きます。

ibmexample.py
import qiskit

qr = qiskit.QuantumRegister("qr", 2)
cr = qiskit.ClassicalRegister("cr", 2)
qc = qiskit.QuantumCircuit(qr, cr)

qc.h(qr[0])
qc.cx(qr[0], qr[1])
qc.measure(qr, cr)

qp = qiskit.QuantumProgram()
qp.add_circuit("bell", qc)

print("Local backends: ", qiskit.backends.discover_local_backends())

sim_result = qp.execute("bell", backend='local_qasm_simulator', shots=1024, seed=1)

print("simulation: ", sim_result)
print(sim_result.get_counts("bell"))

これを実行しますと無事、下記の通り取り出すことができました。

result
simulation:  COMPLETED
{'00': 512, '11': 512}

最後に量子アニーリングwildcat

再度手前味噌ですが、量子アニーリングのイジング向けのアプリケーション開発環境wildcatです。

具体的な使用の仕方は下記が参考になります。
wildcatで4x4の数独を解いてみた
https://qiita.com/gyu-don/items/0c59423b12256821c38c

wildcatで巡回セールスマン問題を試してみた
https://qiita.com/yokomakura/items/48cf83ad1103ff8161e9

まずは同様にインストールから

!pip install wildcat

無事インストールが完了。続きましてはランダムのJijの行列を使用して、
エネルギーとスピンの配列を求めて見ます。

wildcatexample.py
from wildcat.util.matrix import random_symmetric_matrix
from wildcat.solver.ising_hamiltonian_solver import IsingHamiltonianSolver
from wildcat.network.local_endpoint import LocalEndpoint

Jij = random_symmetric_matrix(size=40)
solver = IsingHamiltonianSolver(ising_interactions=Jij)

def callback(arrangement):
    e = solver.hamiltonian_energy(arrangement)
    print("Energy: ", e)
    print("Spins: ", arrangement)

solver.solve(callback, endpoint=LocalEndpoint())

こちらも無事答えが出ました。

result
Energy:  -138.75303926852985
Spins:  [ 1 -1 -1  1  1  1 -1 -1 -1 -1  1  1 -1 -1  1 -1 -1 -1 -1  1 -1  1  1 -1
  1  1 -1  1  1 -1 -1 -1  1  1  1 -1  1 -1  1  1]
<Future at 0x7f9a3d4a80b8 state=finished returned ndarray>

まとめ

簡単な計算はブラウザベースで簡単に実行ができます。
実際に使っている雰囲気はこのような感じです。

1.png

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.