|QC-4> Encendiendo los fogones

Juan Antonio Garcia
20 min readNov 15, 2021

--

Cerrando el refrigerador de dilución en un computador IBM QX

En este artículo nos sumergimos en el apasionante mundo de la programación, que nos ayudará a entender cómo extraer una utilidad práctica a todo lo visto en artículos anteriores. Pero esta no es una serie de artículos de programación ni yo un experto en la materia (aunque he programado en múltiples lenguajes a lo largo de mi dilatada carrera profesional), así que intentaré centrarme en lo más relevante.

Ofreceremos una visión general de las herramientas disponibles de programación para programas ya sea en simuladores, computadores cuánticos o computación en la nube pública.

Personalmente, la programación de circuitos en un computador cuántico me recuerda a los tiempos de la infancia de la computación digital, cuando los programas se codificaban en tarjetas perforadas, o a su nacimiento, en que se usaban cables para codificar los circuitos (como en el ENIAC). Lo que resulta evidente es que este campo se va a desarrollar enormemente, en paralelo con el avance en el HW cuántico, y dentro de una década no tendrá nada que ver con lo que conocemos ahora. Es un proceso natural de evolución tecnológica.

En cualquier caso, el propósito de este artículo es presentar la realidad actual de forma simplificada. Así que comenzaremos por explicar algunos conceptos y antecedentes, para luego presentar ejemplos prácticos de programación de un computador cuántico basado en puertas. Para explicar la otra categoría de computadores cuánticos, basados en el recocido (o annealing en inglés), debemos introducir antes el concepto de optimización combinatoria. Pero eso lo trataremos en el siguiente artículo de esta serie.

Para algunos de los ejemplos que se muestran aquí hemos usado el servicio Quantum Experience de IBM.

Curiosidad: IBM ha construido un servicio de computación cuántica en la Nube, llamado IBM Quantum Experience (QX), poniendo a disposición de empresas, profesionales y estudiantes o curiosos de la tecnología, una batería de computadores cuánticos basados en puertas de diferentes potencias y tecnologías de qubit. Para su uso ha diseñado una interfaz de usuario muy sencilla y amigable entre la que destaca Composer, que permite “componer”, como si de una composición musical basada en samples se tratara, el circuito cuántico que deseemos. También es posible ver el código correspondiente a dicho circuito en lenguaje OpenQASM de IBM o en Python (QISKit)

Antes de hablar sobre herramientas disponibles o ejemplos de programación, debemos introducir algunos conceptos.

En términos generales, programar un computador cuántico implica realizar operaciones con qubits. Las operaciones que se pueden realizar con qubits se llaman puertas, como el equivalente en computación digital en el que las operaciones se implementan con puertas lógicas, sin embargo aquí no estamos realizando operaciones aritméticas con representaciones en binario de números, sino actuando sobre el estado de los qubits cuánticos. Lo veremos más claro más adelante.

Las operaciones se pueden implementar con circuitos cuánticos y los circuitos, se combinan para generar algoritmos cuánticos. Luego la secuencia natural sería:

puertas cuánticas => circuitos cuánticos => algoritmos cuánticos

Explicaremos a continuación cada uno de ellos, pero antes debemos introducir el concepto de la esfera de Bloch, que es una forma común de representación visual del qubit.

Esfera de Bloch

La esfera de Bloch es una representación matemática del estado del qubit que nos permite visualizar mejor las operaciones que se pueden realizar sobre el mismo.

Curiosidad: El nombre se debe al científico Felix Bloch que obtuvo el premio Nobel de física en 1962 por sus trabajos en resonancia magnética nuclear (NMR, por sus siglas en inglés)

La esfera de Bloch es una representación tridimensional en que cada eje representa una dimensión del estado que define al qubit. En esta esfera, un estado cuántico cualquiera es fácilmente representable como un vector de longitud unitaria, y sus proyecciones sobre los distintos ejes, determinan las bases de esa determinada dimensión. En resumen, es un artefacto geométrico para representar bits cuánticos, y cualquier estado cuántico es un punto sobre la superficie de la esfera.

Lo veremos más claro con la imagen siguiente, que habíamos presentado cuando hablamos del qubit en el artículo anterior.

Representación del qubit con la esfera de Bloch

Esta representación ha estado muy ligada a la definición de los qubits, de hecho algunas de las puertas lógicas que introduciremos a continuación, toman sus nombres de movimientos sobre alguno de los ejes de esta representación.

Recordemos que un qubit puede estar en cualquier estado, pero cuando lo medimos, sólo podrá encontrarse en el estado |0> o |1>, que representamos por valores 0 y 1 respectivamente. La magia de la mecánica cuántica, que ha permitido el desarrollo de los computadores cuánticos y explotar sus posibilidades, es que podemos actuar de múltiples maneras sobre el qubit antes de medirlo. La forma de actuar sobre el qubit es por medio de las puertas cuánticas. De hecho, la medición es una puerta más, en la que el resultado es obtener el estado del qubit.

Puertas cuánticas

Las puertas cuánticas son el equivalente a las puertas lógicas en la computación digital. Son las implementaciones que nos permiten realizar operaciones con qubits. Al contrario que en la computación digital, en la que los bits equivalen a valores discretos de números en base 2 (binaria), los qubits (como hemos visto hasta ahora), representan estados cuánticos sujetos, por tanto, a las propiedades que hemos visto en los artículos previos de esta serie.

Una puerta cuántica es una operación aplicada a un qubit que cambia el estado cuántico del qubit. Las puertas cuánticas se pueden dividir en puertas de un solo qubit y puertas de dos o más qubits, según el número de qubits a las que se aplican al mismo tiempo.

Definición: Una puerta cuántica es una operación reversible (unitaria) aplicada a uno o más qubits.

No vamos a detallar aquí todas las puertas cuánticas que se han ideado, ya que existen infinidad de ellas, y hay una extensa literatura que cubre esta información con todo el grado de detalle que necesitemos, sin embargo vamos a mencionar algunas de ellas por su relevancia.

Puerta cuántica Hadamard

La puerta Hadamard actúa sobre qubit y lo convierte en una superposición equiprobable de sus vectores de estado: |0> y |1>.

Puerta cuántica T (o R con ángulo de PI/4)

La puerta T produce una rotación de fase de 45 grados en el estado de un qubit.

Puerta cuántica CNOT y su equivalente digital

La puerta CNOT actúa sobre 2 qubits y produce un NOT lógico en el qubit controlado, en función del otro qubit que actúa de control. Es equivalente a una puerta XOR (o-exclusivo) clásica, aplicada al bit controlado, es decir, invierte el valor del bit controlado solo si el bit de control es 1, dejándolo inalterado si es 0.

Las puertas CNOT, T y Hadamard forman un conjunto universal, de modo que cualquier puerta puede representarse en función de estas tres.

Como puerta de 3 qubits, una puerta básica es la denominada Toffoli, que equivale una doble NOT controlada por dos qubits, en vez de por uno, como en la CNOT.

La tabla siguiente muestra un resumen de las puertas mencionadas.

Fuente: Emily Grumbling and Mark Horowitz, “Quantum Computing Progress and Prospects

Circuito cuántico

Los algoritmos cuánticos se describen más comúnmente mediante un circuito cuántico, del cual se muestra un ejemplo simple en la figura siguiente. Un circuito cuántico es un modelo para la computación cuántica, donde los pasos para resolver el problema son puertas cuánticas realizadas sobre uno o más qubits.

Circuito simple. Imagen del Composer de IBM Q Experience

En la imagen vemos un circuito simple realizado en el Composer de IBM Q Experience, donde se construye un estado de Bell (superposición equiprobable) entre dos qubits y se lee el resultado de ambos. El Composer permite representar gráficamente el circuito de una forma muy visual, pero también es posible ver, y escribir, el circuito en OpenQASM o en Python (con QISKit). En la parte derecha de la imágen anterior, vemos el circuito como se programaría en Python con la librería QISKit y en la siguiente imagen vemos el equivalente en OpenQASM.

Como también explicaremos más adelante, un problema con que hay que lidiar en el estado actual de evolución tecnológica, es diseñar circuitos con suficiente creatividad e imaginación para que los circuitos no sean demasiado complejos (impliquen a muchos qubits), ni muy extensos, para no verse limitados por los tiempos de decoherencia de los qubits.

Algoritmo cuántico

Un algoritmo es un procedimiento paso a paso para realizar un cálculo, o una secuencia de instrucciones para resolver un problema, donde cada paso se puede realizar en una computadora. Por lo tanto, un algoritmo es un algoritmo cuántico cuando se puede realizar en una computadora cuántica. En principio, es posible ejecutar todos los algoritmos clásicos en una computadora cuántica. Sin embargo, el término algoritmo cuántico se aplica a algoritmos de los cuales al menos uno de los pasos es claramente “cuántico”, utilizando superposición o entrelazamiento. Y esto es siempre así cuando usamos circuitos cuánticos que usan puertas cuánticas.

En el estado actual de la vanguardia, la creación de algoritmos cuánticos requiere un buen conocimiento de los principios básicos subyacentes y, sobre todo, altas dosis de creatividad e imaginación para encontrar el/los circuito(s) que, en menos pasos, implemente el objetivo del algoritmo. Esto es así, fundamentalmente, por el problema de la escalabilidad y la decoherencia. El primero porque muchas de las tecnologías actuales de implementación del qubit, limitan (o complican en exceso), el tamaño de qubits que se pueden enlazar para construir un sistema que nos permita utilizarlos de acuerdo a complejos circuitos de muchos qubits. Recordemos que actualmente no existen implementaciones que superen la barrera de una centena de qubits, y con ciertas limitaciones a la construcción de puertas que involucren a múltiples qubits. El segundo porque la longitud del circuito afecta al tiempo que es necesario mantener en los estados definidos por las puertas que hayamos incluido en el mismo, lo cual puede provocar la decoherencia de alguno (o todos) los qubits (ya sabé que eso significa que pierden su estado de superposición), por lo que el algoritmo no funcionará o no lo hará como habíamos planeado.

Un último factor que obliga a un correcto diseño de circuitos y algoritmos cuánticos es el de minimizar el error provocado por los sistemas actuales que, en la mayoría de las implementaciones, es muy significativo y crece exponencialmente con el número de qubits empleados. Luego, si somos capaces de hacer lo mismo, con menos qubits y menos puertas, tendremos un algoritmo robusto, potente y con una utilidad práctica real.

Un detalle importante a tener en cuenta es que para diseñar un algoritmo cuántico y, sobre todo para depurarlo, es necesario un simulador y, un simulador no es más que un servidor o conjunto de servidores con la potencia suficiente para emular lo que queremos que finalmente se ejecute en un computador cuántico. Esta potencia puede ser lo suficientemente relevante como para considerarlo un sistema digital de altas prestaciones, o lo que es lo mismo, un clúster de HPC (High Performance Computing o Supercomputación). Es por ello que HPC y computación cuántica convergen, o se complementan, como mejor lo queramos expresar. Esto nos puede llevar a preguntarnos por qué sería necesario un computador cuántico si podemos hacer lo mismo con un computador digital. La respuesta es la eficiencia energética y el tiempo. El computador cuántico resuelve problemas en muchísimo menos tiempo que su equivalente simulado. Hablamos de diferencias en orden de magnitudes de 5 cifras y por otro lado, como apuntábamos en el segundo artículo de esta serie, un computador cuántico es una máquina de procesamiento paralelo natural. Muchas de sus operaciones se realizan de forma simultánea, no de forma secuencial. Más adelante hablaremos de los simuladores cuánticos y presentaremos brevemente algunos de los disponibles en el mercado actualmente.

Una diferencia del algoritmo clásico frente al algoritmo cuántico, es que el segundo es siempre reversible. Esto significa que si las mediciones no son parte del circuito, un recorrido inverso del circuito cuántico deshará las operaciones provocadas por un recorrido hacia adelante de ese mismo circuito. Ya sabemos, por lo que hemos visto en artículos anteriores, el efecto que causa el hecho de la medida en una magnitud cuántica. Es por eso que hemos eliminado deliberadamente la medida en la afirmación anterior.

Los problemas que son fundamentalmente irresolubles mediante algoritmos clásicos (los llamados problemas indecidibles) tampoco pueden resolverse mediante algoritmos cuánticos.

El valor agregado de los algoritmos cuánticos es que pueden resolver algunos problemas significativamente más rápido que los algoritmos clásicos. Los ejemplos más conocidos son el algoritmo de Shor y el algoritmo de Grover. El algoritmo de Shor es un algoritmo cuántico para la factorización de enteros. En pocas palabras, cuando se le da un número entero N, encontrará sus factores primos. Puede resolver este problema exponencialmente más rápido que el algoritmo clásico más conocido. El algoritmo de Grover puede buscar en una base de datos no estructurada o en una lista desordenada, cuadráticamente más rápido que el mejor algoritmo clásico con el mismo propósito.

No más secretos en el mundo

Como podrás imaginar, el disponer de un computador cuántico capaz de ejecutar el algoritmo de Shor para un número suficientemente grande de qubits, nos permitiría romper cualquier clave RSA, que es la seguridad en la que se basa toda la seguridad de la web en Internet y gran parte de los modelos de securización del mundo. No habría webs seguras, no habría certificados de usuario para identidad digital inviolables o trámites seguros entre estados y ciudadanos que no pudiesen inspeccionarse o alterarse. Este es uno de los motivos por los que la computación cuántica resulta tan interesante para los estados, agencias de seguridad e inteligencia y empresas de seguridad. ¡Para aquél capaz de disponer de esta tecnología no habría secretos en el mundo!

Somos conscientes de que este es un mensaje un poco sensacionalista (por no decir mucho), y no es completamente cierto, hay muchos matices que subrayar ante una afirmación de este calibre, pero es una forma de enfatizar la trascendencia del problema. De hecho, ante el advenimiento de esta posible crisis, ya hace años que muchos investigadores están trabajando en algoritmos cuánticos que sustituyan a los clásicos cuando estos se vuelvan ineficaces o vulnerables. Un ejemplo es el reemplazo de cifrado asimétrico (como el de RSA) por cifrado simétrico, más rápido y eficiente, resolviendo, gracias a tecnología cuántica, el problema de distribución de claves entre partes confiables de forma segura y eliminado la necesidad de terceros de confianza (las entidades certificadoras raíces)

No cabe duda de que hay un riesgo importante asociado a esta supremacía cuántica en la factorización de enteros, pero seguro que su impacto será menor del que se pronostica.

Para hacernos una idea de la situación actual de una implementación real del algoritmo de Shor, según los expertos de ETH Zurich, para factorizar un número entero de dos cifras, se requeriría un circuito cuántico de las siguientes características:

  • 11 qubits
  • Profundidad del circuito de 28.477
  • Número de puertas:
  • CNOT: 17.832
  • Rz: 13.624
  • T y T inversa: 11.312
  • H (Hadamard): 4.576
  • X: 129

Para poner en riesgo la seguridad de Internet el algoritmo debería ser capaz de factorizar un número de más de 617 cifras. Viendo los recursos necesarios para uno de 2 cifras, nos podemos hacer una idea de que aún hay mucho camino por recorrer.

Programando un computador cuántico

Cualquiera que haya aprendido a programar en casi cualquier lenguaje (al menos de alto nivel), se habrá encontrado con el famoso ejercicio de ejemplo de “¡Hola Mundo!”. ¿Tenemos un equivalente para un computador cuántico? Pues no exactamente, ya que el almacenamiento o impresión de cadenas de texto no es el punto fuerte de los computadores cuánticos (ni tiene ningún sentido por lo que hemos visto hasta el momento), pero desde el punto de vista de ejemplo de líneas de código sencillas para entender la sintaxis de un lenguaje de programación, si podemos tener algunos ejemplos. En cualquier caso, aquí no estamos hablando de un nuevo lenguaje de programación, sino más bien de complementos o funciones que podemos usar desde los lenguajes más comunes de programación (y Python está desde hace años a la cabeza de la lista de los más populares en el ámbito científico), para explotar las posibilidades de un computador cuántico.

Por todo lo comentado anteriormente, si hubiera que describir el equivalente cuántico al famoso “Hello World!”, podría ser el que mostramos anteriormente, realizado con el Composer de IBM QX.

Mi Hello World! cuántico (usando el Composer de IBM)

Como podemos ver, este circuito tan sólo aplica una puerta Hadamard al primer qubit, que sitúa el estado de éste en una superposición equiprobable de los estados propios, para luego usar su valor como controlador de la puerta CNOT (Controlled NOT), e invertir el resultado del segundo qubit.

El software para la computación cuántica

Con todo lo que hemos visto hasta ahora, podríamos hacernos una idea de que un computador cuántico no se programa del mismo modo de uno clásico. Sin embargo, 80 años de evolución del desarrollo de SW significan algo, y mucho de lo aprendido desde entonces se ha aplicado para la creación de herramientas y entornos de desarrollo, que nos permiten programar un computador cuántico, casi del mismo modo que haríamos con uno digital.

Un buen número de grandes empresas que, en su evolución histórica se han caracterizado por desarrollar componentes de software relevantes para la computación digital en diversos ámbitos, también se han lanzado a hacer lo propio para el mundo cuántico, unidas a centros académicos y de investigación, y nuevas startups que han surgido dentro de este interesante ecosistema.

El disponer de herramientas para la programación de computadores cuánticos es la vía para construir algoritmos más complejos y versátiles, abstrayéndose, en la medida de lo posible, del diseño de circuitos cuánticos.

Algunos de los entornos de desarrollo o kits de desarrollo creados para la programación de computadores cuánticos se describen brevemente a continuación.

  • D-Wave Ocean. La startup canadiense, D-wave fundada en 1999, fue la primera compañía en comercializar computadores cuánticos y también líder en el desarrollo de software para la programación de este tipo de sistemas. Su plataforma de desarrollo Ocean está orientada a la resolución de problemas de optimización combinatoria, sobre el tipo de computadores que ha desarrollado esta compañía: computadores cuánticos adiabáticos o basados en el recocido cuántico (profundizaremos en esto en el siguiente artículo). Forma parte de las herramientas disponibles en el servicio de computación cuántica en la Nube de Amazon AWS: Amazon Bracket.
  • IBM Qiskit. Es un kit de desarrollo de software creado por IBM para trabajar con computadoras cuánticas a nivel de puertas, circuitos y algoritmos. Proporciona herramientas para crear y manipular programas cuánticos y ejecutarlos en dispositivos cuánticos prototipo en IBM Quantum Experience o en simuladores en una computadora local. Sigue el modelo de circuito para la computación cuántica universal y sobre diferentes implementaciones físicas del qubit (actualmente qubits superconductores e iones atrapados). Se integra como librería del lenguaje Python y también puede generar código OpenQASM.
  • Microsoft Q# y QDK. Q# Es un lenguaje de programación de código abierto de Microsoft para desarrollar y ejecutar algoritmos cuánticos. Es parte del Quantum Development Kit (QDK), que ofrece un conjunto de herramientas que ayudan en el proceso de desarrollo de software cuántico. Puede ejecutarse de forma aislada o integrarse con otros lenguajes de programación populares como Python. El objetivo de Microsoft parece perseguir la misma penetración y uso que su entorno de desarrollo .NET y C#, pero en el entorno cuántico, de forma que parte de las herramientas e interfaces de usuario que muchos desarrolladores ya conocen, puedan emplearlas para el desarrollo de algoritmos cuánticos. Con todo lo que ello conlleva, entre otras cosas, la minimización de la curva de aprendizaje de un nuevo entorno de desarrollo.
  • 1QBit SDK. Este entorno de desarrollo construido por una de las empresas de software pioneras, la startup, también canadiense, 1Qbit, ha proporcionado herramientas para la programación de dispositivos cuánticos adiabáticos fundamentalmente. También a contribuido con FUJITSU para el desarrollo del software de programación de la tecnología de inspiración cuántica Digital Annealer que ha sido de las primeras en poder ofrecer soluciones comerciales a problemas de optimización combinatoria con hardware de arquitectura de inspiración cuántica, no basado en arquitecturas de Von Neumann.
  • Rigetti Forest. Rigetti Computing es una empresa de computación cuántica de espectro completo, es decir, que diseña y fabrica chips cuánticos (basados en superconductores), los integra con una arquitectura de control y desarrolla software para que los programadores lo utilicen para construir algoritmos para los chips. Forest es su solución de SW que se ofrece como una solución SaaS en la Nube. Dentro de Forest, Rigetti incluye pyQuil: una biblioteca de programación cuántica de código abierto basada en Python.
  • Zapata Orquestra. Orquestra es el acelerador en el centro de todo el ecosistema de computación cuántica. A través de robustas asociaciones con los principales fabricantes de hardware cuántico, la startup afincada en Boston Zapata Computing, ha construido un entorno operativo que permite que los equipos de ciencia, empresas y tecnología avanzada desarrollen soluciones cuánticas para problemas computacionales complejos en optimización, aprendizaje automático y simulación. Este orquestador permite, como valor diferencial a otras herramientas, gestionar los algoritmos construidos con la plataforma sobre diferentes infraestructuras físicas: procesadores/computadores cuánticos, simuladores o HPC clusters.
  • Xanadu Strawberry Fields. Una biblioteca de Python multiplataforma para simular y ejecutar programas en hardware fotónico cuántico.
  • Xanadu PennyLane. Es una biblioteca de Python multiplataforma para la programación diferenciable de computadoras cuánticas. Permite entrenar una computadora cuántica de la misma manera que una red neuronal.
  • Google Cirq. Es una biblioteca de software de Python para escribir, manipular y optimizar circuitos cuánticos, y luego ejecutarlos en computadoras cuánticas y simuladores cuánticos. Cirq proporciona abstracciones útiles para lidiar con las ruidosas computadoras cuánticas de escala intermedia de hoy, donde los detalles del hardware son vitales para lograr resultados de vanguardia.
  • Amazon Braket SDK. Es una biblioteca de código abierto para diseñar y construir circuitos cuánticos, enviarlos a los dispositivos que Amazon provee en su servicio de computación cuántica en la Nube “Amazon Braket”, como tareas cuánticas y controlar su ejecución.
  • NVIDIA cuQuantum. La simulación de circuitos cuánticos es una tarea computacionalmente costosa, por lo que disponer de HW específico que permita la parelización de procesos va a permitir reducir los tiempos de ejecución de los simuladores o ampliar su escala. Para ello NVIDIA ha diseñado cuQuantum: un conjunto de librerías y herramientas software que permiten acelerar los circuitos generados con las plataformas de Google e IBM (Cirq y Qiskit, respectivamente), en servidores dotados de aceleradores (GPU) de NVIDIA. En Noviembre de 2021, NVIDIA anunciaba haber marcado un récord mundial en la simulación cuántica con estas herramientas sobre su plataforma de computación de altas prestaciones DGX SuperPOD (link a la noticia)

Por último haremos una mención especial al SW de simulación cuántica. En algunas de las soluciones mencionadas anteriormente, el simulador es parte de la solución, pero en otras, no.

Un simulador cuántico es, en esencia, una aplicación que permite emular la lógica de un computador cuántico en una arquitectura hardware digital. El principal problema de un simulador es la cantidad de recursos que se requieren para realizar esta emulación. Otra dificultad añadida es su escalado, es decir, su crecimiento para emular más número de qubits. En términos generales, se podría considerar que aumentar la capacidad de un simulador en 1 qubit supondría duplicar los recursos hardware subyacentes necesarios.

A continuación resumimos algunos de los desarrollos para emulación cuántica más utilizados o más vanguardistas.

  • IBM Qiskit Aer,
  • Intel Qs,
  • QuEST,
  • JUQCS-G, es una solución propietaria de Google que desarrolló o empleó para su demostración de la supremacía cuántica.
  • Qulacs, es una solución OpenSource
  • FUJITSU mpiQulacs, es una reciente adaptación del Qulacs para operar en arquitecturas multinodo y aprovechar las ventajas de la potencia de cálculo vectorial, eficiencia energética y velocidad de acceso a memoria, de los procesadores ARM A64FX fabricados por Fujitsu.

Comunidad OpenSource

Como no podía ser de otro modo, también la comunidad open-source se ha unido a la iniciativa de creación de herramientas para la programación de computadores cuánticos. Algunas ya las hemos mencionado antes.

Como también podría ser de esperar, parte de estas herramientas de desarrollo abierto, han sido cedidas por diferentes fabricantes en aras a la difusión de la tecnología y la evolución de la misma gracias a la fuerza de la colaboración de comunidades abiertas.

De hecho, gran parte de los entornos de desarrollo, lenguajes de programación o extensión para programación de computadores cuánticos en base a lenguajes populares en la computación tradicional que hemos mencionado, están disponibles como herramientas de código abierto, reservándose sus creadores, el proporcionar servicios de valor añadido como consultoría, soporte técnico, librerías o componentes más evolucionados para su propuesta de herramientas de pago.

Sin embargo, también hay algunas soluciones que han surgido de instituciones académicas, o consorcios sin ánimo de lucro, y cuyos productos son fruto de la comunidad Open Source. Por mencionar sólo algunas:

  • Apache — OpenFermion. Es una biblioteca de software de código abierto escrita en gran parte en Python bajo una licencia Apache 2.0, destinada a permitir la simulación de modelos fermiónicos y problemas de química cuántica en hardware cuántico.
  • ETH Zurich — ProjectQ. Es un marco de software de código abierto para la computación cuántica que se inició en ETH Zurich (escuela politécnica federal de Zurich). Permite a los usuarios implementar sus programas cuánticos en Python utilizando una sintaxis potente e intuitiva. ProjectQ puede traducir estos programas a cualquier tipo de back-end, ya sea un simulador ejecutado en una computadora clásica o un chip cuántico real.

En cualquier caso, las herramientas diseñadas para programar un computador cuántico también son utilizables en un simulador cuántico, y parte del código necesario para implementar los algoritmos se ejecuta en un computador digital. Esto pone de manifiesto el sentido del computador cuántico como complemento al computador digital, así como la hibridación que el futuro, no muy lejano, nos pondrá de manifiesto.

Hay algunos servicios de computación para los que no tiene ningún sentido un computador cuántico, por ejemplo para construir un servicio web, para crear una API de comunicación entre servicios o microservicios, para construir una interfaz de usuario,… En estos casos, resulta apropiado y más eficiente, un computador digital. Por otro lado, como hemos adelantado hasta ahora en esta serie de artículos y como veremos en el artículo final, otros casos de uso requieren un computador cuántico para encontrar soluciones en un tiempo razonable, e incluso otros no tienen posible solución si no es con un computador cuántico.

Computación cuántica en la Nube

Como habíamos mencionado, no cualquiera dispone del presupuesto necesario, no sólo para adquirir un computador cuántico, sino para mantenerlo operativo y actualizado, De modo que, al margen de los muy significativos early-adopters que consiguió la empresa canadiense D-Wave (la primera en comercializar computadores cuánticos), la tendencia natural del mercado es consumir estas infraestructuras como servicio en la Nube. Esto lo han entendido rápidamente tanto IBM, como los principales proveedores de Nube pública (Google, Microsoft y Amazon AWS), que disponen de servicios de computación cuántica sobre simuladores y sobre computadores cuánticos físicos. De hecho, los dos primeros (Google y Microsoft), trabajan activamente en la investigación y desarrollo de sistemas cuánticos, con tecnologías propias.

No podemos dejar de mencionar el gran trabajo realizado por IBM en aras de la difusión de la tecnología cuántica, con el desarrollo que ha creado en torno a su servicio de computación cuántica en la Nube: IBM Q Experience. Al margen de dotar de unas herramientas visuales que hacen muy “sencilla” la creación de circuitos cuánticos, ha puesto la computación cuántica al alcance de todo el mundo, dando acceso libre y gratuito a algunos de sus computadores cuánticos, desde el 2017 hasta la fecha.

Según se puede ver en su interfaz de Q Experience, IBM pone a disposición de sus clientes varios computadores cuánticos de hasta 65 qubits y para el público en general (libre de cargos), 6 computadores cuánticos de 5 qubits, así como un conjunto de simuladores cuánticos de entre 32 y 5.000 qubits. Gracias al libre acceso, la sencillez de uso y la claridad de la interfaz de usuario creada por IBM, cualquiera puede iniciarse en el apasionante mundo de la computación cuántica.

Pero no son los únicos, hay otros jugadores en esta arena y, seguramente, cada día habrá más. Por poner sólo un ejemplo:

Qutech también dispone de una plataforma de acceso a la computación cuántica, con simuladores basados en QX Simulator con soporte para hasta 34 qubits y acceso a QPUs propias con prometedoras tecnologías (como hemos visto en el artículo anterior), como lo es la de Puntos Cuánticos de silicio (hoja de especificaciones aquí)

Como hemos visto hasta ahora, muchos son los recursos disponibles para el desarrollo de software cuántico, pese a ser esta una tecnología emergente y la evolución de esta tecnología es imparable y nos sorprenderá día a día con nuevos avances.

Aquí ponemos punto y aparte en el tema de la programación cuántica. Hay mucho más que decir pero para los objetivos de esta serie introductoria a la computación cuántica, creo que es suficiente para entender mínimamente la vanguardia en relación a este tema y que cada cual profundice en la materia según su interés.

En el siguiente artículo de esta serie, “|QC-5> Puchero de átomos”, introduciremos los conceptos necesarios para entender otro tipo de computadores cuánticos, los basados en el recocido cuántico (quantum annealing). Hablaremos del problema de la optimización, de las heurísticas y metaheurísticas, el recocido simulado, el recocido cuántico y las máquinas de Ising.

Artículos de esta serie:

--

--