Local Simulation

Local Simulation

Local Simulation with ParallelSimulator

ParallelSimulator is Divi’s built-in local simulation backend. It executes quantum circuits using Qiskit Aer, distributing work across multiple threads for fast prototyping and testing.

Basic Usage

from divi import ParallelSimulator

backend = ParallelSimulator()

Configuration Options

backend = ParallelSimulator(
    simulation_seed=42,        # Deterministic results for reproducibility
    qiskit_backend="auto",     # Or specify: "aer_simulator", "aer_simulator_statevector"
)

Example: Local VQE

from divi import ParallelSimulator
from divi.qprog import VQE, HartreeFockAnsatz
from divi.qprog.optimizers import ScipyOptimizer, ScipyMethod
from pennylane import qchem

molecule = qchem.Molecule(
    symbols=["H", "H"],
    coordinates=[(0.0, 0.0, 0.0), (0.0, 0.0, 0.5)],
)

vqe = VQE(
    molecule=molecule,
    ansatz=HartreeFockAnsatz(),
    optimizer=ScipyOptimizer(ScipyMethod.L_BFGS_B),
    max_iterations=10,
    backend=ParallelSimulator(),
)

vqe.run()
print(f"Energy: {min(vqe.losses[-1].values()):.4f}")

Features

Noisy Simulation

Enable noise models for realistic simulation:

from qiskit_aer.noise import NoiseModel, depolarizing_error

noise_model = NoiseModel()
noise_model.add_all_qubit_quantum_error(depolarizing_error(0.01, 1), ['rx', 'ry', 'rz'])
noise_model.add_all_qubit_quantum_error(depolarizing_error(0.02, 2), ['cx'])

backend = ParallelSimulator(noise_model=noise_model)

Alternatively, use a Qiskit fake backend to inherit a realistic noise profile:

from qiskit_ibm_runtime.fake_provider import FakeAuckland

backend = ParallelSimulator(qiskit_backend=FakeAuckland())

This is useful for testing error mitigation techniques like ZNE.

Deterministic Mode

Set a simulation seed for reproducible results:

backend = ParallelSimulator(simulation_seed=1997)

Circuit Depth Tracking

Track circuit depths during execution:

backend = ParallelSimulator()
# ... run algorithms ...
print(f"Circuit depths: {backend.circuit_depths}")

When to Use ParallelSimulator

  • Development and testing: Fast iteration without cloud latency
  • Small to medium circuits: Up to ~25 qubits with state vector, more with specialized backends
  • Reproducibility: Deterministic seeds for debugging
  • Error mitigation testing: Noisy simulation for ZNE development