Getting started with hardware noise model simulation
ideal
and noisy
simulations, allowing you to choose to see both the complete range of outcomes in the ideal case, or an example of how a circuit would run on physical hardware with a limited number of shots.
Noise models are provided for IonQ’s currently available QPUs (Aria 1, Aria 2, Forte 1 and Forte Enterprise 1), as well as our retired Harmony QPU. Like our ideal cloud-based simulators, they are free for all users with direct IonQ access, including through Google Cloud Marketplace or simulator-only accounts. Noise model simulations can be submitted through our API, Qiskit, and Cirq.
System | ||
---|---|---|
Aria 1 | 0.0005 | 0.0133 |
Aria 2 | 0.0006573333333333332 | 0.01856 |
Forte 1 | 0.0002666666666666667 | 0.004949333333333333 |
harmony
noise model and 1000 shots, and our Harmony QPU (which has since been retired) with 1000 shots. Here’s the output probabilities graphed together for comparison:
ideal
simulation, but specifying a named noise model instead: aria-1
, aria-2
, forte-1
, or harmony
. (The forte-enterprise-1
noise model will be available in the future.)
You can also specify "ideal"
whenever you are setting the noise model. This will use the ideal simulator, which is also the default if no noise model is specified.
For our smaller systems, each noise model simulation can use as many qubits as its corresponding QPU has (25 qubits for Aria 1 or Aria 2, 11 qubits for Harmony). For our Forte 1 system (which has 36 qubits) as well as our ideal simulator, each simulation can currently use up to 29 qubits. Simulation capabilities for larger circuits will be available in the future.
Unlike ideal simulation, which runs a single calculation to generate probabilities, noise model simulation is shot-aware: it will run one simulation for each shot you request. This means that the number of counts in your output histogram will match the number of shots you submitted. Another implication of this: the more shots you use, the longer your simulation will take to finish - though this generally isn’t very noticeable unless you are simulating circuits with many qubits and a very large number of shots.
The noise model takes an optional parameter called seed
. This allows you to specify a specific seed for the pseudo-random noise generation and shot sampling that occurs during noise model simulation, allowing for reproducible “noisy” results. If you don’t provide a seed, one will be chosen at random and then provided as part of the simulation output (viewable in an API job result or the job detail page in the IonQ Cloud Console). The seed can be any integer between 1 and .
Jobs submitted to a noisy simulator follow the same compilation and optimization process as jobs submitted to a QPU. If the circuit is written in abstract gates, it will be compiled to IonQ’s native gates and optimized before simulation. If the circuit is written in our native gates, it will not be optimized or modified before simulation.
Noisy simulation currently doesn’t include debiasing, our default error mitigation strategy. Future versions of our simulator may implement this feature.
"target": "simulator"
and add "noise": {"model": "aria-1"}
(or specify a different QPU noise model) to the job body.
To specify a random seed, use "noise": {"model": "aria-1", "seed": 481516}
.
backend.set_options(noise_model="aria-1")
.
To also specify the simulation’s random seed, use backend.set_options(noise_model="aria-1", sampler_seed=8151623)
.
noise_model
keyword argument when calling backend.run()
.
extra_query_params={"noise": {"model": "aria-1"}}
(or specify another noise model) when running a job. You can also use extra_query_params
to add other parameters, using the same format as an API job.
To specify the simulation’s random seed, use extra_query_params={"noise": {"model": "aria-1", "seed": 15162342}}
.