¿Qué es Azure Quantum? | Introducción a la computación cuántica
- Introducción a la computación cuántica
- ¿Qué es un qubit?
- ¿Qué es la superposición?
- ¿Cómo se almacena el estado de un ordenador cuántico?
- ¿Podemos simular un ordenador cuántico en un ordenador clásico?
- ¿Qué es el entrelazamiento cuántico?
- La interferencia
- ¿Cómo funcionan los algoritmos cuánticos?
- Complejidad de la computación cuántica
- ¿Qué es Azure Quantum?
- Quantum computing
- Optimization
- Resumen y conclusiones
El 1 de febrero Microsoft lanzó Azure Quantum en “public preview”, poniendo su plataforma de computación cuántica en la nube a disposición de todo el mundo. Pero antes de explicarte todo lo que nos ofrece Azure Quantum, voy a intentar explicarte de una manera sencilla qué es la computación cuántica y por qué la comunidad científica tiene puestas sus esperanzas en ella. Si ya sabes lo que es un qubit, el entrelazamiento cuántico y como funciona un algoritmo cuántico, te puedes saltar el siguiente apartado.
Introducción a la computación cuántica
Como ya sabrás, en la computación clásica se utiliza un sistema binario de unos y ceros para representar la información. A cada uno de estos dígitos binarios de información les llamamos bits. Físicamente hay muchas maneras de almacenar estos bits, por ejemplo, si pasa corriente eléctrica por un circuito lo denominamos 1 y si no 0. Los ordenadores clásicos lo que hacen es procesar está información binaria mediante algoritmos para resolver problemas.
La computación cuántica se aprovecha de los descubrimientos realizados por la física cuántica a nivel atómico para almacenar la información en partículas minúsculas, como por ejemplo iones. Y saca partido de las extrañas y anti intuitivas propiedades cuánticas para procesar la información de manera más rápida. Por analogía a la computación clásica, la unidad mínima de información en un ordenador cuántico la llamamos qubit.
¿Qué es un qubit?
Dejando a un lado el medio físico para construir un qubit, desde un punto de vista teórico podemos decir que un qubit, al igual que un bit, puede almacenar dos estados básicos a los que denominaremos |0〉 y |1〉. Pero, además, puede contener una combinación de los dos estados con una determinada proporción.
¿Qué es la superposición?
Imagina que nuestro qubit es un dado. Si el dado tiene |0〉 en todas sus caras, al tirar el dado siempre obtendremos el mismo resultado, |0〉. Y lo mismo si todas las caras son |1〉.
Pero si el dado tiene |0〉 en tres de sus caras y |1〉 en las otras tres, al tirar el dado tendremos la misma probabilidad de obtener, |0〉 y |1〉. Lo que determinará que salga |0〉 o |1〉 será el azar. A estos estados en los que el azar determina el resultado del lanzamiento en función de la configuración del dado, los llamamos estados de superposición.
Los ordenadores cuánticos permiten realizar operaciones sobre los qubits para cambiar el número de caras que tienen |0〉 y |1〉 en nuestro “dado”. La equivalencia al lanzamiento del dado sería la lectura o medición de los qubits. Cuando medimos un qubit, solo podemos obtener un |0〉 o un |1〉. Al igual que cuando lanzamos el dado.
¿Cómo se almacena el estado de un ordenador cuántico?
Simplificándolo mucho, un ordenador cuántico almacena las probabilidades del |0〉 y el |1〉 de cada qubit. Por ejemplo, si solo tenemos un qubit, el estado del ordenador podría ser el siguiente:
Donde el primer número, 0.3 (30%), indica la probabilidad de que salga |0〉, y el segundo, 0.7 (70%), la del |1〉.
Otro ejemplo, si en el qubit, quisiéramos guardar un |0〉, el estado sería y si quisiéramos guardar un |1〉 sería . Esta es la manera de almacenar los estados básicos.
Más adelante veremos la manera exacta en la que se guarda el estado, pero de momento pensar en probabilidades facilita la explicación.
¿Podemos simular un ordenador cuántico en un ordenador clásico?
Con lo que hemos visto hasta ahora nada nos impediría construir un simulador de ordenador cuántico almacenando en nuestros bits clásicos las probabilidades de los qubits. Básicamente, necesitaríamos un par de números positivos por cada qubit.
El problema es que cuando tenemos más de un qubit el estado no crece de manera lineal, sino de manera exponencial. Lo vas a entender perfectamente con un ejemplo:
Con un ordenador clásico de 3 bits podemos almacenar 8 números (del 0 al 7), es decir 23. Pero un ordenador cuántico necesita almacenar la probabilidad de cada uno de esos 8 números, por lo tanto, el estado sería:
Siguiendo con la metáfora del dado, imagina ahora que nuestro ordenador cuántico es un dado que tiene 8 caras, y que configuramos el dado de manera que tenga un número en cada cara, por lo tanto, la probabilidad de cada número sería 0.125 (12.5%), es decir, P0 = P1 = … = P7 = 0.125.
Por lo tanto, para simular un ordenador cuántico de 100 qubits necesitaríamos almacenar 2100 números con las probabilidades. Para hacernos una idea, se estima que la cantidad de datos utilizados en todo el mundo en 2021 es de unos 60 zettabytes (1 ZB = 1021 bytes = 1 billón de GB). Nosotros necesitaríamos más de 21 millones de “mundos de datos”, para poder simular tan solo 100 qubits.
En realidad, no siempre necesitamos 2N número para guardar el estado de N bits. Si los qubits no están entrelazados nos vale con 2 x N números. Almacenando las probabilidades de cada qubit por separado, como si fueran N ordenadores cuánticos independientes. Lo cual nos lleva a la siguiente pregunta…
¿Qué es el entrelazamiento cuántico?
Supongamos un ordenador cuántico de 2 qubits. Existen estados del ordenador que no se pueden conseguir combinando los estados independientes de los 2 qubits. Cuando esto ocurre decimos que esos dos qubits están entrelazados. El entrelazamiento provoca que la modificación de uno de los qubits afecte también al otro, y que la lectura de un qubit condicione la lectura del otro. Por cierto, se puede realizar entrelazamiento de más de 2 qubits. Veamos un ejemplo de estado entrelazado entre 2 qubits:
Este estado sería equivalente a un dado en el que la mitad de las caras tiene el número 0 (00 en binario) y en la otra mitad el número 3 (11 en binario). Es imposible conseguir la misma proporción de resultados con dos dados independientes que generen los 0s y los 1s binarios por separado. Necesitaríamos dos dados mágicos para poder conseguir esto, de manera que al lanzar el segundo dado siempre saliera lo mismo que en el primero.
Por cierto, hablando un poco de física, es posible coger estos dos qubits entrelazadas y separarlos físicamente cientos de kilómetros entre sí. Pues bien, si medimos el primer qubit y obtenemos un 0, podemos asegurar al 100% que cuando midamos el otro qubit obtendremos también un 0. Y lo mismo con el 1. Y además este efecto funciona instantáneamente, superando la velocidad de la luz. El universo de lo cuántico no solo es aleatorio, sino en cierto modo, también mágico.
La interferencia
Ya solo nos falta un concepto para poder entender cómo funcionan los algoritmos cuánticos, la interferencia. Con lo que hemos visto hasta ahora, podríamos tener un ordenador cuántico con una capacidad brutal, pero sería muy difícil utilizarlo para resolver problemas. La gracia de los ordenadores cuánticos es que los números que se almacenan en el estado no son número positivos, sino números complejos. Así que, en vez de almacenar directamente la probabilidad se almacena lo que denominamos amplitudes.
Para conocer la probabilidad, tan solo tenemos que calcular el módulo de la amplitud y elevarlo al cuadrado. Geométricamente, es equivalente al cuadrado de la distancia entre un punto del plano y el origen de coordenadas. Por supuesto, se tiene que seguir cumpliendo que la suma de todas las probabilidades es 1.
Por ejemplo, el estado entrelazado que veíamos en el apartado anterior en realidad se almacenaría así:
Para calcular las probabilidades tendríamos que coger cada amplitud y hacer lo siguiente:
Por ejemplo:
La ventaja de almacenar amplitudes es que podemos jugar con los números negativos, tanto en la parte real como en la imaginaria de los números complejos. Por ejemplo, el siguiente estado es totalmente equivalente al anterior en términos de la probabilidad resultante:
Con la interferencia lo que hacemos es realizar transformaciones en el estado de manera que las amplitudes de las soluciones incorrectas al problema se resten y tiendan a cero y las amplitudes de las soluciones correctas se sumen y se amplifiquen para que la probabilidad de obtener dichas soluciones sea lo más alta posible.
El nombre de interferencia viene del campo de las ondas. Piensa en cada amplitud como si fuera una onda. Si sumamos dos ondas en las que coinciden las crestas y los valles, la onda se amplifica, pero si hacemos justo lo contrario las ondas se anulan. Esto es lo que se denomina interferencia constructiva y destructiva, respectivamente.
¿Cómo funcionan los algoritmos cuánticos?
La mayoría de los algoritmos cuánticos encajan en el siguiente esquema:
- Fase de preparación: se realiza una preparación de los qubits de entrada en la que se establecen los valores iniciales de los qubits. Habitualmente, parte de esta preparación consiste en poner los qubits en superposición. Esto es lo que nos permite aprovechar el paralelismo cuántico para obtener la ganancia de velocidad.
- Fase de cálculo: se realizan transformaciones sobre los qubits intentando amplificar los resultados esperados y minimizar los resultados incorrectos, aprovechando para ello la interferencia cuántica. Para conseguirlo, suele ser necesario entrelazar qubits.
- Fase de medida: se miden qubits, destruyendo de esta manera el estado interno de las amplitudes de los qubits medidos y obteniendo una salida clásica de 1s y 0s.
- Fase iterativa: como el resultado obtenido es probabilístico, no siempre se obtiene el resultado esperado, por eso generalmente es necesario comprobar si el resultado obtenido es válido o es necesario volver a ejecutar el algoritmo. Otras veces, simplemente hay que iterar muchas veces para obtener el resultado de manera estadística.
Complejidad de la computación cuántica
Llegados a este punto quizás te estés preguntando, ¿Por qué funcionan de esta manera tan complicada los ordenadores cuánticos? ¿De verdad es necesario todo este lío de los números complejos, las amplitudes y demás?
La respuesta es bien sencilla: la naturaleza funciona así. Los científicos lo que han hecho ha sido encontrar un modelo matemático que se ajusta como un guante a la mecánica cuántica. Y de esta manera aprovechar el funcionamiento de la naturaleza para realizar cálculos que serían imposibles de llevar a cabo en los ordenadores clásicos.
Los algoritmos cuánticos desarrollados hasta ahora ya han demostrado su superioridad sobre los algoritmos clásicos homólogos para tamaños reducidos del problema. Por lo tanto, si se consigue construir un ordenador cuántico con suficientes qubits, se podrán resolver problemas con tamaños hasta ahora inabordables.
Quizás el algoritmo más famoso es el de Shor, que permite realizar la factorización de la clave pública en sus factores primos, tirando por tierra los sistemas actuales de encriptación con clave pública que se utilizan por ejemplo para las comunicaciones por Internet. Dicha factorización costaría miles de años llevarla a cabo en el ordenador clásico más potente, mientras que en uno cuántico se podría realizar en horas.
¿Qué es Azure Quantum?
Azure Quantum es un servicio que ofrece Microsoft a través de su nube, Azure. Este servicio tiene dos partes bien diferenciadas, computación cuántica (quantum computing) y optimización (optimization). Ambas se pueden desplegar creando un recurso de tipo Quantum Workspace en Azure.
Quantum computing
Con Quantum computing de Azure podemos desarrollar algoritmos cuánticos mediante el lenguaje de programación Q# y el QDK (Quantum Development Kit). Tanto Q# como QDK son open-source. QDK incluye librerías específicas para química, machine learning y cálculos con qubits. Y podemos usar nuestras herramientas favoritas: Visual Studio, VS Code y Jupyter Notebooks.
Los algoritmos que implementemos los podemos ejecutar a pequeña escala mediante el simulador local de QDK, y también los podemos subir a la nube en forma de trabajos (jobs), usando un Quantum Workspace.
A la hora de subir un job podemos elegir en que proveedor lo queremos ejecutar. Microsoft pone a nuestra disposición diferentes proveedores que nos ofrecen simuladores de ordenadores cuánticos de mayor capacidad que el nuestro local y también ordenadores cuánticos reales con unos pocos qubits.
Actualmente, tenemos disponibles dos proveedores de ordenadores cuánticos reales implementados mediante trampas de iones:
- Honeywell Quantum Solutions:
- System Model H0: 6 qubits
- System Model H1: 10 qubits
- IonQ:
- Trapped Ion QC: 11 qubits
En el futuro, se irán añadiendo más proveedores, como por ejemplo el ordenador cuántico basado en superconductores de Quantum Circuits Inc.
Cuidado al comparar la potencia de los ordenadores cuánticos mediante el número de qubits porque puede ser engañoso. La medida a tener en cuenta es el volumen cuántico. Por ejemplo, el modelo H1 de Honeywell tiene un volumen cuántico de 128, el mayor del mundo desde noviembre de 2020. Aunque quizás por poco tiempo, porque IonQ ha asegurado que en 2021 ofrecerá a través de Azure Quantum un ordenador con 32 qubits y un volumen cuántico de nada más y nada menos que ¡4 millones!
Por cierto, una gran ventaja de los ordenadores basados en trampa de iones es que gracias a la movilidad de los iones se puede realizar el entrelazamiento cuántico entre todos los qubits que se desee.
De cualquier manera, gracias a Azure Quantum y a Q# nos podemos abstraer del hardware que ejecutará nuestro algoritmo. Eso sí, hay que tener en cuenta que el diseño del algoritmo puede afectar al rendimiento en función del hardware utilizado.
Optimization
Con Optimization de Azure Quantum, tenemos acceso a algoritmos de optimización realizados por Microsoft y otros proveedores. Los problemas de optimización se resuelven buscando a través de las posibles soluciones. La mejor solución es aquella con el menor coste, aunque no siempre se consigue encontrar la mejor solución de todas. Un problema típico de optimización es el problema del viajante (Travelling Salesman Problem), el cual trata de encontrar la ruta más corta para recorrer un conjunto de ciudades y volver a su casa.
Para poder usar estos algoritmos, deberemos ser capaces de definir el problema a resolver en los términos de especificación definidos por los solucionadores (solvers). Para ello usaremos el SDK de Python: azure-quantum. Estos algoritmos los ejecutaremos en hardware clásico en Azure.
Actualmente, tenemos disponibles dos proveedores de algoritmos de optimización, con los siguientes solvers:
- Microsoft QIO (Quantum-Inspired Optimization):
- Simulated annealing
- Simulated annealing (Parameter-free)
- Parallel tempering
- Parallel tempering (Parameter-free)
- Quantum Monte Carlo
- 1Qloud Optimization Platform:
- Tabu Search Solver
- Path-Relinking Solver
- PTICM Solver
La ventaja de utilizar estos algoritmos inspirados en la computación cuántica es que podemos usarlos en problemas reales con una mejora de la velocidad, sin tener que esperar a la evolución de los ordenadores cuánticos. Y que cuando llegue la tan ansiada supremacía cuántica no tendremos que cambiar nada para aprovecharnos de la nueva capacidad de cálculo.
Resumen y conclusiones
Hemos hecho un breve recorrido por algunos de los conceptos más importantes de la computación cuántica:
- El qubit como bit cuántico.
- La superposición para permitir estados intermedios del qubit entre el 0 y el 1.
- El estado del computador cuántico como un vector de tamaño 2nº de qubits.
- Las extraordinarias propiedades del entrelazamiento cuántico para coordinar dos o más qubits.
- El uso de la interferencia cuántica para amplificar las soluciones válidas a un problema y disminuir las inválidas.
- El esquema general de los algoritmos cuánticos, combinando todo lo anterior.
También hemos visto como Microsoft a través de Azure Quantum, nos provee de las herramientas necesarias para desarrollar algoritmos cuánticos tanto en simuladores como en ordenadores cuánticos reales de unos pocos qubits. Además, nos ofrece algunos algoritmos ya implementados que podemos utilizar para solucionar problemas de optimización.
No es de extrañar que las expectativas depositadas en el futuro de la computación cuántica sean tan elevadas. Teniendo en cuenta la capacidad de cálculo potencial de un ordenador cuántico con unos cientos de qubits y la velocidad a la que está incrementándose el volumen cuántico, el futuro es ciertamente alentador. No en vano, empresas y gobiernos de todo el mundo están invirtiendo millones en investigar tecnologías cuánticas. Por ejemplo, la Unión Europea con su iniciativa a larga escala denominada Quantum Flagship, invertirá mil millones de euros durante 10 años.
Pero también quedan importantes retos que habrá que superar antes de la tan ansiada ventaja cuántica. Es el caso de la temida decoherencia cuántica que hay que evitar durante la ejecución de los algoritmos ya que descompone la superposición y el entrelazamiento de los qubits.
De cualquier forma, es de agradecer el continuo avance de las herramientas de desarrollo para ordenadores cuánticos que nos garantizará un entorno de desarrollo maduro para la próxima revolución cuántica.