# Simulators **Simulators** are classical backends that emulate quantum circuits on a classical computer. Qiskit's main simulator is AerSimulator, which tracks the full $2^n$-dimensional state vector and applies unitary operations to it. Simulators are noiseless by default, but you can add [[qiskit-noise-models|noise models]] to study real hardware effects. Simulators are fast for small circuits (up to ~20 qubits) and useful for development and debugging. Beyond 20 qubits, memory and time grow exponentially, making simulation impractical. ```python from qiskit_aer import AerSimulator from qiskit import QuantumCircuit qc = QuantumCircuit(3, 3) qc.h([0, 1, 2]) qc.measure([0, 1, 2], [0, 1, 2]) sim = AerSimulator() result = sim.run(qc, shots=1000).result() print(result.get_counts(qc)) ``` ## Simulator Types - **AerSimulator (default)**: general-purpose, fast, supports statevector, density matrix, and stabilizer modes - **StatevectorSimulator**: returns the full state vector (for circuits without measurement) - **DensityMatrixSimulator**: tracks mixed states (useful for [[qiskit-noise-models|noisy circuits]]) - **UnitarySimulator**: returns the unitary matrix of the circuit ## Noise Simulation Add [[qiskit-noise-models|noise models]] to study how real hardware imperfections affect your circuit: ```python from qiskit_aer.noise import NoiseModel, depolarizing_error noise_model = NoiseModel() noise_model.add_all_qubit_quantum_error( depolarizing_error(0.1, 1), ['h', 'x'] ) result = sim.run(qc, shots=1000, noise_model=noise_model).result() ``` Noisy simulation is slower but helps you design robust algorithms before hardware.