This repository demonstrates the creation, partitioning, execution, and visualization of a distributed quantum circuit using DQCCircuit and QPU simulation. It also shows how to save measurement results and circuit diagrams as images.
- Python: 3.13.X
- Qiskit
- Qiskit Aer
- Qiskit IBM Runtime
- Matplotlib
- pylatexenc
Install dependencies with pip:
# Make sure you are using Python 3.13.5
pip install qiskit qiskit-aer qiskit-ibm-runtime matplotlib pylatexencSet the number of qubits for your quantum circuit:
numbits = 12 # Total logical qubitsBuild your quantum algorithm (e.g., GHZ state preparation):
qc0 = QuantumCircuit(numbits, numbits)
qc0.h(0)
for i in range(numbits - 1):
qc0.cx(i, i + 1)
# Add measurements
for i in range(numbits):
qc0.measure(i, i)Transform the standard circuit into a distributed format:
qc = DQCCircuit(qc0)Specify how to distribute qubits across QPUs:
# Option 1: Equal distribution by count
Partition = [3, 3, 3, 3] # 4 QPUs, 3 qubits each
# Option 2: Explicit qubit assignment
Partition = [[0,1,2], [3,4,5], [6,7,8], [9,10,11]]Set up heterogeneous QPU group with network topology:
QPUGROUP = QPUManager()
# Add QPUs with different backends
QPUGROUP.add_qpu(DQCQPU(0, "FakeVigoV2"))
QPUGROUP.add_qpu(DQCQPU(1, "FakeLagosV2"))
QPUGROUP.add_qpu(DQCQPU(2, "FakeAthensV2"))
QPUGROUP.add_qpu(DQCQPU(3, "FakeManilaV2"))
# Define inter-QPU connections
dis = 5 # Communication distance/cost
QPUGROUP.add_coonnection(0, 1, distance=dis)
QPUGROUP.add_coonnection(1, 2, distance=dis)
QPUGROUP.add_coonnection(2, 3, distance=dis)Run with communication noise modeling:
result_qc = qc.Execution(
Partition,
QPUGROUP,
comm_noise=True # Enable teleportation noise
)Execute on AerSimulator with combined noise model:
# Get combined noise model (local QPU + communication)
noise_model = qc.get_noise_model()
sim = AerSimulator(noise_model=noise_model)
# Transpile and run
compiled = transpile(result_qc, sim)
job = sim.run(compiled, shots=10_000)
result = job.result()Generate publication-ready figures:
# Measurement histogram
fig1 = plot_histogram(counts_res)
fig1.savefig("GHZ_12qubit_DQC_histogram.pdf")
# Circuit diagram
fig2 = result_qc.draw("mpl", scale=0.7, fold=100)
fig2.savefig("GHZ_12qubit_DQC_circuit.pdf")