<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=974250883405448&amp;ev=PageView&amp;noscript=1">
Introducción a la Programación en Computación Cuántica - Parte II

Rhinno

,

Computación Cuántica

Introducción a la Programación en Computación Cuántica - Parte II

Beatriz Varona | dic 02, 2020

“Hello World” con Cirq

En el pasado artículo “Introducción a la Programación en Computación Cuántica - Parte I”, se introdujo al lenguaje de código abierto para programar en computadoras cuánticas: Qiskit, de IBM. En esta segunda parte de Introducción a la Programación en Computación Cuántica, vamos a presentar Cirq, de Google (cirq.readthedocs.io).

Cirq, ha sido creado por Google AI Quantum, y al igual que Qiskit, está disponible como código de tipo open-source, por lo que todo el mundo puede utilizarlo e incluso modificarlo de forma colaborativa. El 18 de julio de 2018, en el International Workshop sobre Software Quantum y Quantum Machine Learning, se anunció la primera versión de Cirq mediante una demostración.

La biblioteca de software Cirq, se puede utilizar para crear circuitos cuánticos y ejecutarlos en computadores o simuladores cuánticos. Recordamos que estos circuitos cuánticos son el equivalente a un programa clásico. En un circuito se pueden definir registros similares a los de un microprocesador e ir añadiendo instrucciones o puertas cuánticas que van modificando los qubits y realizando las operaciones que se requieran. Se puede ver una descripción de qué son los qubits y cómo funcionan en los artículos de computación cuántica: “Introducción a la Computación Cuántica - Parte I”, “Introducción a la Computación Cuántica - Parte II”, “Tecnologías de las Computadoras Cuánticas - Parte I” o “Tecnologías de las Computadoras Cuánticas - Parte II”.

El código abierto Cirq, ha sido diseñado para programar en Python y se encuentra disponible en Github (github.com/quantumlib/Cirq). Lo podemos instalar mediante el comando ‘pip install cirq’ y utilizarlo en nuestro Jupyter notebook. Cirq, funciona en los sistemas operativos Linux, Mac OS X, Windows y también en la plataforma Docker.

Hello Quantum World con Cirq en un simulador

A continuación, al igual que hicimos en la primera parte, “Introducción a la Programación Cuántica - Parte I”, vamos a programar en un simulador dentro de nuestro ordenador el circuito cuántico que equivale al programa clásico “Hello World”, o en este caso, “Hello Quantum World”, pero utilizando el lenguaje Cirq de Google.

Lo primero que debemos hacer en el Jupyter Notebook será importar Cirq:

Captura de pantalla 2020-12-01 a las 23.37.36

Podemos comprobar que se ha instalado e importado correctamente. Para verificarlo, se puede visualizar un circuito cuántico mediante el siguiente comando:

Captura de pantalla 2020-12-01 a las 23.38.16

El ‘cirq.google.Foxtail’, es un dispositivo que viene con Cirq y representa una cuadrícula de 2x11 que imita un hardware anterior lanzado por Google.

Para crear un circuito cuántico, antes de nada, debemos definir un conjunto de bits cuánticos o qubits sobre los que actuar. Cirq tiene tres formas principales para definir qubits:

  • ‘cirq.NamedQubit‘: este comando sirve para definir qubits por un nombre abstracto. Por ejemplo: ‘q0=cirq.NamedQubit(‘source‘)‘, ‘q1=cirq.NamedQubit(‘target’)‘
  • ‘cirq.LineQubit‘: este sirve para definir qubits por un número en una matriz lineal. Por ejemplo: ‘q2=cirq.LineQubit(2)‘
  • ‘cirq.GridQubit‘: este sirve para seleccionar qubits de una cuadrícula rectangular. Por ejemplo: ‘qubits=cirq.GridQubit(1, 0)‘
En el anterior artículo de esta misma serie también vimos cómo a través de Qiskit, se pueden añadir puertas lógicas cuánticas (también llamadas Hadamart) a un circuito. Estas son el equivalente a las puertas lógicas clásicas, con la diferencia de que las puertas cuánticas son reversibles. El lenguaje de programación Cirq también permite el uso de estas puertas cuánticas.

A continuación vamos a crear un circuito cuántico “Hello Quantum World”. Este será sencillo y lo vamos a reproducir utilizando la cuadrícula rectangular ‘cirq.GridQubit‘, de modo que tenemos ‘cirq.GridQubit(‘fila‘, ‘columna‘)‘, en donde fila y columna son los qubits a seleccionar.

‘GridQubit', usa el siguiente orden: GridQubit(0, 0) < GridQubit(0, 1) < GridQubit(1, 0) < GridQubit(1, 1)

En primer lugar, vamos a seleccionar un qubit en el estado ǀ0>:

Captura de pantalla 2020-12-01 a las 23.39.45

Con la cuadrícula, podemos crear el programa “Hello Quantum World” aplicando una raíz cuadrada de X con su respectiva medida:

Captura de pantalla 2020-12-01 a las 23.40.34

Mediante el comando ‘print’, así quedaría el circuito para el qubit en el estado ǀ0> dibujado:

Captura de pantalla 2020-12-01 a las 23.41.22

Generamos entonces la simulación de este circuito. Los resultados van a ser el valor de salida de la medición ‘m’:

Captura de pantalla 2020-12-01 a las 23.42.08Vamos a ejecutar el circuito en el simulador con 20 repeticiones:

Captura de pantalla 2020-12-01 a las 23.42.40Mostramos el resultado de la medición ‘m’:

Captura de pantalla 2020-12-01 a las 23.43.09

Para ver los resultados, vamos a realizar un histograma mediante ‘plot_state_histogram()’:

Captura de pantalla 2020-12-01 a las 23.43.43

Por último, la probabilidad por estado se calcula dividiendo el número de veces que un elemento aparece en la lista entre el número de repeticiones ‘(counts/repetitions)’:

Captura de pantalla 2020-12-01 a las 23.44.13

En este caso, se obtiene una probabilidad del 45% de obtener el estado 0 y una probabilidad del 55% de obtener el estado 1. Si se realizan varias pruebas de este mismo circuito cuántico, se puede ver que la probabilidad de obtener uno u otro estado pueden ir variando, aunque generalmente se consigue aproximadamente el 50% de probabilidad de obtener 0 o 1.

A continuación, podemos ver como ejemplo el resultado de otra ejecución de este mismo circuito:

Captura de pantalla 2020-12-01 a las 23.45.00

Aquí se ha obtenido el caso contrario. Una probabilidad del 55% de obtener el estado 0 y una probabilidad del 45% de obtener el estado 1. Se puede probar a variar el número de iteraciones, pero el resultado que se obtiene sigue siendo similar.

Se obtiene así el resultado del circuito cuántico sencillo “Hello Quantum World” en lenguaje Cirq en un simulador. En general, Cirq es una buena herramienta para escribir, manipular, optimizar, compilar y simular circuitos cuánticos.

En comparación con el lenguaje Qiskit de IBM, este cuenta con una capacidad más completa de simular el ruido en los circuitos cuánticos, aunque Google está mejorando esta característica en las últimas versiones de Cirq

Google, al igual que IBM, cuenta también con su propio servicio de computación cuántica para ejecutar circuitos. Una API compatible con el lenguaje de programación Cirq llamada Quantum Engine API. Pero esta API aún no está abierta al acceso público en general, por lo que el uso de Qiskit tiene ventajas, ya que cuenta con IBM Q Experience (quantum-computing.ibm.com), un servicio para acceder a un dispositivo real cuántico, mucho más accesible.

 

Bibliografía y sitios web:

Cirq: cirq.readthedocs.io

Instalación de Cirq: cirq.readthedocs.io/en/stable/docs/install.html 

Quantum Engine API: cirq.readthedocs.io/en/latest/docs/google/engine.html 

Tutoriales de Cirq:

¡Suscríbete!