こんにちは、Juliaを使って量子コンピュータの計算がしたいです。前回はITensorというテンソルネットワークのライブラリを使って、そこから派生したLinQu.jlを使いたかったのですが、開発途中ぽいので、きちんとしているYao.jlを使うことにしました。
Juliaはインターフェイスがちょっと。。。な感じですが、めげずに使っていきたいと思います。今回はYao.jlのチュートリアルをちょっと改造して、簡単にして、GHZの計算をしてみたいと思います。
準備
インストールをします。
import Pkg; Pkg.add(["Yao", "StatsBase", "Plots"])
この辺りを使いました。早速ツールを読み込んで使ってみましょう。
using Yao, StatsBase, Plots
量子回路の記述
チェーンで記述できます。
https://tutorials.yaoquantum.org/dev/generated/quick-start/1.prepare-ghz-state/
こちらのチュートリアルを参考にしますが、ちょっと長くて疲れるので、短くしました。
circuit = chain(
4,
put(1=>H),
control(1, 2=>X),
control(2, 3=>X),
control(3, 4=>X)
)
results = zero_state(4) |> circuit |> r->measure(r, nshots=10)
量子ビットを準備して、Hゲートを適用しました。その後階段状にCXを配置しています。最後に0状態からスタートし、回路を適用して、10回測定を行います。結果は、、、
10-element Array{BitBasis.BitStr{4,Int64},1}:
0000 ₍₂₎
0000 ₍₂₎
1111 ₍₂₎
1111 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
1111 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
1111 ₍₂₎
めちゃくちゃ簡単に計算できました。上記の量子回路部分を工夫すればいけそうですね。
回路を繋げてみる
回路を別々に書いて繋げてみました。
circuit1 = chain(
4,
put(1=>H),
)
circuit2 = chain(
4,
control(1, 2=>X),
control(2, 3=>X),
control(3, 4=>X)
)
results = zero_state(4) |> circuit1 |> r->measure(r, nshots=10)
10-element Array{BitBasis.BitStr{4,Int64},1}:
0000 ₍₂₎
0001 ₍₂₎
0001 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0001 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0001 ₍₂₎
0001 ₍₂₎
最初の方は重ね合わせです。量子ビットは右から数えるタイプのようです。
results = zero_state(4) |> circuit1 |> circuit2 |> r->measure(r, nshots=10)
10-element Array{BitBasis.BitStr{4,Int64},1}:
1111 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
0000 ₍₂₎
1111 ₍₂₎
繋げて実行することで、GHZもできました。使い方は書き方に慣れれば普通に使えますね!便利です。Juliaで量子計算しましょう!以上です。