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()
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()