# introduccion-a-la-computacion-cuantica-con-qiskit
Introducción a la computación cuántica con Qiskit
Volver a la portada del cursoDesafío Final: Tu Primer Proyecto Cuántico
Sección 6 · Proyecto Final y Evaluación
Desafío final: tu primer proyecto cuántico
El proyecto final reúne el curso en un entregable concreto: un notebook que construye circuitos, los verifica en simulación ideal, mide el efecto del ruido y resuelve un problema con un algoritmo cuántico. No se trata de hacer el circuito más grande posible, sino de demostrar que entiendes qué hace cada parte y cómo interpretar los resultados.
Qué debes entregar
Un notebook que corra de principio a fin sin errores, con estas tres partes:
- Parte 1. Entrelazamiento: una función
ghz(n)que prepare un estado GHZ de n qubits. Verifica conStatevectorque solo tienen probabilidad los estados de todos ceros y todos unos. - Parte 2. Efecto del ruido: ejecuta el GHZ con 2, 3, 4 y 5 qubits en un simulador con ruido (
AerSimulator.from_backendcon un backend falso). Calcula la fidelidad de cada caso como la proporción de disparos que caen en los resultados correctos y grafícala contra n. - Parte 3. Algoritmo: implementa Bernstein-Vazirani para una cadena secreta de al menos cinco bits. Ejecútalo en ideal y con ruido, y reporta qué porcentaje de disparos recupera el secreto.
Cierra con un texto breve, de tres a cinco frases, que explique qué observaste y por qué.
Estructura sugerida
Separa el notebook en secciones con una celda de texto al inicio de cada una. Escribe funciones reutilizables en lugar de copiar código entre celdas. El siguiente bloque muestra el esqueleto de la Parte 2:
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
from qiskit_ibm_runtime.fake_provider import FakeManilaV2
def ghz(n):
qc = QuantumCircuit(n)
qc.h(0)
for i in range(n - 1):
qc.cx(i, i + 1)
qc.measure_all()
return qc
sim = AerSimulator.from_backend(FakeManilaV2(), seed_simulator=42)
for n in [2, 3, 4, 5]:
circuito = transpile(ghz(n), sim, seed_transpiler=42)
conteos = sim.run(circuito, shots=2000).result().get_counts()
correctos = conteos.get("0" * n, 0) + conteos.get("1" * n, 0)
fidelidad = correctos / 2000
print(n, "qubits -> fidelidad:", round(fidelidad, 3))
Deberías ver que la fidelidad baja al aumentar n. Explicar por qué es parte central del proyecto: más qubits significa más puertas cx, y cada una agrega error.
Criterios de evaluación
- Corrección: los circuitos ideales producen exactamente los resultados esperados.
- Uso de las herramientas:
Statevectorpara verificar, primitivas oAerSimulatorpara muestrear y un backend falso para el ruido. - Análisis: la gráfica y el texto final explican la relación entre tamaño del circuito, ruido y fidelidad.
- Reproducibilidad: semillas fijas en simuladores y transpilador; el notebook corre completo tras reiniciar el kernel.
Extensiones opcionales
- Ejecuta la Parte 3 en un procesador real de IBM Quantum y compara con la simulación ruidosa.
- Prueba los niveles de optimización 0 a 3 del transpilador y reporta cómo cambian la profundidad y la fidelidad.
- Agrega Grover de dos qubits y verifica que encuentra cada uno de los cuatro estados posibles.
Trampas comunes
- Comparar sin semillas. Los resultados cambian en cada ejecución y las conclusiones se vuelven difíciles de sostener.
- Leer las cadenas al revés. Revisa el orden de los bits en Bernstein-Vazirani antes de concluir que el algoritmo falló.
- Olvidar transpilar. El simulador con ruido necesita el circuito en las puertas nativas del procesador.
- Conclusiones sin datos. Cada afirmación del texto final debe apoyarse en un número o una gráfica del notebook.
Cómo autoevaluar antes de entregar
Reinicia el kernel y ejecuta todo. Luego lee solo las gráficas y el texto final: si alguien que no vio el código puede entender qué hiciste y qué aprendiste, el proyecto está listo. El notebook del proyecto incluye una solución de referencia para comparar tu trabajo cuando termines.