Introducción a la programación en Computación Cuántica

Rhinno

,

Computación Cuántica

Introducción a la programación en Computación Cuántica

Beatriz Varona | oct 08, 2020

“Hello World” con Qiskit

La computación cuántica recordamos que utiliza las leyes de la mecánica cuántica, por lo que los qubits pueden estar en superposición y tomar valores de 0 y 1, o incluso todos los valores intermedios. A diferencia de los bits clásicos, que pueden tomar los valores 0 o 1, pero solamente uno cada vez. Se puede ver una mejor explicación de lo que es la computación cuántica en los artículos de esta misma serie “Introducción a la Computación Cuántica - Parte I” e “Introducción a la Computación Cuántica - Parte II”.

Una de las primeras posibles aplicaciones de la computación cuántica, podría ser el simulador de moléculas publicado en 2017 en la revista Nature, donde se utiliza la computación cuántica para modelar moléculas, que es algo muy complicado para los ordenadores clásicos, incluso para los supercomputadores.

El lenguaje que más se utiliza en computación cuántica es Python. Para trabajar la programación de computación cuántica, IBM creó Qiskit (qiskit.org), que es un software de código abierto y permite desarrollar de forma pública y colaborativa. Su principal finalidad es crear y manipular programas cuánticos y ejecutarlos en prototipos como IBM Quantum Experience (quantum-computing.ibm.com) u otros simuladores. Qiskit también se puede instalar en Python mediante el comando ‘pip install qiskit’ y utilizarlo de forma normal en un Jupyter Notebook.

Qiskit se forma por cuatro paquetes, que tocan distintos aspectos del mundo cuántico:

  • Terra: son las raíces sobre las que descansa Qiskit. Este proporciona una base que permite crear circuitos y programas cuánticos.
  • Aqua: está formado por una biblioteca de algoritmos cuánticos, sobre los que se pueden programar aplicaciones para la computación cuántica.
  • Aer: ofrece simuladores de alto rendimiento para circuitos cuánticos, mediante los que se pueden llevar a cabo simulaciones realistas con los mismos errores debido al ruido que podría ocurrir durante una ejecución en dispositivos reales.
  • Ignis: este paquete tiene la función de combatir y caracterizar el ruido y los errores en los dispositivos cuánticos.

Qiskit comenzó como un prototipo, con su primera versión en marzo de 2017 en el mundo académico. La versión más reciente que funciona de forma estable, es del pasado diciembre de 2019. Mediante el comando ‘qiskit.__qiskit_version__’ se puede comprobar la versión que hemos instalado en nuestro dispositivo.

Con Qiskit se pueden crear circuitos, que son el equivalente clásico de un programa cuántico. Un circuito es una especie de programa en el que se definen registros, como si fueran los registros de un microprocesador, y se van añadiendo instrucciones, que en el mundo cuántico o Qiskit son puertas con las que se van transformando los diferentes qubits o haciendo las diferentes operaciones según interesen.

“Hello World” en un simulador

Qiskit está hecho para programar en Python. A continuación, vamos a crear, en un simulador en nuestro ordenador, el circuito cuántico equivalente al programa clásico “Hello World”. Para crear este programa, una vez abierto el Jupyter Notebook, escribimos:

Captura de pantalla 2020-10-08 a las 17.42.08Se importa todo desde Qiskit, y el siguiente paso es construir un circuito cuántico. Podemos elegir el número de qubits de nuestro circuito, de modo que, en este ejemplo, vamos a construir un circuito de dos qubits:

Captura de pantalla 2020-10-08 a las 17.43.13

Después se crearán dos registros clásicos para medir el valor de los bits cuánticos:

Captura de pantalla 2020-10-08 a las 17.44.45El siguiente paso es construir un circuito que utilice los dos, y de esta forma, creamos un circuito cuántico:

Captura de pantalla 2020-10-08 a las 17.45.38Podemos visualizar el circuito con:

Captura de pantalla 2020-10-08 a las 17.46.58Vemos entonces, que este circuito es muy sencillo, ya que tenemos dos bits cuánticos (q0_0, q0_1), y dos bits clásicos (c0_0, c0_1). Para complicarlo un poco, a continuación, se va a crear una puerta cuántica o puerta lógica llamada Hadamard aplicada en el primer qubit:

Captura de pantalla 2020-10-08 a las 17.48.36Podemos crear un circuito con una puerta lógica Hadamard y controlar mediante un qubit, el segundo, de la siguiente forma. Así creamos enredos entre los qubits:

Captura de pantalla 2020-10-08 a las 17.50.18Para medir los qubits vamos a utilizar el siguiente comando:

Captura de pantalla 2020-10-08 a las 17.51.00Para hacer una simulación de este circuito en nuestro ordenador clásico, vamos a usar el componente de Qiskit “Aer”. Importamos desde “qiskit aer” el simulador QASM SIMULATOR.

Captura de pantalla 2020-10-08 a las 17.56.14Una vez importado, ejecutamos el circuito:

Captura de pantalla 2020-10-08 a las 18.29.50Y para ver los resultados, importamos ‘plot_histogram’:

Captura de pantalla 2020-10-08 a las 18.30.36Se obtiene así el resultado del circuito cuántico en un simulador. Se consigue aproximadamente el 50% de probabilidad de obtener 00, y casi 50%, de obtener 11.

“Hello World” en un dispositivo real cuántico

El siguiente paso sería, ejecutar el circuito “Hello World” en un dispositivo real cuántico. Para ello, se va a acceder a enviar nuestro circuito a un dispositivo real cuántico. Necesitamos una cuenta en IBM Q Experience (quantum-computing.ibm.com) y una vez creada, para configurar nuestra cuenta, en la pestaña “My Account”, podemos encontrar nuestro “token”. Debemos copiar el “token” y reemplazarlo en el código ‘MY_API_TOKEN':

Captura de pantalla 2020-10-08 a las 19.07.23A continuación, debemos acceder a nuestra cuenta mediante:

Captura de pantalla 2020-10-08 a las 19.08.14

Para usos posteriores de la cuenta de IBM Q Experience, no necesitaremos configurar de nuevo la cuenta, ya que el “token” se va a quedar guardado y simplemente utilizaremos ‘IBMQ.load_account()’ para acceder a nuestra cuenta.

Para acceder a un dispositivo cuántico de IBM, escribimos lo siguiente:

Captura de pantalla 2020-10-08 a las 19.09.21

Podemos ver los dispositivos a los que tenemos acceso en nuestra cuenta de IBM Quantum Experience, así como sus características, si se encuentran disponibles, o los trabajos que tienen pendientes de realizar. Como los dispositivos reales cuánticos son públicos, a veces tienen trabajos pendientes en cola.

El dispositivo cuántico ‘ibmq_16_melbourne’ tiene 15 qubits. Pero podemos tener acceso a otros muchos como por ejemplo ‘ibmq_vigo’ o ‘ibmq_burlington’, ambos de 5 qubits cada uno.

Captura de pantalla 2020-10-08 a las 19.12.23

Una vez elegido el dispositivo, ejecutamos el circuito en este:

Captura de pantalla 2020-10-08 a las 19.13.32Vamos a importar ‘job_monitor’ de Qiskit, y a ejecutarlo. Esta acción puede tardar unos minutos, si los dispositivos cuánticos tienen algún trabajo pendiente en cola. Cuando aparezca “job has successfully run” significa que nuestro trabajo se ha finalizado.

Captura de pantalla 2020-10-08 a las 19.14.41

Por último, podemos ver los resultados:

Captura de pantalla 2020-10-08 a las 19.15.31Comparando los resultados obtenidos mediante un simulador y mediante un dispositivo real cuántico, vemos que la diferencia principal es que en un simulador solamente se tienen dos posibilidades, 00 y 11.
Sin embargo, en un dispositivo cuántico real, la mayoría de los resultados se obtienen en 00 y 11, pero también se consiguen resultados en 01 y 10. Esto ocurre debido a que el simulador representa un dispositivo cuántico perfecto, pero el dispositivo real cuántico reproduce también los errores.

 

Bibliografía y Sitios Web:

¡Suscríbete!