Noise-aware Simulator#

The tool also supports noise-aware quantum circuit simulation, based on a stochastic approach. It currently supports global decoherence and gate error noise effects. A detailed summary of the simulator is presented in [6]. Note that the simulator currently does not support simulating the integrated algorithms.

Usage in Python#


Currently the noise-aware simulator is not exposed via the python bindings.

Usage as Standalone Executable#

Building the simulator requires Threads::Threads. It can be built by executing

$ cmake -DCMAKE_BUILD_TYPE=Release -S . -B build
$ cmake --build build --config Release --target ddsim_noise_aware

The simulator provides a help function which is called in the following way:

$ ./build/apps/ddsim_noise_aware --help
    see for more information
    -h, --help                  produce help message
      --seed arg              seed for random number generator (default zero is possibly directly used as seed!) (default: 0)
      --pm                    print measurements
      --ps                    print simulation stats (applied gates, sim. time, and maximal size of the DD)
      --verbose               Causes some simulators to print additional  information to STDERR
      --simulate_file arg     simulate a quantum circuit given by file (detection by the file extension)
      --step_fidelity arg     target fidelity for each approximation run (>=1 = disable approximation) (default: 1.0)
      --steps arg             number of approximation steps (default: 1)
      --noise_effects arg     Noise effects (A (=amplitude damping),D (=depolarization),P (=phase flip)) in the form of a character string describing the noise effects (default: APD)
      --noise_prob arg        Probability for applying noise. (default: 0.001)
      --noise_prob_t1 arg     Probability for applying amplitude damping noise (default:2 x noise_prob)
      --noise_prob_multi arg  Noise factor for multi qubit operations (default: 2)
      --unoptimized_sim       Use unoptimized scheme for stochastic/deterministic noise-aware simulation
      --stoch_runs arg        Number of stochastic runs. When the value is 0, the deterministic simulator is started. (default: 0)
      --properties arg        Comma separated list of tracked amplitudes, when conducting a stochastic simulation. The "-" operator can be used to specify a range. (default: 0-100)

An example run of the stochastic simulator, with 1000 samples, amplitude damping, phase flip, and depolarization error enabled (each with a probability of 0.1% whenever a gate is applied) looks like this:

$./build/apps/ddsim_noise_aware --noise_effects APD --noise_prob 0.001 --stoch_runs 1000 --simulate_file adder_n4.qasm  --pm --ps
  "measurement_results": {
    "0000": 0.010506209312687873,
    "0001": 0.011493790687312124,
    "0010": 0.002500492484500565,
    "0011": 0.0004995075154994353,
    "0100": 0.0015015015015015015,
    "0101": 0.0014984984984984986,
    "0110": 0.011499960617703234,
    "0111": 0.0005000393822967641,
    "1000": 0.04201375737631414,
    "1001": 0.8969862426236844,
    "1010": 0.002502502502502502,
    "1011": 0.0024974974974974976,
    "1100": 0.004003012087216088,
    "1101": 0.0049969879127839106,
    "1110": 0.006500446429090525,
    "1111": 0.0004995535709094751
  "statistics": {
    "applied_gates": 23,
    "approximation_runs": "0.000000",
    "benchmark": "stoch_adder_n4",
    "max_matrix_nodes": 0,
    "max_nodes": 0,
    "mean_stoch_run_time": "0.000000",
    "n_qubits": 4,
    "parallel_instances": "8",
    "perfect_run_time": "0.000000",
    "seed": "0",
    "simulation_time": 0.6007186770439148,
    "step_fidelity": "1.000000",
    "stoch_runs": "1000",
    "stoch_wall_time": "0.600710",
    "threads": "8"

The deterministic simulator is run when “stochastic_runs” is set to 0. The same run from above, using the deterministic simulator would look like this:

$ ./build/apps/ddsim_noise_aware --noise_effects APD --noise_prob 0.001 --stoch_runs 0 --simulate_file adder_n4.qasm  --pm --ps
  "measurement_results": {
    "0000": 0.013477634679595526,
    "0001": 0.013345991328932352,
    "1000": 0.03746879852829717,
    "1001": 0.9082983936899753
  "statistics": {
    "active_matrix_nodes": 0,
    "active_nodes": 22,
    "applied_gates": 23,
    "benchmark": "adder_n4",
    "max_matrix_nodes": 0,
    "n_qubits": 4,
    "seed": "0",
    "simulation_time": 0.003795960918068886