common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING

Nobisuke

Dekisugi


autoQAOA
DEEPSCORE

Overview
Service overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

Juliaでネットワーク形式で量子回路を描画する。初心者編。。。

Yuichiro Minato

2020/12/15 13:39

#Julia

今後は大きな量子回路をJuliaで描画したいです!今回はネットワークグラフ形式で書いてみます。

Juliaでグラフ描画

こちらを使います。

https://github.com/JuliaGraphs/GraphPlot.jl

ツール読み込み

まずはこの辺りを読み込みます。

import Pkg; Pkg.add(["LightGraphs", "GraphPlot", "Colors"])
using LightGraphs, GraphPlot, Colors

手作業

今回はまだJulia製の量子コンピュータシミュレータがないので、手作業で実装していきます。今回は量子機械学習で利用されるQCBM回路を書いてみます。

g = Graph()

#5量子ビット、RX,RZをかけた後にループ状にCXをかける回路を想定する。全部でベクトル5つ、RX,RZのゲートを5つずつ合計10。CXを5つですが、コントロールビットとターゲットビットで合計10、あとは測定で5。全部で30ノード。

add_vertices!(g, 30)

次に、ラベルを設定します。手作業で申し訳ない。。。

q = "q"
rx = "RX"
rz = "RZ"
c = "C"
x = "X"
m = ""

ノードにラベルとグループを割り当て、同一グループには同じ色を割り当てます。

nodelabel = [q,q,q,q,q, rx,rx,rx,rx,rx, rz,rz,rz,rz,rz, c,c,c,c,c, x,x,x,x,x, m,m,m,m,m]
nodegroup = [1,1,1,1,1, 2,2,2,2,2, 3,3,3,3,3, 4,4,4,4,4, 4,4,4,4,4, 5,5,5,5,5]
nodecolor = [colorant"lightseagreen", colorant"orange", colorant"skyblue", colorant"yellow", colorant"purple"]
nodefillc = nodecolor[nodegroup]

本当は自動でやりたいのですが、量子回路の量子ビットやゲート同士をつなぎます。今回はエッジで手作業で繋ぎました。。。

add_edge!(g, 1, 6)
add_edge!(g, 2, 7)
add_edge!(g, 3, 8)
add_edge!(g, 4, 9)
add_edge!(g, 5, 10)

add_edge!(g, 6, 11)
add_edge!(g, 7, 12)
add_edge!(g, 8, 13)
add_edge!(g, 9, 14)
add_edge!(g, 10, 15)

add_edge!(g, 11, 16)
add_edge!(g, 12, 21)
add_edge!(g, 16, 21)

add_edge!(g, 21, 17)
add_edge!(g, 13, 22)
add_edge!(g, 17, 22)

add_edge!(g, 22, 18)
add_edge!(g, 14, 23)
add_edge!(g, 18, 23)

add_edge!(g, 23, 19)
add_edge!(g, 15, 24)
add_edge!(g, 19, 24)

add_edge!(g, 24, 20)
add_edge!(g, 16, 25)
add_edge!(g, 20, 25)

add_edge!(g, 25, 26)
add_edge!(g, 17, 27)
add_edge!(g, 18, 28)
add_edge!(g, 19, 29)
add_edge!(g, 20, 30)

そして、最後に書き出しです。これで完了です!

gplot(g, layout=spectral_layout, nodelabel=nodelabel, nodefillc=nodefillc)

できました!

量子ビットqからRX,RZと1量子ビットゲートがかかり、そこからループ状のCXに入って、紫の測定に行きますが、ちょっとわかりにくいかもしれませんね、、、ノード間の距離を一定にするとか工夫が必要そうです。今回はJuliaを使って量子回路の描画の目処が立ったので、今後ツール化して行きたいと思います。以上です!

© 2025, blueqat Inc. All rights reserved