Tutorials
qcr:2606.81780.1

Ordered Phases in Rydberg Atom Systems

This Amazon Braket notebook uses Analog Hamiltonian Simulation on neutral-atom hardware to prepare and study ordered quantum phases of matter in arrays of Rydberg atoms, a vivid demonstration of using a quantum computer to simulate many-body physics. It focuses on two emblematic ordered phases: the one-dimensional Z2 phase, where excitations settle into an alternating pattern, and the two-dimensional checkerboard phase. The notebook shows how these many-body ground states are reached through adiabatic time evolution: the adiabatic theorem guarantees that if the system's Hamiltonian is changed slowly enough, a system started in the ground state of a simple initial Hamiltonian will track the instantaneous ground state into that of the complex final Hamiltonian. The example designs a smooth time-dependent driving schedule (ramping amplitude and detuning) that interpolates to the regime where these ordered phases are the ground state, runs the analog program on Braket, and analyzes the measured atomic configurations to confirm the emergence of the expected spatial order. It is an excellent illustration of preparing nontrivial quantum phases via adiabatic analog simulation, connecting condensed-matter physics to programmable Rydberg hardware on Amazon Braket.
Quantum Simulation
Qubit
Analog simulation
Uploaded 2 days ago
13
Views
GitHub582
Citing this entry? Use this QCR ID
Uploaded by
QL
QCR Librarian

Overview

amazon-braket/amazon-braket-examples
582262
In [ ]:
# --- Setup cell added by QCR (not part of the original tutorial) ---
# Source: amazon-braket/amazon-braket-examples @ 0c0818f315479aab9deebed7e7ed7533ac581923, Apache License 2.0.
# Installs the example's dependencies. If a later cell still reports a missing
# package, restart the runtime/kernel and run again from the top.
%pip install -q amazon-braket-sdk==1.117.3 matplotlib

Ordered phases in Rydberg systems

In this example notebook, we show how one can prepare ordered phases in Rydberg systems, focusing on the 1D phase and the 2D checkerboard phase. We will use an adiabatic time-evolution to prepare these many-body ground states.

Adiabatic evolution

The adiabatic theorem of quantum mechanics states that

A physical system remains in its instantaneous eigenstate if a given perturbation is acting on it slowly enough and if there is a gap between the eigenvalue and the rest of the Hamiltonian's spectrum. (Born & Fock, 1928)

In other words, a slow-enough change in the parameters of the Hamiltonian will not induce transitions between its ground state and excited states: If the system starts in the ground state of the Hamiltonian at the beginning, it will smoothly transition into the ground state of the Hamiltonian at the end.

The adiabatic theorem plays a key role in preparing the desired many-body ground states in the Rydberg system, the Hamiltonian of which can be expressed as

where, for simplicity, we set the phase and the local detuning field (See notebook 00 for detailed description of this Hamiltonian) to be zero throughout this notebook. We schedule the driving amplitude to start from zero (). Hence, with negative detuning (), the initial state where all atoms are in the ground state () is the lowest energy eigenstate of the Hamiltonian, the many-body ground state.

To arrive at a target Hamiltonian where the excited states of the atoms are favored, we ramp up the detuning from large negative to large positive. During the ramp, we apply a large driving amplitude to open an energy gap between the first excited state and the ground state. According to the adiabatic theorem, if the ramping is slow enough, the system remains in the many-body ground state throughout the evolution. At the end of the AHS program, the Rabi frequency will be turned off and since , all the atoms tend to stay in the Rydberg state to lower the energy of the system. However, due to the strong Rydberg interaction, only one atom can be excited to the Rydberg state within its blockade radius.

For a 1D chain of atoms, if we adjust the separation between the atoms such that only neighboring atoms are within the blockade radius, then we will arrive at a state where every second atom is excited, this is called the " phase". For a 2D square array of atoms, a similar "checkerboard phase" emerges. The common feature of these phases is that the atoms are excited to the Rydberg states in an alternative pattern, complying with the blockade constraint, as shown in the figure below. In the figure, the shaded circles show half of the blockade radius such that sites with overlapped circles blockade each other. We show configurations, with black and white sites represent Rydberg and ground state atoms respectively, that comply with the blockade constraint.

Blockade_examples.png

We will realize these phases in this notebook. To begin, we import the necessary packages.

In [1]:
# Use Braket SDK Cost Tracking to estimate the cost to run this example
from braket.tracking import Tracker

tracker = Tracker().start()

In this notebook, we will use matplotlib package and ahs_utils.py module in the current working directory for visualization purposes and other functionalities.

In [2]:
import matplotlib.pyplot as plt
import numpy as np
from ahs_utils import show_final_avg_density, show_global_drive, show_register

from braket.ahs.analog_hamiltonian_simulation import AnalogHamiltonianSimulation
from braket.ahs.atom_arrangement import AtomArrangement
from braket.ahs.driving_field import DrivingField
from braket.devices import LocalSimulator

1D phase

Here we consider a 1D chain of 9 atoms with neighboring atoms separated by . The setup of the system can be generated as follows

In [3]:
register = AtomArrangement()
separation = 6.1e-6  # in meters
num_atoms = 9

for k in range(num_atoms):
    register.add([k * separation, 0])

show_register(register)

In order to prepare the ordered state for the atomic chain, we shall design an AHS program that drives the system adiabatically. As described above, we start from with , followed by turning on and ramping up . We will turn off the driving amplitude at the end of the program. This program can be specified as follows.

In [4]:
time_points = [0, 2.5e-7, 2.75e-6, 3e-6]
amplitude_min = 0
amplitude_max = 1.57e7  # rad / s

detuning_min = -5.5e7  # rad / s
detuning_max = 5.5e7  # rad / s

amplitude_values = [amplitude_min, amplitude_max, amplitude_max, amplitude_min]  # piecewise linear
detuning_values = [detuning_min, detuning_min, detuning_max, detuning_max]  # piecewise linear
phase_values = [0, 0, 0, 0]  # piecewise constant


drive = DrivingField.from_lists(time_points, amplitude_values, detuning_values, phase_values)

We can plot the waveforms of these driving fields to make sure that they are correctly specified.

In [5]:
show_global_drive(drive);

Finally, we construct out AHS program from the atomic registers, and the Hamiltonian defined above.

In [6]:
ahs_program = AnalogHamiltonianSimulation(register=register, hamiltonian=drive)

Before running the program on Quera's Aquila device (See notebook 01), we can first run it on the local simulator to make sure the outcome is the expected state. Below we have explicitly specified the values of steps and shots, which are the number of time steps in the simulation and the number of sampling for the final stats, respectively. One could increase the accuracy of the result by increasing the values of these arguments, at the expense of longer runtime.

In [7]:
device = LocalSimulator("braket_ahs")
result = device.run(ahs_program, shots=1000, blockade_radius=6.7e-6, steps=30).result()
show_final_avg_density(result)

We see that the average Rydberg density approximately forms the pattern. The discrepancy can be attributed to finite size of the system and nonadiabaticity throughout the evolution. We expect that as one increase the system size and the duration of the AHS program, the final Rydberg density will approach the ideal pattern.

The phase can be characterized by the density correlation of the -th and the -th atom, which is defined as

where is the average over the shots.

In [8]:
def get_density_correlation_Z2(result):
    post_sequences = np.array(
        [list(measurement.post_sequence) for measurement in result.measurements],
    )
    return np.cov(post_sequences.T)


gij = get_density_correlation_Z2(result)

The Rydberg density correlation function can be visualized as follows.

In [9]:
plt.imshow(gij, cmap="bwr", vmin=-0.25, vmax=+0.25)
plt.xticks(range(num_atoms), [f"{i}" for i in range(num_atoms)])
plt.xlabel("atom index")
plt.yticks(range(num_atoms), [f"{j}" for j in range(num_atoms)])
plt.ylabel("atom index")
plt.title("Rydberg density correlation")
plt.gca().set_aspect("equal")
plt.colorbar()
plt.show()

For more explanation and interpretation of the Rydberg density correlation functions, see "Probing many-body dynamics on a 51-atom quantum simulator" by Bernien et al. (2017).

2D checkerboard phase

In two dimension, Rydberg system can exhibit the checkerboard phase, which is analogous to the phase in 1D. For simplicity, here we create a square lattice.

In [10]:
register_2D = AtomArrangement()
separation = 6.7e-6  # in meters

for k in range(3):
    for i in range(3):
        register_2D.add((k * separation, i * separation))

show_register(register_2D)

We will use the same driving field as the one for generating the phase. We then assemble the 2D array with the driving field, and run the AHS program on the local simulator.

In [11]:
ahs_program_2D = AnalogHamiltonianSimulation(register=register_2D, hamiltonian=drive)

result_2D = device.run(ahs_program_2D, shots=1000, steps=50, blockade_radius=7.9e-6).result()
show_final_avg_density(result_2D)

We see that the overall pattern mimics the checkerboard pattern, but the central site suffers strong discrepancy. This is due to the finite size of the system and the finite duration of the AHS program, which cause non-adiabatic errors.

For more explanation and interpretation of the 2-d results, see "Quantum Phases of Matter on a 256-Atom Programmable Quantum Simulator" by Ebadi et al. (2020).

Realizing and checkerboard phase on a QPU

In previous sections, we have demonstrated two AHS programs for realizing many-body ground states. The results from the local simulator show that the results of the programs meet our expectations. Here we will run the same AHS program on the Aquila device.

Note: Some atoms may be missing even if the shot was successful. We recommend comparing pre_sequence of each shot with the requested atom filling in the AHS program specification.
In [12]:
from braket.aws import AwsDevice
from braket.devices import Devices

device = AwsDevice(Devices.QuEra.Aquila)
In [13]:
result_1D_aquila = device.run(ahs_program, shots=100).result()
show_final_avg_density(result_1D_aquila)

We can calculate the density correlation function for the result obtained from Aquila

In [14]:
gij_aquila = get_density_correlation_Z2(result_1D_aquila)

plt.imshow(gij_aquila, cmap="bwr", vmin=-0.25, vmax=+0.25)
plt.xticks(range(num_atoms), [f"{i}" for i in range(num_atoms)])
plt.xlabel("atom index")
plt.yticks(range(num_atoms), [f"{j}" for j in range(num_atoms)])
plt.ylabel("atom index")
plt.title("Rydberg density correlation")
plt.gca().set_aspect("equal")
plt.colorbar()
plt.show()
In [15]:
result_2D_aquila = device.run(ahs_program_2D, shots=100).result()
show_final_avg_density(result_2D_aquila)

In summary, in this notebook we have demonstrated how to realize the 1D phase and 2D checkerboard phase via adiabatic transition on the Rydberg systems. These are interesting many body phases in their own right, and serve as the starting points for the more involved use cases.

In [16]:
print("Quantum Task Summary")
print(tracker.quantum_tasks_statistics())
print(
    "Note: Charges shown are estimates based on your Amazon Braket simulator and quantum processing unit (QPU) task usage. Estimated charges shown may differ from your actual charges. Estimated charges do not factor in any discounts or credits, and you may experience additional charges based on your use of other services such as Amazon Elastic Compute Cloud (Amazon EC2).",
)
print(
    f"Estimated cost to run this example: {tracker.qpu_tasks_cost() + tracker.simulator_tasks_cost():.2f} USD",
)
Quantum Task Summary
{'arn:aws:braket:us-east-1::device/qpu/quera/Aquila': {'shots': 200, 'tasks': {'COMPLETED': 2}}}
Note: Charges shown are estimates based on your Amazon Braket simulator and quantum processing unit (QPU) task usage. Estimated charges shown may differ from your actual charges. Estimated charges do not factor in any discounts or credits, and you may experience additional charges based on your use of other services such as Amazon Elastic Compute Cloud (Amazon EC2).
Estimated cost to run this example: 2.60 USD
In [16]:

Join the Discussion

Comments (0)

No comments yet. Be the first to share your thoughts!

Indexed by QCR Librarian

This entry was created automatically from publicly available records. QCR links to public sources and only stores repository content where the license permits redistribution.

Versions

v1 Latest
Jun 17, 2026
qcr:2606.81780.1

Cite all versions? Use the base QCR ID to always reference the latest version of this entry.

Tools used

Amazon Braket SDK

Keywords

rydberg
ordered-phases
adiabatic
neutral-atoms
quantum-simulation

You may also like5