Weak Circuit Simulation

Weak digital simulation samples computational-basis shots after a noisy circuit evolution, mimicking hardware readout statistics. Use WeakSimParams and read bitstring counts from counts.

For expectation-value simulation and mid-circuit observables, see Noisy Circuit Simulation. For parameter presets and truncation settings, see Configuring Simulation Parameters.

You can pass an OpenQASM file path or raw OpenQASM string to run() instead of building a qiskit.circuit.QuantumCircuit in Python (OpenQASM 3 requires pip install mqt-yaqs[qasm3]).

1. Circuit

1import numpy as np
2from qiskit.circuit.library.n_local import TwoLocal
3
4num_qubits = 5
5circuit = TwoLocal(num_qubits, ["rx"], ["rzz"], entanglement="linear", reps=num_qubits).decompose()
6rng = np.random.default_rng()
7circuit.assign_parameters(rng.uniform(-np.pi, np.pi, size=len(circuit.parameters)), inplace=True)
8circuit.measure_all()
9circuit.draw(output="mpl")
/tmp/ipykernel_2962/2343646147.py:5: DeprecationWarning: The class ``qiskit.circuit.library.n_local.two_local.TwoLocal`` is deprecated as of Qiskit 2.1. It will be removed in Qiskit 3.0. Use the function qiskit.circuit.library.n_local instead.
  circuit = TwoLocal(num_qubits, ["rx"], ["rzz"], entanglement="linear", reps=num_qubits).decompose()
../_images/38b59781d48a24708f99af2f3503f42d6e9b066453381eaf47be35b91f20494e.svg

2. Initial state and noise model

 1from mqt.yaqs import NoiseModel, State
 2
 3state = State(num_qubits, initial="zeros")
 4
 5gamma = 0.1
 6noise_model = NoiseModel([
 7    {"name": name, "sites": [i], "strength": gamma}
 8    for i in range(num_qubits)
 9    for name in ["lowering", "pauli_z"]
10])

For bell-curve noise strengths, see Realistic Noise Models.

3. Simulation parameters and run

WeakSimParams requires an explicit shots count (not covered by accuracy presets).

1from mqt.yaqs import Simulator, WeakSimParams
2
3sim_params = WeakSimParams(shots=1024, max_bond_dim=4, svd_threshold=1e-6)
4
5sim = Simulator(show_progress=False)
6result = sim.run(state, circuit, sim_params, noise_model)

4. Readout histogram

 1import matplotlib.pyplot as plt
 2
 3fig, ax = plt.subplots(figsize=(8, 3.5))
 4ax.bar(result.counts.keys(), result.counts.values(), color="tab:blue", alpha=0.8)
 5ax.set_xlabel("Bitstring")
 6ax.set_ylabel("Counts")
 7ax.set_title("Weak-simulation measurement outcomes")
 8plt.xticks(rotation=45, ha="right")
 9plt.tight_layout()
10plt.show()