common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


autoQAOA
Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

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