common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

Sign in
Sign up
common.title

中性原子量子シミュレータBloqade.jlをみてみる。その6。量子多体スカー(傷跡)状態。

Yuichiro Minato

2022/10/31 13:23

熱平衡に至らず動的な運動を続ける量子多体スカーと呼ばれる状態についてbloqade.jlからリュードベリ原子を使った現象を確認します。

参考

https://queracomputing.github.io/Bloqade.jl/dev/tutorials/3.quantum-scar/main/

今回は5.72マイクロメートル間隔で9量子ビット見ます。

nsites = 9
atoms = generate_sites(ChainLattice(), nsites, scale = 5.72)

初期状態は以前にみた、反強磁性の秩序状態であるNeel状態を実現するため、時間発展を実装しています。こちらは、オメガを一定にかけ、Δは線形で増加させます。

Δ1 = piecewise_linear(clocks = [0.0, 0.3, 1.6, 2.2], values = 2π * [-10.0, -10.0, 10.0, 10.0]);
Ω1 = piecewise_linear(clocks = [0.0, 0.05, 1.6, 2.2], values = 2π * [0.0, 4.0, 4.0, 0.0]);

そして、そのNeel状態からオメガを一定値、デルタを0にしてスカー状態を実現します。

Ω2 = constant(duration = 2.0, value = 2 * 2π);
Δ2 = constant(duration = 2.0, value = 0);

Ω_tot = append(Ω1, Ω2);
Δ_tot = append(Δ1, Δ2);

fig, (ax1, ax2) = plt.subplots(ncols = 2, figsize = (12, 4))
Bloqade.plot!(ax1, Ω_tot)
Bloqade.plot!(ax2, Δ_tot)
ax1.set_ylabel("Ω/2π (MHz)")
ax2.set_ylabel("Δ/2π (MHz)")
fig

パラメータの変化具合はこの通りです。

前半部分はNeel状態を作るために、デルタをマイナスにおいて基底状態からスタートし、リュードベリブロッケードを使ってNeel状態を実現します。

その後、オメガを再度2.0に固定し、逆にデルタは0にしてリュードベリ状態の任意の操作を解除して、スカー状態を実現させます。

h = rydberg_h(atoms; Δ = Δ_tot, Ω = Ω_tot)

早速量子シミュレーションですが、基底状態からスタートします。

reg = zero_state(nsites);

ODEソルバーというのを使うらしいです。

total_time = 4.2;
prob = SchrodingerProblem(reg, total_time, h);
integrator = init(prob, Vern8());

ここでは、量子ビットの値の期待値と、量子もつれを図るためのエンタングルメントエントロピーを見ます。

entropy = Float64[]
densities = []
for _ in TimeChoiceIterator(integrator, 0.0:1e-3:total_time)
push!(densities, rydberg_density(reg))
rho = density_matrix(reg, (1, 2, 3, 4, 5)) # calculate the reduced density matrix
push!(entropy, von_neumann_entropy(rho)) # compute entropy from the reduced density matrix
end

結果を見てみると、

clocks = 0:1e-3:total_time
D = hcat(densities...)

fig, ax = plt.subplots(figsize = (10, 4))
shw = ax.imshow(real(D), interpolation = "nearest", aspect = "auto", extent = [0, total_time, 0.5, nsites + 0.5])
ax.set_xlabel("time (μs)")
ax.set_ylabel("site")
ax.set_xticks(0:0.4:total_time)
ax.set_yticks(1:nsites)
bar = fig.colorbar(shw)
fig

2.2マイクロ秒まではNeel状態をつくり、2.2マイクロ秒以降はスカー状態が実現されています。次に量子もつれの度合いを示すエンタングルメントエントロピーを見ます。

fig, ax = plt.subplots(figsize = (10, 4))
ax.plot(clocks, entropy)
ax.set_xlabel("time (μs)")
ax.set_ylabel("entanglement entropy")
fig

ネール状態では、もつれは一定を示し、その後スカー状態ではエンタングルメントエントロピーが増大しているのが見えます。

チュートリアルでは、最後に初期状態を変化させ、クリロフ時間発展で量子状態を見ていました。

hd = rydberg_h(atoms; Ω = 4π)
total_time = 1.2;
clocks = 0.0:1e-2:total_time;

init_d = product_state(bit"100000101")
prob_d = KrylovEvolution(init_d, clocks, hd)
density_mat_d = zeros(nsites, length(clocks))

for info in prob_d
for i in 1:nsites
density_mat_d[i, info.step] = rydberg_density(info.reg, i)
end
end

fig, ax = plt.subplots(figsize = (10, 4))
shw = ax.imshow(
real(density_mat_d),
interpolation = "nearest",
aspect = "auto",
extent = [0, total_time, 0.5, nsites + 0.5],
)
ax.set_xlabel("time (μs)")
ax.set_ylabel("site")
ax.set_xticks(0:0.2:total_time)
ax.set_yticks(1:nsites)
bar = fig.colorbar(shw)
fig

リュードベリブロッケードによる複雑な量子状態が見て取れます。面白いですね。。。以上です。

© 2025, blueqat Inc. All rights reserved