Saltar al contenido

# introduccion-a-la-computacion-cuantica-con-qiskit

Introducción a la computación cuántica con Qiskit

Volver a la portada del curso
Lectura (Markdown)

Ejecución de Circuitos en Simuladores

Sección 5 · Simulación y Ejecución en Qiskit

Ejecución de circuitos en simuladores

Antes de gastar tiempo de un procesador real, cada circuito se prueba en un simulador. Los simuladores son rápidos, gratuitos y deterministas si fijas una semilla. Pero no todos simulan lo mismo: algunos calculan el resultado ideal y otros imitan el ruido del hardware. Elegir bien te ahorra horas de depuración.

Tres formas de simular en Qiskit

  • Statevector: calcula el vector de estado exacto. No toma muestras; devuelve amplitudes y probabilidades exactas. Ideal para verificar que un circuito hace lo que esperas.
  • StatevectorSampler: una primitiva de referencia del núcleo de Qiskit. Toma muestras ideales, sin ruido, con la misma interfaz que el Sampler del hardware real.
  • AerSimulator: el simulador de alto rendimiento de Qiskit Aer. Soporta modelos de ruido, varios métodos de simulación y circuitos más grandes.

Disparos y error estadístico

Un disparo (shot) es una ejecución completa del circuito con su medición. Como el resultado es aleatorio, cada probabilidad se estima con una frecuencia, y el error de esa estimación baja con la raíz del número de disparos: aproximadamente $\sqrt{p(1-p)/N}$. Pasar de 100 a 10,000 disparos reduce el error unas diez veces:

from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler

qc = QuantumCircuit(1)
qc.h(0)
qc.measure_all()

sampler = StatevectorSampler(seed=11)
for shots in [100, 1000, 10000]:
    conteos = sampler.run([qc], shots=shots).result()[0].data.meas.get_counts()
    print(shots, "disparos -> P(1) estimada:", round(conteos.get("1", 0) / shots, 4))

La probabilidad real es 0.5. Con pocos disparos, desviaciones de varios puntos porcentuales son normales, no un error del circuito.

AerSimulator: ideal y con ruido

Un procesador real tiene errores en cada puerta y en cada medición. AerSimulator.from_backend copia el modelo de ruido, las puertas nativas y la conectividad de un procesador. Combinado con un backend falso de qiskit-ibm-runtime, que guarda una instantánea de un procesador real, puedes ver el efecto del ruido sin conexión:

from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit_ibm_runtime.fake_provider import FakeManilaV2

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(1, 2)
qc.measure_all()

for nombre, sim in [("ideal", AerSimulator(seed_simulator=5)),
                    ("ruidoso", AerSimulator.from_backend(FakeManilaV2(), seed_simulator=5))]:
    conteos = sim.run(transpile(qc, sim, seed_transpiler=5), shots=2000).result().get_counts()
    print(nombre, dict(sorted(conteos.items())))

En la versión ideal solo aparecen 000 y 111. En la ruidosa aparecen además resultados como 011 o 100, cada uno con unos pocos puntos porcentuales. Esa es la huella del ruido que verás en hardware real.

Por qué hay que transpilar

Un procesador solo ejecuta un conjunto reducido de puertas nativas y solo puede aplicar puertas de dos qubits entre qubits conectados. La función transpile reescribe el circuito para cumplir esas reglas: descompone puertas, asigna qubits físicos y agrega intercambios si hace falta. Con el AerSimulator ideal casi no cambia nada; con un modelo de hardware, el circuito transpilado suele ser más largo que el original.

¿Cuándo usar cada simulador?

  • Depurar la lógica: Statevector, porque da probabilidades exactas.
  • Probar el código que irá a hardware: StatevectorSampler, porque tiene la misma interfaz de primitivas.
  • Anticipar el ruido: AerSimulator.from_backend con un backend falso.
  • Circuitos grandes: AerSimulator con métodos como matrix_product_state, útiles cuando hay poco entrelazamiento.

Trampas comunes

  • Olvidar la semilla. Sin seed ni seed_simulator, los conteos cambian en cada ejecución y cuesta comparar.
  • Simular demasiados qubits con Statevector. La memoria crece como $2^n$; más de 30 qubits ya supera a un equipo común.
  • No transpilar para Aer con ruido. El circuito debe usar las puertas nativas del modelo.
  • Tomar el simulador ideal como predicción del hardware. El hardware siempre agrega ruido.

Cierre

Prueba primero en ideal, después con ruido y al final en hardware. Compara los conteos de los dos simuladores del ejemplo y calcula qué porcentaje de disparos cae fuera de 000 y 111: ese número es tu primera medida de la calidad de un procesador.