common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Contact
Event
Project
Research

Terms of service (Web service)

Terms of service (Quantum and ML Cloud service)

Privacy policy


Sign in
Sign up
common.title

Julia + Yao.jlを使った量子計算

Yuichiro Minato

2020/12/15 04:33

#Julia #Yao

こんにちは、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で量子計算しましょう!以上です。

© 2025, blueqat Inc. All rights reserved