Wolfram quantum framework for analog QPUs: QuEra Aquila case
Wolfram quantum framework for analog QPUs: QuEra Aquila case
Wolfram Quantum Team
quantum AT wolfram.com
Analog quantum processing units (quantum annealers) use continuous variables for optimization tasks, such as finding global minima. Gate-based quantum computers use discrete quantum gates to manipulate qubits for versatile quantum algorithms, including factorization, simulation, and optimization. One example of analog Quantum Processing Units (QPUs) is Aquila, which is a neutral-atom QPU from QuEra Computing, with up to 256 qubit. Aquila is also available on Amazon Braket, which is accessible using AWS service connect from a Wolfram notebook. In this computational essay, we will focus on some examples from QuEra's recent white paper, and do the simulation using quantum functionalities of Wolfram quantum framework, and also show how to send queries to Aquila, using Amazon Braket.
This notebook has been published in the Wolfram Community, too: https://community.wolfram.com/groups/-/m/t/2983137
H(t)(t)+|-(t)+
∑
j
Ω
j
2
i(t)
ϕ
j
e
g
j
r
j
-i(t)
ϕ
j
e
r
j
g
j
∑
j
Δ
j
n
j
∑
j<k
V
jk
n
j
n
k
where is the the Rabi frequency, the laser phase, and the detuning of the driving laser field coupling the ground states and excited Rydberg state of the j-th atom. - represents the van der Waals interaction between atom-j and atom-k, while is the number operator of j-th site (more info on actual values of can be found in QuEra webpages).
Ω
ϕ
Δ
g
j
r
j
V
jk
C
6
x
j
x
k
6
|
n
j
r
j
r
j
C
6
We have defined the corresponding Hamiltonian as follows: , where it takes sites as a list of atom positions, , with each position in μm, is the the Rabi frequency, the laser phase, and the detuning of the driving laser field.
AquilaHamiltonian[sites, {Ω, Δ, ϕ}]
{{,},{,},...}
x
1
y
1
x
2
y
2
Ω
ϕ
Δ
Single atom
Single atom
Let’s consider the single atom dynamics.
Rabi Oscillation (Ω=constant, Δ=0 and ϕ=0)
Rabi Oscillation (Ω=constant, Δ=0 and ϕ=0)
For this case, one can get the state symbolically.
In[]:=
ψ1RO=QuantumEvolve[AquilaHamiltonian[{{0,0}},{15.,0,0}],t];
As an example, calculate the populations at
t=1μs
In[]:=
ψ1RO[1.]["Probability"]
Out[]=
|0〉0.120156,|1〉0.879844
Population of ground state as a function of time:
In[]:=
Plotψ1RO["Probability"][[1]],{t,0,1},FrameLabel->" (μs)",,Frame->True,PlotLabel->"Population of ground state in time"
t
f
2
0
""
ψ
t
f
Out[]=
The decoherence effect of the environment can be added as a damping effect, with the rate , toward the thermal state of .
1/τ
ρ=/2
In[]:=
prob0[t_,τ_]=(a-1/2)+1/2/.{a->ψ1RO[t]["Probability"][[1]]};
-
t
τ
In[]:=
Plot{ψ1RO["Probability"][[1]],prob0[t,3.6]},{t,0,10},FrameLabel->" (μs)",,Frame->True,PlotLabel->"Population of ground state in time",PlotStyle->{Automatic,Directive[Dashed,Red]},PlotLegends->{"No noise","With noise"}
t
f
2
0
""
ψ
t
f
Out[]=
Ramsey Protocol (Ω as two pulses, Δ=constant, ϕ=0)
Ramsey Protocol (Ω as two pulses, Δ=constant, ϕ=0)
For this protocol, the atom is driven by two pulses, with a hold time between pulses, and Δ and ϕ are set to zero.
In[]:=
pulses[{amplitude_,δt_,gap_},t_]:=
;
|
In[]:=
data=Module{δt=.1,amplitude=12.5,plotRabi,plotProb,state,prob={}},Tablestate=QuantumEvolve[AquilaHamiltonian[{{0,0}},{pulses[{amplitude,δt,gap},t],10.5,0}],{t,0,4}];plotRabi=Plotpulses[{amplitude,δt,gap},t],{t,-δt,2δt+gap},;prob=Join[prob,{{δt+gap,state[δt+gap]["Probability"][[1]]}}];plotProb=ListLinePlotprob,;{plotRabi,plotProb},{gap,Range[.18,3,.1]};
In[]:=
ListAnimate[images=GraphicsRow[#,ImageSize->Large]&/@data]
Out[]=
In[]:=
Export[NotebookDirectory[]<>"Rabi.gif",images,"DisplayDurations"->.3,AnimationRepetitions->100]
Out[]=
/Users/mohammadb/Documents/GitHub/QuantumFramework/Notebooks/Rabi.gif
Floquet Protocol (Ω=const., Δ=const. Sin[ω t], and ϕ=0)
Floquet Protocol (Ω=const., Δ=const. Sin[ω t], and ϕ=0)
In this scenario, the Rabi drive remains constant, and the detuning oscillates sinusoidally over time, with a phase set to zero.
In[]:=
Plot[{15.,15.Sin[5πt],0},{t,0,4},PlotLegends->{"Ω","Δ","ϕ"}]
Out[]=
In[]:=
ψFlo=QuantumEvolve[AquilaHamiltonian[{{0,0}},{15.,15.Sin[5πt],0}],{t,0,4}];
Population per site (keys are site labels (qubits) and values are population):
In[]:=
PlotψFlo[t]["Probability"][[1]],{t,0,4},PlotRange->{0,1},FrameLabel->" (μs)",,Frame->True,PlotLabel->"Population of ground state in time"
t
f
2
0
""
ψ
t
f
Out[]=
Spin echo
Spin echo
In[]:=
Ω[{δt_,gap_},t_]:=
;Δ[{δt_,gap_},t_]:=
;ϕ[{δt_,gap_},t_]:=
;
13. | 0<=t<=δt||δt+gap<=t<=3δt+gap||3δt+2gap<=t<=4δt+2gap |
0 | True |
10 | 3δt+gap<=t<=3δt+2gap |
0 | True |
|
Two atoms
Two atoms
Rydberg blockade radius
Rydberg blockade radius
Time-dependent amplitude:
Time-dependent Hamiltonian detuning:
Note that the laser phase (ϕ) is constant and set to zero.
Visualize time series:
Levine-Pichler gate analogues
Levine-Pichler gate analogues
Interacting non-equilibrium dynamics of two atoms
Interacting non-equilibrium dynamics of two atoms
Multi-atoms: ordered phases
Multi-atoms: ordered phases
Multi atoms: Blockaded Rabi Oscillations
Multi atoms: Blockaded Rabi Oscillations
The Rydberg blockade effect arises from the strong interactions between Rydberg atoms. When two or more Rydberg atoms are in close proximity, the strong interactions between them can prevent multiple atoms from simultaneously being excited to a Rydberg state. In other words, the excitation of one Rydberg atom can “block” the excitation of nearby atoms.
Define positions of atoms in a 2D lattice
Plot atoms’s lattice
Find the final quantum state vector, and wrap it around by a QuantumState:
Multi atoms: quantum scars
Multi atoms: quantum scars
Calculate the probability of Néel state 1010101010101 in time:
Plot it over time:
Maximum independent set on unit disk graphs
Maximum independent set on unit disk graphs
Let’s first analyze the Maximum independent set on unit disk graphs, classically.
Create a King’s graph with a 30% random dropout:
Show the King’s graph:
Find an independent vertex set of the King’s graph with a maximum number of vertices:
Highlight them in the graph:
Now, using a quantum algorithm, we will try to find those max independent vertices (in our case, it will be qubits 1, 3, 7 and 8, in a quantum system with 11 qubits).
Create the corresponding 2D lattice, with the distance of 5μm
Create the corresponding parameters of the Hamiltonian and plot them:
Find the time-dependent quantum state:
Final Rydberg population per site at a given time:
Plot Rydberg population per sites over time:
Final Rydberg population
Note an independent vertex set is a maximal set of vertices that are never incident to the same edge. Therefore, only picking sites (ie vertices) with high probabilities does not necessary provide the expected solution. For example, as one can see, in the example we studied, there is an edge between site 5 and 7.
Set vertex size by corresponding Rydberg population, and highlight the edge between sites with large-enough population:
Let’s calculate if all maximal independent sets have high probability in quantum version. To do so, we will multiply their Rydberg population as a measure. If quantum algorithm works fine, then the measure for that set should be close to one (or high enough). If not, then it means we won’t be able to find some solutions.
Using classical results, visualize what maximal independent sets are more likely to be obtained from quantum algorithm:
As one can see, not all of them will be obtained through quantum version. One resolution can be obtained classically, by sampling from sites based on their weights, and pick only those sets with no edge.
Try weighted sampling 10 times, return False if any edge between them:
AWS
AWS
In this section, we will send a query to QuEra Aquila, using Amazon Braket.
Send the job to QuEra Aquila:
Different of population between theory and experimental values for each site