featured image

La programación cuántica es un concepto de hace bastante tiempo pero aún en gestación. Algunas empresas como IBM o D-Wave Systems han construído sus procesadores cuánticos, han aparecido los primeros lenguajes pero, ¿qué significa todo esto para nosotros? ¿qué ventajas e inconvenientes tiene esta tecnología?

Comenzaremos por definir en qué consiste esta tecnología. Para ello y basándome en las explicaciones magistrales ofrecidas por Francisco Gálvez, de IBM, podemos definir la programación cuántica como un nuevo paradigma de programación empleando qubits, otras puertas lógicas diferentes y hace posible realizar nuevos algoritmos.

¿Qué es un Cúbit?

Un qubit (o cúbit para algunos) es la unidad mínima en la computación cuántica. Como similitud al bit de la computación clásica el cúbit puede tomar los valores 0 y 1, pero la diferencia radica en poder obtener incluso ambos valores al mismo tiempo mediante superposición. La notación correcta sería |0> y |1> nombrados como ket-0 y ket-1 respectivamente.

La superposición de ambos estados se representa como α|0> + β|1>, indicando que el cúbit puede contener 0, 1 o ambos valores al mismo tiempo.

¿Qué puertas lógicas se pueden componer?

Realmente esto es hablar a muy bajo nivel. Es como hablar de puertas NOT, NAND y XOR cuando hablamos de computación clásica. No obstante podemos identificar dos puertas cuánticas que se emplean en la computación cuántica para construir los sistemas:

Las puertas NOT controlada (CNOT) y Hadamard (H) son las más comunes a bajo nivel. Con estas puertas se pueden construir la amplia mayoría de sistemas cuánticos. No obstante existen además otras puertas cuánticas.

A través de la aplicación composer de IBM se puede jugar a construir circuitos empleando estas puertas lógicas.

¿Qué algoritmos existen?

Existen muchos algoritmos cuánticos pero considero los siguientes como los más destacables y Francisco Gálvez los marcó como principales es su charla en CodeMotion de 2016.

El algoritmo de Shor se basa en encontrar dos números cuya multiplicación sea igual al número dado. Sistemas criptográficos como RSA se basan en la multiplicación de dos números primos de gran tamaño para obtener otro empleado para cifrar un mensaje. Con este algoritmo la complejidad de hallar la pareja de números baja drásticamente.

El algoritmo de Deusch es un algoritmo muy simple diseñado para hallar si una función es balanceada o fija. Es decir, dada una entrada de 0 o 1, decidir si es balanceada (retorna un valor diferente por cada entrada) o es fija (devuelve siempre el mismo valor). En computación clásica necesitamos dos comprobaciones mientras que la naturleza de los cúbits nos permiten realizar este algoritmo en tan solo un paso.

El algoritmo de Grover es el algoritmo empleado para realizar búsquedas en espacios estructurados (como bases de datos) no ordenadas. Mientras que la computación clásica necesita emplea un orden de complejidad media de N/2, este algoritmo cuántico requiere tan solo la raíz cuadrada de N.

La Máquina Cuántica Adiabática

En su blog, Francisco R. Villatoro destacó la salida del ordenador cuántico de la empresa D-Wave Systems como una máquina cuántica adiabática.

La diferencia entre una máquina cuántica universal y una máquina cuántica adiabática es que la primera está diseñada para emplear cualquier algoritmo cuántico mientras que la segunda solo aplica un algoritmo cuántico concreto. En el caso específico de la máquina desarrollada por D-Wave Systems ellos emplean el algoritmo de Grover para la implementación de la mayor parte de la lógica cuántica.

La máquina cuántica a día de hoy dispone de 2000 cúbits y se comercializa para implementar soluciones de todo tipo. Veremos más adelante las principales aplicaciones.

La Máquina Cuántica Universal

IBM está tras la creación de la máquina cuántica universal. Esta es accesible a través de Internet y podemos desarrollar algoritmos y ver cómo se solucionan a través de un procesador de 5 cúbits.

Aún están algo lejos de conseguir una máquina capaz de resolver problemas del mundo real pero tienen un departamento trabajando en ello.

Aplicaciones de la Computación Cuántica

Copiando un poco las aplicaciones de la web de D-Wave Systems podemos decir que las aplicaciones son:

Optimización para Radioterapias. La computación cuántica ayudaría a minimizar los efectos y daños colaterales de este tipo de tratamiento pudiendo calcular mejor la cantidad de radiación a aplicar.

Plegado de las Proteínas. Diseño de mejores fármacos midiendo mejor el plegado de las proteínas. Después de investigar un poco creo que podría medir el plegado perfecto de las proteínas y cuándo pueden no tener un plegado correcto para evitar enfermedades neurológicas degenerativas.

Optimización de las Redes de Agua. EPANET es un software de dominio público diseñado para simular el movimiento y calidad del agua dentro de cañerías presurizadas de agua. Puede simular el flujo de agua en cada cañería, la presión en cada nodo, la altura de agua en cada tanque, tipo de concentración química, antigüedad del agua, etc.

Detección de Objetos. Dentro de Machine Learning esta primera aplicación obtiene de las imágenes una identificación de los objetos presentes en cada imagen de una forma mucho más rápida.

Etiquetado de Nuevas Historias. A nivel periodístico, la entrada de nuevas noticias puede ser etiquetada automáticamente identificando el tipo de contenido para catalogarlo correctamente.

Compresión de Vídeo. Los algoritmos que han aparecido con la programación cuántica y relacionados con la compresión de datos han demostrado ser óptimos con respecto a los ya conocidos de la programación clásica. En vídeo esto supodría un gran avance pudiendo comprimir aún más el vídeo y descomprimirlo para ser reproducido a una mayor velocidad.

Problemas de la Computación Cuántica

A día de hoy, finalizando 2017, existen tan solo dos compañías compitiendo en el terreno de la computación cuántica (o al menos publicando información). Tenemos por un lado un computador cuántico adiabático (de D-Wave Systems de 2000 cúbits) y algunos prototipos por parte de IBM de computadores cuánticos universales (de 20 y 50 cúbits).

Aunque a primera instancia podríamos pensar en un futuro en el que cada computador clásico pueda tener una CPU para procesar programas, una GPU para los gráficos y una QPU para la resolución de problemas cuánticos, pero el diseño físico de componentes cuánticos (los cúbits específicamente) tienen algunos problemas.

La coherencia de enlazado entre dos cúbits solo se ha conseguido mantener durante 100 nanosegundos. Es el tiempo máximo disponible para ejecutar un algoritmo. Fuera de este tiempo la coherencia se pierde y por tanto el estado cambia.

Para matener esta coherencia a 100 nanosegundos la temperatura del sistema debe mantenerse cercana al cero absoluto (0.015 grados Kelvin o -273 grados Centígrados). Esta limitación hace excesivamente complicado incluir un QPU en un ordenador convencional.

¿Cómo prepararnos?

Hasta disponer del hardware apropiado podemos diseñar software cuántico empleando algunas librerías o lenguajes para el diseño de algoritmos cuánticos. Algunos de estos son:

Quipper es un lenguaje que ha evolucionado desde Haskell. Mezclado con la programación funcional permite el diseño de algoritmos cuánticos.

QuTIP es una librería para Python que permite desarrollar algoritmos cuánticos dentro del propio Python. Esta librería ha sido impulsada por actores como IBM, Microsoft, Google, Intel, Amazon y Alibaba entre otros.

Lenguaje Q# es un lenguaje creado por Microsoft para ser empleado en Azure, completamente integrado con Visual Studio. Azure promete la simulación de algoritmos de más de 40 cúbits según la página web. En otros sitios como Genbeta mencionan sobre Azure la posibilidad de simular hasta 40 cúbits y de Visual Studio hasta 30 cúbits.

Otras aproximaciones más antiguas como LanQ o QCL pueden ser revisadas también para obtener más fundamento y base en la programación cuántica.

Conclusiones

Se va abriendo cada vez más el campo de la programación cuántica. De momento se va resolviendo el problema de la computación cuántica con respecto a hardware y a pasos agigantados próximamente comenzaremos a ver cada vez más algoritmos, librerías, lenguajes y soluciones para implementar.

En mi opinión será genial cuando comencemos a implementar algoritmos de machine learning en el ambiente de la programación cuántica, será un gran empuje al rendimiento de ese campo.

¿Te has animado a investigar en este campo? ¿Qué te parece en general la computación y programación cuántica? ¿Has visto los avances que tendrán las aplicaciones? ¡Déjanos tu comentario!