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
Notebook

Estructura de un Circuito Cuántico

Sección 2 · Fundamentos de Qiskit

Estructura de un circuito cuántico

Un circuito cuántico es la unidad de trabajo en Qiskit: una secuencia ordenada de operaciones sobre qubits que termina, casi siempre, con mediciones. Entender sus piezas te permite leer cualquier diagrama, depurar resultados inesperados y preparar circuitos que el hardware pueda ejecutar. En esta lección recorres esa estructura con el notebook de la lección.

Las piezas de un circuito

  • Qubits: las líneas horizontales del diagrama. Todos empiezan en el estado $|0\rangle$.
  • Bits clásicos: guardan el resultado de cada medición, que siempre es 0 o 1.
  • Puertas: operaciones que transforman el estado de uno o varios qubits, como h, x o cx.
  • Mediciones: convierten un qubit en un bit clásico. Después de medir, la superposición se pierde.
  • Barreras: separadores visuales que además impiden que el transpilador mueva operaciones de un lado a otro.

El diagrama se lee de izquierda a derecha, como una línea de tiempo. Cada columna agrupa operaciones que pueden ocurrir al mismo tiempo.

Crear un circuito

QuantumCircuit(2, 2) crea dos qubits y dos bits clásicos. Luego se agregan las puertas llamando métodos del circuito, y measure indica qué qubit se guarda en qué bit:

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.barrier()
qc.measure([0, 1], [0, 1])

print(qc.draw("text"))
print("Qubits:", qc.num_qubits, "| Bits clásicos:", qc.num_clbits)
print("Profundidad:", qc.depth(), "| Operaciones:", dict(qc.count_ops()))

La profundidad es el número de capas de operaciones que deben ejecutarse una después de otra. Importa porque los qubits reales pierden su información con el tiempo: un circuito más profundo acumula más errores.

measure_all: la forma corta

Si quieres medir todos los qubits, measure_all() crea los bits clásicos por ti, agrega una barrera y mide cada qubit. En ese caso, los resultados del Sampler se leen desde data.meas. Si defines los bits a mano, el registro se llama c y se lee desde data.c. Confundir estos nombres es uno de los errores más frecuentes al empezar.

El orden de los bits

Qiskit ordena los bits de derecha a izquierda: el qubit 0 es el dígito de la derecha en el resultado. Si aplicas una x solo al qubit 0 de un circuito de tres qubits, el resultado es 001, no 100:

from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler

qc = QuantumCircuit(3)
qc.x(0)
qc.measure_all()

conteos = StatevectorSampler(seed=1).run([qc], shots=100).result()[0].data.meas.get_counts()
print(conteos)

Esta convención, llamada little-endian, coincide con la forma de escribir números binarios: el bit menos significativo va a la derecha.

Registros con nombre

En circuitos más grandes conviene agrupar qubits en registros con nombre, por ejemplo QuantumRegister(2, "datos") y ClassicalRegister(2, "resultado"). Los diagramas se vuelven más legibles y el resultado se lee desde data.resultado. Es la misma idea que dar nombres claros a las variables.

Qué verás en el notebook

  • Cómo crear circuitos con y sin bits clásicos, y cómo dibujarlos.
  • Cómo inspeccionar profundidad, tamaño y conteo de operaciones.
  • El orden de los bits comprobado con ejemplos.
  • Registros con nombre y cómo leer sus resultados.

Trampas comunes

  • Leer el resultado al revés. Recuerda que el qubit 0 va a la derecha.
  • Usar data.c con measure_all. Ese registro se llama meas.
  • Medir y luego seguir operando. Tras la medición, el qubit ya no está en superposición.
  • Olvidar la medición. Un circuito sin mediciones no produce conteos en el Sampler.

Cierre

Cada circuito que escribas en el curso sigue la misma estructura: preparar qubits, aplicar puertas y medir. Antes de ejecutar, revisa siempre el dibujo con draw(): es la forma más rápida de detectar un error de índices.

Recursos