rydberg_interaction(register, wires=None, interaction_coeff=862690, max_distance=inf)[source]

Returns a ParametrizedHamiltonian representing the interaction of an ensemble of Rydberg atoms due to the Rydberg blockade

\[\sum_{i<j} V_{ij} n_i n_j\]

where \(n_i\) corresponds to the projector on the Rydberg state of the atom \(i\), and \(V_{ij}\) is the van der Waals potential:

\[V_{ij} = \frac{C_6}{R_{ij}^6}\]

where \(R_{ij}\) is the distance between the atoms \(i\) and \(j\), and \(C_6\) is the Rydberg interaction constant, which defaults to \(862690 \times 2 \pi \text{MHz } \mu \text{m}^6\). The unit of time for the evolution of this Rydberg interaction term is in \(\mu \text{s}\). This interaction term can be combined with laser drive terms (rydberg_drive()) to create a Hamiltonian describing a driven Rydberg atom system.

See also


  • register (list) – list of coordinates of the Rydberg atoms (in micrometers)

  • wires (list) – List of wires containing the wire values for all the atoms. This list should have the same length as register. If None, each atom’s wire value will correspond to its index in the register list.

  • interaction_coeff (float) – Defaults to \(862690 \times 2 \pi \text{MHz } \mu\text{m}^6\). The value will be multiplied by \(2 \pi\) internally to convert to angular frequency, such that only the value in standard frequency (i.e., 862690 in the default example) should be passed.

  • max_distance (float) – Threshold for distance in \(\mu\text{m}\) between two Rydberg atoms beyond which their contribution to the interaction term is removed from the Hamiltonian.


a ParametrizedHamiltonian representing the atom interaction

Return type



We create a Hamiltonian describing the van der Waals interaction among 9 Rydberg atoms in a square lattice:

atom_coordinates = [[0, 0], [0, 5], [0, 10], [5, 0], [5, 5], [5, 10], [10, 0], [10, 5], [10, 10]]
wires = [1, 5, 0, 2, 4, 3, 8, 6, 7]
H_i = qml.pulse.rydberg_interaction(atom_coordinates, wires=wires)
>>> H_i
HardwareHamiltonian: terms=36

As expected, we have \(\frac{N(N-1)}{2} = 36\) terms for N=9 atoms.

The interaction term is dependent only on the number and positions of the Rydberg atoms. We can execute this pulse program, which corresponds to all driving laser fields being turned off and therefore has no trainable parameters. To add a driving laser field, see rydberg_drive().

dev = qml.device("default.qubit.jax", wires=9)

@qml.qnode(dev, interface="jax")
def circuit():
    qml.evolve(H_i)([], t=[0, 10])
    return qml.expval(qml.Z(0))
>>> circuit()
Array(1., dtype=float32)