Site Tools


qiskit-circuit-optimization

Circuit Optimization

Circuit optimization reduces gate count, depth, and two-qubit gate count without changing the circuit's computation. Optimized circuits run faster, accumulate less error on noisy hardware, and consume fewer quantum resources.

Qiskit's transpiler includes optimization passes (e.g., commutative_cancellation, optimize_1q_gates); you can also manually optimize by inspecting circuits and applying rewrites.

Built-In Optimization Passes

Transpilation already optimizes: set optimization_level to control aggressiveness.

from qiskit import transpile, QuantumCircuit
from qiskit_aer import AerSimulator
 
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.x(0)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
 
backend = AerSimulator()
optimized = transpile(qc, backend, optimization_level=3)
print(f"Original depth: {qc.depth()}")
print(f"Optimized depth: {optimized.depth()}")

Level 3 applies aggressive rewrites:

  • Commute gates to find cancellations (X followed by X cancel)
  • Merge consecutive single-qubit gates on the same qubit
  • Eliminate redundant gates
  • Reorder gates to reduce circuit depth

Manual Optimization

For custom optimizations, inspect and rewrite:

# Remove identity gates
def remove_identities(qc):
    new_qc = QuantumCircuit(*qc.qregs, *qc.cregs)
    for instr, qargs, cargs in qc.data:
        if instr.name not in ['id', 'reset']:
            new_qc.append(instr, qargs, cargs)
    return new_qc
 
optimized_qc = remove_identities(qc)

On noisy hardware, circuit depth dominates error—optimizing for depth (not just gate count) is often better.

qiskit-circuit-optimization.md · Last modified: by 127.0.0.1