Saltar al contenido principal

Construye y ejecuta tu primer programa cuántico

Introducción

En el siguiente video, Olivia Lanes te guía por el contenido de esta lección. Alternativamente, puedes abrir el video de YouTube de esta lección en una ventana separada.

Bienvenido/a a Usa una computadora cuántica hoy. El objetivo de este curso es que puedas ejecutar código en una computadora cuántica real en el menor tiempo posible, sin necesidad de conocimientos previos. Empecemos.

Esta primera lección es una introducción práctica y amigable a la computación cuántica, adecuada tanto para principiantes curiosos como para personas con poco tiempo. Aprenderás sobre los Circuits cuánticos y escribirás un pequeño programa cuántico que crea entrelazamiento, y lo ejecutarás en una computadora cuántica IBM® real. También tienes la opción de ejecutar el mismo programa en un simulador, si prefieres no ejecutarlo en una computadora cuántica real.

Puedes ejecutar este notebook de arriba a abajo en un entorno de Google Colab nuevo, o ejecutarlo localmente.

Configuración

Para ejecutar este notebook en Google Colab, necesitarás una cuenta de Google para poder abrir notebooks y ejecutar celdas en el navegador.

Para ejecutar en una computadora cuántica IBM real, también necesitarás una (gratuita) cuenta de IBM Quantum® Platform. Puedes abrir una instancia usando el Plan Abierto para obtener 10 minutos de tiempo de unidad procesadora cuántica (QPU) por ventana deslizante de 28 días, ¡lo cual es bastante tiempo! Si tienes problemas con tu cuenta, consulta la página de Soporte.

También puedes ejecutar este notebook localmente después de instalar Qiskit siguiendo las instrucciones en IBM Quantum Platform.

Instalación e importaciones

En Colab, instalamos las dependencias dentro del notebook para que todos usen las mismas herramientas. La siguiente celda instala Qiskit con el módulo de visualización más dos complementos: Aer (simuladores rápidos) y el cliente de IBM Runtime (para ejecuciones en computadoras cuánticas).

A continuación, tenemos varias importaciones. La clase QuantumCircuit es donde definimos nuestros bits cuánticos, o qubits, y definimos operaciones sobre esos qubits. Este es nuestro primer término cuántico: un Qubit es el bloque de construcción básico de la computación cuántica, así como un bit es el bloque de construcción de la computación clásica. Aprenderemos más sobre las propiedades especiales de los qubits a medida que creemos nuestro Circuit. A continuación, plot_histogram se usará para visualizar los resultados de nuestro Circuit cuántico. AerSimulator nos permite simular el Circuit cuántico en una computadora clásica. Sin embargo, los simuladores no pueden ejecutar Circuits cuánticos a la misma escala que las computadoras cuánticas reales; por eso necesitamos computadoras cuánticas reales. Esto puede ser útil para pruebas, depuración o fines educativos; o si has agotado tus 10 minutos gratuitos de tiempo QPU. Los preset_passmanagers ayudan a optimizar los Circuits para ejecutarlos eficientemente en hardware, lo que se vuelve realmente importante a medida que nuestros Circuits se vuelven más complejos. Sampler y QiskitRuntimeService son necesarios para ejecutar el Circuit en la computadora cuántica. Más sobre esto más adelante.

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
!pip install 'qiskit[visualization]' qiskit-ibm-runtime qiskit-aer
# Core Qiskit imports
from qiskit import QuantumCircuit
from qiskit.visualization import plot_histogram
from qiskit_aer import AerSimulator
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

# IBM Runtime specific imports
from qiskit_ibm_runtime import SamplerV2 as Sampler, QiskitRuntimeService

A continuación, haremos una verificación rápida del entorno. Confirmamos las versiones y verificamos las importaciones.

Si algo falla aquí, generalmente es un problema de instalación de dependencias; solucionarlo ahora evita errores confusos más adelante.

import sys

import qiskit
import qiskit_aer
import qiskit_ibm_runtime

print("Python:", sys.version.split()[0])
print("qiskit:", qiskit.__version__)
print("qiskit-aer:", qiskit_aer.__version__)
print("qiskit-ibm-runtime:", qiskit_ibm_runtime.__version__)
Python: 3.12.2
qiskit: 2.2.3
qiskit-aer: 0.17.2
qiskit-ibm-runtime: 0.41.1

Una breve misión secundaria: usa el Composer

Antes de escribir código, es útil ver los Circuits visualmente. El Composer de IBM Quantum te permite construir Circuits arrastrando Gates sobre los cables. Es una excelente manera de aprender qué hace un Circuit sin distraerte con la sintaxis.

Abre el Composer aquí.

Una vez que cargue, inicia el tutorial guiado desde el menú: Help | Build your first circuit. Trabaja a tu propio ritmo. A medida que avances, presta atención a cómo cada Gate cambia lo que esperas medir.

El tutorial te guía paso a paso para construir el Circuit "Hello World". Se visualiza en lo que se llama un diagrama de Circuit, donde los qubits están representados por líneas horizontales y los Gates que actúan sobre esos qubits están representados por cajas u otros símbolos en las líneas. Este Circuit nos presenta algunas características clave de los qubits y las computadoras cuánticas:

Primero, la caja roja etiquetada "H" es un Gate de Hadamard, que crea un estado de superposición del qubit 0. A diferencia de un bit, que solo puede estar en el estado 1 o 0, un estado de Qubit puede incluir ambas posibilidades a la vez, con ciertos pesos (llamados amplitudes) asignados a cada una. La superposición no significa que alguna vez verás ambos resultados en una sola medición; significa que el estado está configurado de modo que cualquiera de los resultados puede ocurrir cuando se mide.

Segundo, los círculos y la línea vertical que conecta los dos qubits es un Gate CNOT, que genera entrelazamiento entre los dos qubits. El entrelazamiento es un tipo especial de vínculo entre qubits. Cuando los qubits están entrelazados, los resultados de las mediciones pueden estar fuertemente correlacionados de una manera que no coincide con lo que esperaríamos de lanzamientos de moneda independientes ordinarios, ni de ninguna correlación clásica. Cuando dos qubits están entrelazados, medir uno te dirá instantáneamente el resultado de medir el otro.

Otra idea clave que verás en el tutorial son los shots. Dado que la medición es el momento en que un Qubit deja de comportarse como un estado cuántico y te da una lectura clásica, un estado de superposición colapsará probabilísticamente a 0 o 1 cuando se mida. Por lo tanto, para aprender sobre esa superposición, necesitas medirla muchas veces ejecutando el mismo Circuit para acumular estadísticas. Estos se llaman shots.

Comprueba tu comprensión

Piensa en cada pregunta a continuación, luego haz clic para revelar la respuesta.

¿Puedes ver una superposición directamente a partir de una sola medición?

Answer

No. Una sola medición siempre devuelve un valor clásico: 0 o 1. La idea de "mezcla" solo aparece en las estadísticas que ves después de muchas ejecuciones, también llamadas shots.

En lenguaje sencillo, ¿qué te da el entrelazamiento?

Answer

Te da resultados vinculados. Medir un Qubit te dice algo sobre el otro. Este vínculo es más fuerte que la aleatoriedad independiente y más fuerte de lo que cualquier correlación puramente clásica o aleatoriedad compartida puede explicar.

Si un Qubit está en superposición, ¿qué ves en una sola medición y por qué necesitas muchos shots?

Answer

En una sola medición solo ves un resultado clásico: 0 o 1. Necesitas muchos shots porque la "superposición" se manifiesta como una distribución de probabilidad, que solo puedes estimar recopilando estadísticas a lo largo de ejecuciones repetidas.

Observa el histograma de medición de tu Circuit Hello World en el Composer. ¿Qué ves? ¿Por qué esto es una firma del entrelazamiento?

Answer

Te muestra un 50% de probabilidad de estar en el estado 00|00\rangle y un 50% de probabilidad de estar en el estado 11|11\rangle. Esto significa que si mides uno como 0, el otro será 0, y si mides uno como 1, el otro también será 1. Esta es una correlación entre los dos qubits que puede explicarse por el entrelazamiento.

Crea y ejecuta un programa cuántico usando Qiskit

Bien, volvamos a programar. Vamos a generar el mismo estado entrelazado que creamos en el Composer (llamado el estado de Bell Φ+\Phi^+ (phi-plus)) pero esta vez escribiremos el código a mano. Necesitamos desarrollar esta habilidad porque a medida que escalemos a más qubits y Circuits más complicados, el Composer no podrá ayudarnos.

Para construir el Circuit del estado de Bell, usamos un Gate HH (Hadamard) para poner el primer Qubit en una superposición equitativa. Luego aplicamos un Gate CXCX (NOT controlado), que entrelaza los dos estados. Los dos qubits ahora están correlacionados de una manera que no tiene equivalente clásico.

# --- Build the Bell circuit (phi-plus) ---
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all() # creates a classical register named "meas"

bell.draw("mpl")

Output of the previous code cell

Función auxiliar para ejecutar Circuits

Ahora definamos una función auxiliar que maneja el proceso de ejecutar un Circuit cuántico y recuperar los resultados de medición. Esta función se encarga de transpilar el Circuit para que coincida con el conjunto de instrucciones del backend, ejecutarlo a través de una primitiva Sampler, y extraer los conteos de los resultados.

def run_circuit_and_get_counts(circuit, backend, shots=1000):
"""
Runs a quantum circuit on a specified backend and returns the measurement counts.

Args:
circuit (QuantumCircuit): The quantum circuit to run.
backend: The Qiskit backend (real device or simulator).
shots (int): The number of shots to run the circuit.

Returns:
dict: A dictionary of measurement counts.
"""
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(circuit)

sampler = Sampler(mode=backend)

job = sampler.run([isa_circuit], shots=shots)
result = job.result()

return result[0].data.meas.get_counts()

Ejecutar en una QPU y visualizar los resultados

Finalmente, ejecutamos el Circuit en una unidad de procesamiento cuántico (QPU) de IBM en la nube para 1000 shots y graficamos los resultados. Las QPU de IBM son sistemas físicos que pueden captar ruido, por lo que los Gates son ligeramente imperfectos, las mediciones a veces pueden ser incorrectas y la calibración del dispositivo puede variar con el tiempo.

Ejecutar en computadoras cuánticas reales también introduce consideraciones prácticas. Los trabajos pueden estar en una cola, porque muchas personas pueden estar usando el mismo dispositivo. También debes elegir un conteo de shots que equilibre las consideraciones estadísticas (más shots equivale a una mayor relación señal-ruido) con las restricciones de tiempo y costo.

Sigue las instrucciones en los comentarios del código de la siguiente celda. Después de ejecutar la celda, deberías ver un histograma con conteos aproximadamente iguales para las cadenas de bits 0000 y 1111, con algunas ocurrencias de 0101 o 1010 debido al ruido. La siguiente celda en este notebook ejecuta el mismo Circuit en un simulador, si prefieres no ejecutarlo en una QPU.

# Syntax for first saving your token.  Delete these lines after saving your credentials.
QiskitRuntimeService.save_account(
channel="ibm_quantum_platform",
token="YOUR_TOKEN_HERE",
overwrite=True,
set_as_default=True,
)
service = QiskitRuntimeService(channel="ibm_quantum_platform")

# Load saved credentials
service = QiskitRuntimeService()

# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_fez".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_fez")
print(backend.name)
ibm_pittsburgh
counts = run_circuit_and_get_counts(bell, backend, shots=1000)
plot_histogram(counts)

Output of the previous code cell

Ejecutar en un simulador y visualizar los resultados

Un simulador es una versión de "mundo perfecto" de la computación cuántica. Aquí ejecutamos el Circuit en un simulador para 1000 shots y graficamos los resultados. Deberías ver conteos aproximadamente iguales para los estados 0000 y 1111, sin ocurrencias de 0101 o 1010, lo cual es la firma de la correlación perfecta del estado de Bell.

backend = AerSimulator()
counts = run_circuit_and_get_counts(bell, backend, shots=1000)

plot_histogram(counts)

Output of the previous code cell

Comprueba tu comprensión

¿Cuáles son los dos Gates que crean el estado de Bell aquí?

Answer

Un Gate H en el qubit 0, seguido de un Gate CX con el qubit 0 como control y el qubit 1 como objetivo.

En un simulador ideal, ¿qué dos cadenas de bits deberían dominar el histograma?

Answer

00 y 11 deberían dominar.

¿Por qué un simulador perfecto no siempre tendría exactamente el mismo número de conteos de 00 que de 11?

Answer

Aunque un simulador es "perfecto" y conduce a un estado de Bell perfecto, sigue simulando un proceso inherentemente aleatorio, por lo que las fluctuaciones estadísticas seguirán ocurriendo. Es como lanzar una moneda 1000 veces: aunque haya exactamente un 50-50 de probabilidad de que la moneda caiga en cara o cruz, eso no significa que siempre obtendrás exactamente 500 instancias de cara y 500 de cruz.

¿Por qué una computadora cuántica real podría mostrar algunos resultados de 01 o 10 aunque el simulador no lo hizo?

Answer

Porque los dispositivos reales tienen ruido. Los Gates y las mediciones no son perfectos, y eso puede introducir errores ocasionales.

¿Cuál es una diferencia práctica entre los simuladores y las computadoras cuánticas reales además del ruido?

Answer

Las computadoras cuánticas pueden implicar tiempo de espera en cola, disponibilidad limitada y restricciones específicas del dispositivo que afectan cómo se ejecutan los Circuits.

Conclusión

Empezamos configurando Qiskit en un entorno de Colab nuevo, que es exactamente como comienzan muchos flujos de trabajo de notebooks del mundo real. Lo seguimos con un viaje hacia la computación cuántica usando el Composer. Luego construimos un Circuit sencillo de dos qubits que produce el estado de Bell Φ+\Phi^+ y usamos el muestreo repetido y visualizamos el entrelazamiento como una correlación en el histograma de medición de los qubits. También vimos cómo las computadoras cuánticas reales introducen ruido y errores.

Objetivo de aprendizaje

Ahora que hemos visto cómo crear el estado de Bell Φ+\Phi^+, intenta editar el código para crear uno de los otros tres estados de Bell. En particular, el estado Ψ\Psi^- se usará en una próxima lección, así que si descubres cómo crearlo, llevarás ventaja.

This translation based on the English version of 7 may 2026