Simulaciones cuánticas con Python | Hacia la ciencia de datos

La Computación Cuántica es el campo de la tecnología que utiliza principios de la mecánica cuántica (es decir, Superposición y Entrelazamiento) para procesar información de una manera fundamentalmente diferente a la de las computadoras clásicas. Para decirlo en palabras simples, en lugar de bits (0 o 1), las computadoras cuánticas usan qubits para resolver problemas complejos y de alta dimensión en química, ciencia de materiales y optimización, potencialmente en segundos en lugar de años.

En la práctica, los problemas se resuelven construyendo modelos matemáticos llamados circuitos cuánticos: secuencias de operaciones e instrucciones que toman algunas entradas y devuelven una salida (de manera similar a la regresión lineal y las redes neuronales). En computación cuántica, esas operaciones se denominan puertas que modifican los datos (qubits) de otra manera. Básicamente, un circuito es una oración y las puertas son las palabras que componen la oración.

Los circuitos se utilizan para realizar experimentos. En concreto, existen 2 tipos de simulaciones cuánticas:

Usando una computadora normal para simular una computadora cuántica. Como usar Python para escribir un circuito y un simulador para ejecutarlo, mientras que una computadora cuántica real implementaría físicamente el circuito. Usar una computadora cuántica para simular un sistema cuántico real (como átomos o electrones). En la naturaleza ya existen sistemas cuánticos y las computadoras clásicas luchan por simularlos porque el espacio de estados crece exponencialmente. Por otro lado, las máquinas cuánticas pueden modelar estos sistemas de manera más eficiente, ya que naturalmente siguen las mismas reglas.

En este tutorial, te mostraré cómo ejecutar una simulación cuántica en tu computadora. Este artículo es la secuela de “Una guía para principiantes sobre computación cuántica con Python”.

Configuración

En primer lugar, necesitamos instalar Qiskit (pip install qiskit), una biblioteca de código abierto para trabajar con computadoras cuánticas desarrollada por IBM que le permite simular un dispositivo cuántico en su máquina local.

El código más básico que podemos escribir es crear un circuito cuántico (entorno para la computación cuántica) con un solo qubit e inicializarlo a 0. Para medir el estado del qubit, necesitamos un vector de estado, que básicamente indica la realidad cuántica actual de su circuito.

de qiskit import QuantumCircuit de qiskit.quantum_info import Statevector q = QuantumCircuit(1,0) #circuito con 1 bit cuántico y 0 bit clásico state = Statevector.from_instruction(q) #medir estado state.probabilities() #imprimir prob%

Significa que la probabilidad de que el qubit sea 0 (primer elemento) es del 100% y la probabilidad de que el qubit sea 1 (segundo elemento) es del 0%. Visualicemos el estado:

desde qiskit.visualization importar plot_bloch_multivector plot_bloch_multivector(estado, figsize=(3,3))

Circuitos

Una puerta cuántica es una operación única que cambia el estado cuántico. Un circuito cuántico es una secuencia de puertas aplicadas a qubits a lo largo del tiempo.

Comencemos a construir un circuito simple.

q = QuantumCircuit(1,0) #circuito con 1 bit cuántico y 0 bit clásico q.draw(output=”mpl”, scale=0.7) #mostrar circuito con matplotlib

Tenemos un qubit, pero para medirlo necesitamos agregar un bit clásico a nuestro circuito.

q = QuantumCircuit(1,1) #agregar 1 bit clásico q.draw(output=”mpl”, escala=0.7)

Para construir un circuito, debes saber lo que quieres lograr, o dicho de otra manera, necesitas conocer las puertas y lo que hacen. El enfoque es similar al de las redes neuronales: simplemente usa una capa tras otra para obtener el resultado deseado (es decir, convoluciones en imágenes e incrustaciones en texto). La operación más común es la Puerta Hadamard (puerta H), que aplica Superposición a un qubit.

q = QuantumCircuit(1,1) qh(0) #Puerta Hadamard (Superposición) q.draw(output=”mpl”, escala=0.7)

En la imagen, vemos que la puerta H roja se aplica al qubit, convirtiéndolo de un 0 definido en una mezcla 50/50 de 0 y 1. Agreguemos un cuadro de medición, que colapsa esa superposición en un valor real (ya sea 0 o 1), almacenando ese resultado en el bit clásico.

q = QuantumCircuit(1,1) qh(0) q.measure(qubit=0, cbit=0) #medir qubit con bit clásico q.draw(output=”mpl”, escala=0.7)

El circuito ha sido diseñado matemáticamente por mi computadora clásica tal como estaba escrito en papel, pero aún no se ha ejecutado.

Simulación

Una simulación cuántica es cuando se utiliza una computadora para modelar el comportamiento de un sistema cuántico. Si escribes un circuito (como hice arriba), solo estás describiendo el modelo matemático. Para ejecutarlo, necesita un motor backend que ejecute el circuito cuántico en simulación.

Qiskit-Aer (pip install qiskit-aer) es el motor que ejecuta circuitos cuánticos en simulación. Aer le permite ejecutar circuitos cuánticos en su computadora, simulando diferentes aspectos del hardware cuántico real (estado cuántico, medición, sistema ruidoso).

Voy a ejecutar el experimento con el circuito escrito anteriormente (un bit clásico + un qubit en Superposición) 1000 veces.

de qiskit_aer importar AerSimulator sim = AerSimulator() resultado = sim.run(q, shots=1000).result() resultado.get_counts()

El qubit se midió 1000 veces, lo que resultó en 1 para 500 veces y 0 para las otras 500 veces. Podemos visualizarlo:

de qiskit.visualization importar plot_histogram plot_histogram(result.get_counts(), figsize=(5,4), color=”black”, title=”1-qubit en superposición”)

El resultado es perfectamente uniforme porque Aer puede simular estados cuánticos perfectos, que serían imposibles de tener en hardware real. En el mundo real, la información cuántica es extremadamente frágil y funciona bajo el supuesto de que el sistema es perfecto y estable, permitiendo que las partículas existan en múltiples estados (Coherencia). Pero en el momento en que el qubit interactúa con algo, como calor o vibraciones, el sistema pierde su armonía y sus propiedades cuánticas (Decoherencia).

Por lo tanto, puedes visualizar un qubit en Superposición (0 y 1 al mismo tiempo) sólo en una simulación, pero nunca en el mundo real. Porque en el momento en que observas el qubit, generas ruido y el sistema colapsa en un solo número (0 o 1). En la práctica, los ordenadores cuánticos reales sirven sólo para medir resultados, mientras que las simulaciones se utilizan para diseñar modelos cuánticos.

Para que el experimento sea más realista, se puede añadir ruido a la simulación.

de qiskit_aer importar ruido n = noise.NoiseModel() error = noise.depolarizing_error(param=0.10, num_qubits=1) #10% de probabilidad de error n.add_all_qubit_quantum_error(error=error, instrucciones=[‘h’]) sim = AerSimulator(noise_model=n) resultado = sim.run(q, shots=1000).result() plot_histogram(result.get_counts(), figsize=(5,4), color=”black”, title=”1-qubit en superposición”)

Conclusión

Este artículo ha sido un tutorial para presentar simulaciones cuánticas con Python y Qiskit. Aprendimos cuál es la diferencia entre un hardware real y un experimento cuántico. También aprendimos a diseñar circuitos cuánticos y a ejecutar una simulación en una máquina clásica.

Código completo para este artículo: GitHub

¡Espero que lo hayas disfrutado! No dude en ponerse en contacto conmigo si tiene preguntas y comentarios o simplemente para compartir sus proyectos interesantes.

👉Conectémonos 👈

(Todas las imágenes son del autor a menos que se indique lo contrario)