1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker, Jupyter-notebook, JuliaでQiskitを使った量子計算の学習

Posted at

Macで確認しましたが、WindowsでもLinuxでもDockerが使える環境なら使えると思います。

PythonのQiskitをJuliaから呼んでるだけなので、特にJuliaにこだわりの無い方は普通にこっち↓でやった方が良いでしょう。juliaでやると結構ハマり点が多くて苦労します。

適当なディレクトリを作って、

mkdir qiskit_julia && cd qiskit_julia

適当なテキストエディタでDockerfileとdocker-compose.ymlを作る。

Dockerfile
FROM jupyter/datascience-notebook

USER ${NB_UID}

# Add Julia packages.
RUN julia -e 'import Pkg; Pkg.update()' && \
    julia -e 'import Pkg; Pkg.add("PyCall"); Pkg.add("PyPlot"); Pkg.add("Distributions"); Pkg.add("ForwardDiff")' && \
    python -m pip install --upgrade pip && \
    python -m pip install qiskit qiskit-terra[visualization] \
                          git+https://github.com/qiskit-community/qiskit-textbook.git#subdirectory=qiskit-textbook-src
docker-compose.yml
version: "3.8"
services:
  julia-qiskit-notebook:
    build: .
    image: julia-qiskit-notebook
    volumes: 
        - ${PWD}/:/home/jovyan/work
    ports:
        - 8888:8888
    container_name: julia-qiskit-notebook
    environment:
        - JUPYTER_ENABLE_LAB=yes

下の様にコンテナを立ち上げると、

docker-compose up

こんなのが出てくるので、

julia-qiskit-notebook  | [C 2022-04-14 06:03:19.548 ServerApp]
julia-qiskit-notebook  |
julia-qiskit-notebook  |     To access the server, open this file in a browser:
julia-qiskit-notebook  |         file:///home/jovyan/.local/share/jupyter/runtime/jpserver-9-open.html
julia-qiskit-notebook  |     Or copy and paste one of these URLs:
julia-qiskit-notebook  |         http://[何か英数字列]:8888/lab?token=[何か英数字列]
julia-qiskit-notebook  |      or http://127.0.0.1:8888/lab?token=[何か英数字列]

http://127.0.0.1:8888/?token=[何か英数字列]の箇所を選択し、URLとしてブラウザで開きます。

Jupyter Notebookが立ち上がるので、後はこのサイトを見て学習すれば良いが、

pythonとjuliaの違いで、ソースを少し書き換える必要がある。例えば、pythonのコード

# Click 'try', then 'run' to see the output,
# you can change the code and run it again.
print("This code works!")
from qiskit import QuantumCircuit
qc = QuantumCircuit(2) # Create circuit with 2 qubits
qc.h(0)    # Do H-gate on q0
qc.cx(0,1) # Do CNOT on q1 controlled by q0
qc.measure_all()
qc.draw('mpl')

は、juliaでは

using PyCall
using PyPlot
qk = pyimport("qiskit")
# Click 'try', then 'run' to see the output,
# you can change the code and run it again.
print("This code works!")
# from qiskit import QuantumCircuit
qc = qk.QuantumCircuit(2) # Create circuit with 2 qubits
qc.h(0)    # Do H-gate on q0
qc.cx(0,1) # Do CNOT on q1 controlled by q0
qc.measure_all()
print(qc.draw("mpl"))

qc.draw("mpl")の文字列引数はpythonではシングルクォートだが、juliaではダブルクォートになる。

最終行のprint(qc.draw("mpl"))だが、qc.draw("mpl")と書いてもエラーにはならないが、同じ図が2つも表示されてしまう。
表示形式がmplでなくても良い場合はqc.draw()と書きprintは要らない。逆にprint(qc.draw())と書くと図が汚く表示されてしまう。

他にも、pythonで、

from math import sqrt
qc = QuantumCircuit(1) # qcを再定義します。
initial_state = [0+1.j/sqrt(2), 1/sqrt(2)+0.j]
qc.initialize(initial_state, 0)
qc.draw("mpl")

が、juliaで、

qc = qk.QuantumCircuit(1) # qcを再定義します。
initial_state = [0+1im/sqrt(2), 1/sqrt(2)+0im]
qc.initialize(initial_state, 0)
print(qc.draw("mpl"))

とか… まあpythonとjuliaの違いを理解していれば良いだけかも知れません。

ブロッホ球とかも出せます。
python

from math import pi
from qiskit_textbook.widgets import plot_bloch_vector_spherical
coords = [pi/2,0,1] # [Theta, Phi, Radius]
plot_bloch_vector_spherical(coords) # 球面座標を持つブロッホベクトル

julia

widgets = pyimport("qiskit_textbook.widgets")
coords = [pi/2,0,1] # [Theta, Phi, Radius]
print(widgets.plot_bloch_vector_spherical(coords)) # 球面座標を持つブロッホベクトル
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?