Hola Habr! Le presento la traducción del artículo "Descripción general y comparación de las plataformas de software cuántico de nivel de puerta" de Ryan LaRose.
Las computadoras cuánticas están disponibles para su uso en la infraestructura de la nube, pero al mismo tiempo, el reciente auge de las plataformas de software cuántico puede ser abrumador para quienes deciden qué usar. Este artículo ofrece una imagen actual del panorama en rápida evolución de la computación cuántica comparando cuatro plataformas de software: Forest (pyQuil), QISKit, ProjectQ y Quantum Development Kit, que permiten a los investigadores utilizar dispositivos cuánticos reales y simulados. Este análisis cubre los requisitos y la instalación, la sintaxis del lenguaje en el ejemplo de los programas, el soporte a nivel de biblioteca y las posibilidades de un simulador cuántico para cada plataforma. Para las plataformas que admiten computadoras cuánticas, comparamos hardware, lenguajes de ensamblador cuántico y compiladores cuánticos. En conclusión, consideraremos las características de cada uno de ellos y mencionaremos brevemente otros paquetes de software para la computación cuántica.
Contenido
I. Introducción
II Plataformas de software
A. pyQuil
B. QISKit
C. ProjectQ
D. Kit de desarrollo de quatum
III. Comparación
A. Soporte de la biblioteca
B. Hardware cuántico
C. Compiladores cuánticos
D. Rendimiento del simulador
E. Características
IV. Discusión y conclusiones.
Referencias
Apéndice A. Otras plataformas de software
Apéndice B. Prueba del rendimiento del simulador
Apéndice C. Ejemplo de programa: esquema de teletransportación
I. Introducción
Los lenguajes de programación cuántica se consideraron hace al menos dos décadas [1-3], pero en su mayoría eran teóricos y sin el equipo existente. Las computadoras cuánticas son ahora una realidad, y existen lenguajes de programación cuántica que permitirán que cualquier persona con acceso a Internet las use. Un buen número de investigadores, tanto en la industria como en la academia, han creado pequeños dispositivos cuánticos que funcionan en un modelo de circuito de computación cuántica. Estas computadoras son pequeñas, ruidosas y no tan poderosas como las computadoras clásicas modernas. Pero están surgiendo, creciendo constantemente y presagiando el futuro poder informático inimaginablemente grande para las tareas de química [4, 5], aprendizaje automático [6, 7], optimización [8], el sector financiero [9] y más [10]. Estos dispositivos son un banco de pruebas para capacitar a la próxima generación de ingenieros de software cuántico para resolver las tareas clásicamente complejas actuales de la tecnología informática. De hecho, la computación cuántica en la nube ya se ha utilizado para calcular la energía de enlace de deuterón [11] y probar rutinas en algoritmos de aprendizaje automático [12, 13].
Recientemente, ha habido un rápido crecimiento en el software de computación cuántica en una amplia gama de lenguajes informáticos clásicos. Una lista de proyectos de código abierto con más de cincuenta está disponible en [14], y una lista de simulaciones de computadora cuántica está disponible en [15]. Esta gran cantidad de programas que reflejan positivamente el crecimiento en el campo hace que sea difícil para los estudiantes e investigadores decidir qué paquete de software usar, para no perderse en la documentación o verse sorprendido por el conocimiento inicial necesario.
Se espera que este artículo proporcione una breve descripción general y una comparación de las principales plataformas de software para la computación cuántica de propósito general a nivel de puerta. Cuatro fueron seleccionados de una larga lista: tres, que le dan al usuario la capacidad de conectarse a dispositivos cuánticos reales: pyQuil de Rigetti [16], QISKit de IBM [17] y ProjectQ de ETH Zurich [18, 19], y uno con funcionalidad similar, pero sin la capacidad actual de conectarse a una computadora cuántica: Quantum Development Kit de Microsoft [20]. A favor de elegir estas plataformas se ha convertido en la capacidad de conectarse a un dispositivo cuántico real. Debido a esto, y en aras de la brevedad, se omiten deliberadamente una serie de programas respetables. Algunos de ellos se mencionan en el Apéndice A.
Por el momento, el objetivo principal es presentar una imagen panorámica de la computación cuántica causada por estas cuatro plataformas. En la sección II, veremos cada plataforma a su vez, discutiendo los requisitos y la instalación, la documentación y los tutoriales, la sintaxis del lenguaje y el equipo cuántico. La Sección III proporciona una comparación detallada de las plataformas. Incluye: soporte a nivel de biblioteca de algoritmos cuánticos en III A , soporte de hardware cuántico en III B , compiladores de circuitos cuánticos en III C y simuladores de computadora cuánticos III D. La Sección IV discute algunos comentarios subjetivos sobre cada plataforma. El Apéndice A contiene información sobre otros softwares cuánticos, el Apéndice B contiene información detallada sobre la prueba de simuladores de circuitos cuánticos, y el Apéndice C muestra el código para los esquemas de teletransportación cuántica en cada uno de los cuatro idiomas para la comparación lado a lado.
La Figura 1 muestra varias computadoras y software cuánticos utilizados para conectarse a dispositivos. Actualmente, cuatro plataformas de software le permiten conectarse a cuatro computadoras cuánticas diferentes: una de Rigetti, una computadora cuántica de 8 qubits, puede conectarse usando pyQuil [41]; y tres de IBM, con los 16 qubits más altos disponibles, que se pueden conectar usando QISKit o ProjectQ. Además, IBM ofrece una cuarta computadora cuántica de 20 qubits, pero este dispositivo solo está disponible para miembros de IBM Q Network [42]: un grupo de empresas, universidades y laboratorios nacionales interesados en invertir en computación cuántica. La Figura 1 también muestra las computadoras cuánticas de compañías como Google, IBM e Intel que se han anunciado pero que actualmente no están disponibles para los usuarios habituales.

Figura 1. Un diagrama esquemático que muestra cómo conectar una computadora personal a la computadora cuántica usada en el nivel de la puerta. Comenzando desde una computadora personal (centro inferior), los nodos verdes muestran el software que se puede instalar en la computadora personal del usuario. Los nodos grises indican que los simuladores se ejecutan localmente (es decir, en la computadora de un usuario). Las líneas discontinuas muestran las conexiones API / nube a los recursos de la empresa que se muestran en "nubes" amarillas. Los simuladores cuánticos y las computadoras cuánticas usadas proporcionadas por estos recursos en la nube se muestran en azul y oro, respectivamente. Los marcos rojos muestran los requisitos para el método seleccionado. Por ejemplo, para conectarse a Rigetti Forest y usar la computadora cuántica Agave de 8 qubits, debe descargar e instalar pyQuil (disponible en MacOS, Windows y Linux), registrarse en el sitio web de Rigetti para obtener una clave API y luego solicitar acceso al dispositivo a través de Internet. forma Notas: (i) la máquina virtual cuántica Rigetti requiere la elevación de derechos para más de 30 qubits, (ii) los simuladores locales dependen de la computadora del usuario, por lo tanto, los números dados son aproximados y (iii) las computadoras cuánticas que se anunciaron pero que Actualmente no disponible para usuarios habituales.La tecnología de los equipos cuánticos está cambiando rápidamente. Es muy probable que aparezcan nuevas computadoras para fin de año, y en dos o tres años esta lista puede estar completamente desactualizada. Sin embargo, lo que queda es el software utilizado para conectarse a esta tecnología. Sería muy simple usar nuevas computadoras cuánticas, cambiando solo unas pocas líneas de código, sin cambiar realmente la sintaxis utilizada para generar o ejecutar el circuito cuántico. Por ejemplo, en QISKit, solo necesita cambiar el nombre del dispositivo de fondo cuando ejecute el esquema:
execute(quantum_circuit, backend="name", ...)
Listado 1. La cadena "nombre" indica un dispositivo de fondo para ejecutar programas cuánticos usando QISKit. Cuando se lancen futuras computadoras cuánticas, la ejecución de un nuevo hardware será tan simple como cambiar el nombre.
Aunque el software también cambia con el lanzamiento de la nueva versión [43], estos son, en su mayor parte, cambios sintácticos relativamente menores que no cambian significativamente la funcionalidad del software.
En esta sección, analizaremos cada una de las cuatro plataformas, discutiendo los requisitos y la instalación, la documentación y los manuales, la sintaxis del lenguaje, el lenguaje cuántico, el equipo cuántico y las capacidades del simulador. Esta revisión no pretende enseñar completamente el idioma, pero le da al lector una comprensión de cada plataforma antes de sumergirse en una (o más) de las plataformas seleccionadas. El análisis actual incluye información suficiente para ejecutar algoritmos en computadoras cuánticas. Sin embargo, el lector, cuando ha elegido una plataforma específica, se envía a documentación especial para obtener información completa. Se agregaron enlaces a fuentes de documentación y tutoriales para cada paquete de software. También se supone que hay un conocimiento básico de la computación cuántica, para lo cual ahora hay muchas buenas referencias [21, 22].
Todos los fragmentos de código y programas incluidos en este documento fueron probados y ejecutados en una computadora portátil Dell XPS 13 Developer Edition con Linux Ubuntu 16.04 LTS, cuyas especificaciones completas se enumeran en [23]. Aunque todos los paquetes de software funcionan en los tres principales sistemas operativos, es mucho más fácil para el autor instalar y usar el software en la plataforma en la que se desarrolló. En Linux Ubuntu, no hubo dificultades ni mensajes de error inusuales al instalar estos paquetes de software.
| pyQuil | QISKit | Projectq | QDK |
---|
Institución | Rigetti | Ibm | Et zurich | Microsoft |
Primer lanzamiento | v0.0.2 el 15 de enero de 2017 | 0.1 el 7 de marzo de 2017 | v0.1.0 el 3 de enero de 2017 | 0.1.1712.901 el 4 de enero de 2018 (prelanzamiento) |
Versión actual | v1.9.0 el 6 de junio de 2018 | 0.5.4 el 11 de junio de 2018 | v0.3.6 el 6 de febrero de 2018 | 0.2.1802.2202 el 26 de febrero de 2018 (prelanzamiento) |
Código abierto | ✅ | ✅ | ✅ | ✅ |
Licencia | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT |
Homepage | Inicio | Inicio | Inicio | Inicio |
Github | Git | Git | Git | Git |
Documentación | Documentos , Tutoriales ( Grove ) | Documentos , cuadernos de tutoriales , hardware | Documentos , programas de ejemplo , papel | Docs |
OS | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux |
Requisitos | Python 3, Anaconda (recomendado) | Python 3.5+, Cuadernos Jupyter (para tutoriales), Anaconda 3 (recomendado) | Python 2 o 3 | Código de Visual Studio (muy recomendable) |
Lenguaje clasico | Pitón | Pitón | Pitón | Q # |
Lenguaje cuántico | Quil | Openqasm | ninguno / híbrido | Q # |
Hardware cuántico | 8 qubits | IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits), QS1_1 (20 qubits) | sin hardware dedicado, puede conectarse a backends de IBM | ninguno |
Simulador | ∼20 qubits localmente, 26 qubits con la mayoría de las claves API para QVM, 30+ con acceso privado | ∼25 qubits localmente, 30 a través de la nube | Qu28 qubits localmente | 30 qubits localmente, 40 a través de la nube de Azure |
Caracteristicas | Genere código Quil, algoritmos de ejemplo en Grove, compilador específico de topología, capacidades de ruido en simulador, canal Slack comunitario | Genere código QASM, compilador específico de topología, canal Slack de la comunidad, cajón de circuitos, biblioteca ACQUA | Dibuje circuitos, conéctese a backends de IBM, múltiples complementos de biblioteca | Algoritmos integrados, algoritmos de ejemplo |
pyQuilA. pyQuil
pyQuil es una biblioteca Python de código abierto desarrollada por Rigetti para crear, analizar y ejecutar programas cuánticos. Está construido sobre la base del lenguaje Quil, un lenguaje abierto de instrucciones cuánticas (o simplemente un lenguaje cuántico ), especialmente diseñado para las computadoras cuánticas prometedoras más cercanas y basado en un modelo común de memoria clásica / cuántica [24] (esto significa que tanto qubits como bits clásicos). pyQuil es una de las bibliotecas principales desarrolladas en Forest, que es la plataforma clave para todo el software Rigetti. Forest también incluye Grove y Reference QVM, que se describirá más adelante.
a. Requisitos e instalación
La instalación y el uso de pyQuil requiere versiones de Python 2 o 3, aunque Python 3 es muy recomendable, ya que las funciones de desarrollo futuras solo admitirán Python 3. Además, la distribución Anaconda de Python se recomienda para varias dependencias del módulo Python, aunque esto no es necesario.
La forma más fácil de instalar pyQuil es usar el comando del administrador de paquetes Python. En el símbolo del sistema Linux Ubuntu, ingrese
pip install pyquil
para una instalación exitosa del software. Alternativamente, si Anaconda está instalado, pyQuil puede instalarse escribiendo
conda install −c rigetti pyquil
en la línea de comando. Otra alternativa es descargar el código fuente del repositorio de git e instalar el software. Para hacer esto, ingrese los siguientes comandos:
git clone https://github.com/rigetticomputing/pyquil cd pyquil pip install −e
Este último método se recomienda para todos los usuarios que pueden contribuir a pyQuil. Consulte la guía de depósitos de GitHub para obtener más información.
b. Documentación y Tutoriales
pyQuil tiene una excelente documentación publicada en Internet, con una introducción a la computación cuántica, instrucciones de instalación, programas básicos y operaciones de puertas, un simulador conocido como máquina virtual cuántica (QVM), una computadora cuántica real y un lenguaje Quil con un compilador. Al descargar el código fuente pyQuil de GitHub, también obtendrá una carpeta con ejemplos en cuadernos Jupyter, ejemplos regulares de Python y un programa $ en línea $ \ textf {run_quil.py} $ en línea $ , que puede ejecutar documentos de texto escritos en Quil utilizando una máquina virtual cuántica. Finalmente, mencione Grove , un conjunto de algoritmos cuánticos creados con pyQuil y el entorno del bosque Rigetti.
c. Sintaxis
La sintaxis de pyQuil es muy simple y práctica. El elemento principal para grabar circuitos cuánticos es el programa y se puede importar desde textfpyquil.quil . Las operaciones de puerta se pueden encontrar en textfpyquil.gates . Modulo textfapi le permite ejecutar circuitos cuánticos en una máquina virtual. Una de las buenas características de pyQuil es que los registros qubit y los registros clásicos no tienen que definirse a priori y pueden asignarse dinámicamente en la memoria. Las cúbitas en el registro de qubits se denominan por índices (0, 1, 2, ...) y de manera similar para bits en el registro clásico. Por lo tanto, el circuito generador aleatorio se puede escribir de la siguiente manera:
Listado 2. Código PyQuil para un generador de números aleatorios.
Las primeras tres líneas importan el mínimo necesario para declarar un esquema / programa cuántico (línea 2), realizar operaciones de compuerta en qubits (línea 3) [44] y ejecutar el esquema (línea 4). En la línea 6, se crea un programa cuántico, y en las líneas 7-8, se le transmite una lista de instrucciones: primero, actúe en la puerta Hadamard H arriba del qubit en el índice 0, luego medimos el mismo qubit en un bit clásico debajo del índice 0. La línea 10 establece una conexión con QVM, y en 11 se inicia y muestra el resultado de nuestro circuito. Este programa imprime la salida estándar de pyQuil como una lista de listas de enteros: en nuestro caso, textf[[[0]] o textf[[[1]] . En general, el número de elementos en una lista externa es el número de pruebas realizadas. Los números enteros en las listas internas son las dimensiones finales en el registro clásico. Como solo realizamos una prueba (esto se indica como un argumento en textfapi.QVMConnection.run , que se establece en la unidad de forma predeterminada), solo obtenemos una lista interna. Como en el registro clásico solo teníamos un bit, obtenemos solo un entero.
d. Lenguaje cuántico
Quil es un lenguaje de instrucciones cuánticas, o simplemente un lenguaje cuántico que transmite comandos a una computadora cuántica. Esto es similar al ensamblador en computadoras clásicas. El núcleo de la sintaxis de Quil es textfíndiceGATE donde textfGATE es una puerta cuántica que se aplica a qubits indexados textfindex (0, 1, 2, ...). pyQuil tiene una función para generar código Quil a partir de un programa dado. Por ejemplo, en el generador de números aleatorios cuánticos mencionado anteriormente, podríamos agregar la línea:
print(qprog)
al final para obtener el código del diagrama de Quil, que se muestra a continuación:
H 0 MEASURE 0 [0]
Listado 3. Código quil para un generador de números aleatorios.
Quizás si alguien comienza a entender Quil, escriba circuitos cuánticos en un editor de texto en Quil, y luego ejecute el circuito en QVM usando el programa $ en línea $ \ textf {run_quil.py} $ en línea $ . También puedes modificar $ en línea $ \ textf {run_quil.py} $ en línea $ para ejecutar el circuito en QPU. Tenga en cuenta que el compilador pyQuil (también llamado compilador Quil en la documentación) convierte el circuito dado en un código Quil que una computadora cuántica real puede entender. Discutiremos esto con más detalle en la sección III C.
f. Hardware cuántico
Rigetti tiene un procesador cuántico que pueden usar aquellos que solicitan acceso. Para solicitar acceso, debe visitar el sitio web de Rigetti y proporcionar el nombre completo, la dirección de correo electrónico, el nombre de la organización y una descripción de la razón para acceder a la QPU. Una vez hecho esto, un representante de la empresa se comunicará con usted por correo electrónico para programar una hora para dar acceso al usuario a la QPU. La ventaja de este proceso de programación, en contraste con el sistema de colas QISKit, que se discutirá más adelante, es que muchas tareas se pueden realizar en un intervalo de tiempo distribuido con tiempos de ejecución deterministas, que es clave para algoritmos híbridos y variacionales. Estos tipos de algoritmos envían datos de un lado a otro entre computadoras clásicas y cuánticas; la necesidad de esperar en línea hace que este proceso sea mucho más largo. La desventaja (posiblemente) es que las tareas no se pueden realizar en cualquier momento cuando el QPU está disponible y es necesario indicar y acordar un momento específico.
Según la experiencia del autor, los empleados están listos para ayudar, y el proceso suele ser exitoso. El dispositivo real, cuya topología se muestra en la Figura 2, consta de 8 qubits con la conectividad vecina más cercana. Veremos esta computadora con más detalle en la Sección III B.
g. Simulador
Quantum Virtual Machine (QVM) es la principal utilidad utilizada para ejecutar circuitos cuánticos. Este programa, escrito para ejecutarse en un procesador clásico, recibe el código Quil y simula el desarrollo de un proceso en una computadora cuántica real. Para conectarse a QVM, debe registrar una clave API de forma gratuita en https://www.rigetti.com/forest con un nombre y una dirección de correo electrónico. Luego, recibirá un correo electrónico con la clave API y la ID de usuario que debe configurarse al inicio:
pyquil−config−setup
en la línea de comando (después de instalar pyQuil, por supuesto). Luego se le pedirá que ingrese las claves del correo electrónico.
De acuerdo con la documentación, la mayoría de las claves API proporcionan acceso a QVM de hasta 30 qubits, y puede solicitar acceso a más qubits. La clave API del autor da acceso a 26 qubits (no se solicitaron actualizaciones).
Además, la biblioteca Forest contiene un simulador local escrito en Python y de código abierto, denominado QVM de referencia . No es tan productivo como QVM, pero los usuarios pueden ejecutar circuitos con el número de qubits limitado por la cantidad de memoria en las máquinas locales. Por lo general, los circuitos con menos de 20 qubits se pueden ejecutar en una amplia gama de equipos. La referencia QVM debe instalarse por separado, lo que se puede hacer con textfpip :
pip install referenceqvm
Para usar QVM de referencia en lugar de QVM, solo importe textfapi de textfreferenceqvm en lugar de pyQuil:
import referenceapi.api as api

Figura 2. Diagrama esquemático que muestra la topología (conectividad) de un Agave QPU Rigetti de 8 qubits. Los Qubits están marcados con enteros 0, 1, ..., 7, y las líneas que conectan los qubits indican que se pueden realizar dos operaciones de qubit entre estos qubits. Por ejemplo, podemos ejecutar Controlado- Z sobre los qubits 0 y 1, pero no entre 0 y 2. Para lograr esto último, el compilador Quil convierte Controlled- Z (0, 2) en la operación que puede realizar la QPU. Este diagrama está tomado de la documentación de pyQuil.QISKitB. QISKit
El Quantum Information Software Kit, o QISKit, es un kit de desarrollo de software de código abierto (SDK) para trabajar con el lenguaje cuántico OpenQASM y los procesadores cuánticos en la plataforma IBM Q. Está disponible para los lenguajes Python, JavaScript y Swift, pero aquí solo discutimos Versión de Python
a. Requisitos e instalación
QISKit está disponible en MacOS, Windows y Linux. La instalación de QISKit requiere Python 3.5+. Componentes adicionales útiles, pero no necesarios, son los Cuadernos Jupyter para tutoriales y la distribución Python Anaconda 3, que contiene todas las dependencias necesarias.
La forma más fácil de instalar QISKit es usar el administrador de paquetes pip para Python. En el símbolo del sistema, para instalar el software, ingrese:
pip install qiskit
Tenga en cuenta que textfpip procesa automáticamente todas las dependencias y siempre instalará la última versión. Los usuarios que puedan estar interesados en contribuir a QISKit pueden instalar el código fuente ingresando lo siguiente en el símbolo del sistema, se supone que git está instalado:
git clone https://github.com/QISKit/qiskit−core cd qiskit−core python −m pip install −e
Para obtener información sobre depósitos, consulte la documentación en línea de la guía de depósitos en GitHub.
b. Documentación y materiales de capacitación.
La documentación de QISKit se puede encontrar en Internet en https://qiskit.org/documentation/ . Contiene instrucciones de instalación y configuración, programas de muestra y conexión a dispositivos cuánticos reales, organización de proyectos, una revisión de QISKit y documentación para desarrolladores. También se puede encontrar información básica sobre computación cuántica para usuarios que son nuevos en el campo. Un recurso muy bueno es un enlace al SDK, donde los usuarios pueden encontrar información sobre la documentación del código fuente.
QISKit también contiene una gran cantidad de tutoriales en un repositorio GitHub separado (similar a pyQuil y Grove). Estos incluyen estados enredados; algoritmos estándar como Deutsch Jozh, algoritmo de Grover, estimación de fase y transformación cuántica de Fourier; también algoritmos más complejos, como la resolución de un problema de valor propio variacional cuántico y la aplicación a fermiones hamiltonianos; e incluso algunos juegos divertidos, como la "batalla naval" cuántica. Además, la biblioteca ACQUA (Algorithms and Circuits for QUantum Applications) contiene algoritmos multidisciplinarios para química e inteligencia artificial con numerosos ejemplos.
También hay documentación muy detallada para cada uno de los cuatro backends cuánticos que contiene información sobre conectividad, tiempo de coherencia y tiempo de uso de puerta. Finalmente, mencione el sitio web y las guías de usuario de la experiencia IBM Q. El sitio web contiene una interfaz gráfica para un circuito cuántico en el que los usuarios pueden arrastrar puertas a un circuito, lo cual es útil para explorar los circuitos cuánticos. Las guías del usuario contienen más instrucciones sobre computación cuántica y el lenguaje QISKit.
c. Sintaxis
La sintaxis de QISKit se puede ver en el siguiente programa de muestra. Aquí, a diferencia de pyQuil, debe distinguir explícitamente entre registros cuánticos y clásicos. A continuación se muestra un programa para el esquema de números aleatorios de QISKit:
Listado 4. Código QISKit para un generador de números aleatorios.
La línea 2 importa herramientas para crear registros cuánticos y clásicos, un circuito cuántico y funciones para ejecutar este circuito. Luego creamos un registro cuántico con un qubit (línea 4), un registro clásico con un bit (línea 5) y un circuito cuántico con ambos registros (línea 6). Ahora que el circuito está creado, comenzamos a dar instrucciones: en la línea 8 aplicamos la puerta Hadamard al qubit cero en nuestro registro cuántico (que es el único qubit en el registro cuántico); en la línea 9, medimos este qubit en un bit clásico indexado por cero en nuestro registro clásico (que es el único en el registro clásico) [45]. Ahora que el circuito cuántico está construido, ejecútelo en la línea 11 e imprima el resultado en la línea 12. Por medio de la salida $ en línea $ \ textf {result.get_counts ()} $ en línea $ obtenemos los "cálculos" del circuito, es decir, el diccionario de datos de salida y cuántas veces se recibió cada resultado. Para nuestro caso, las únicas salidas posibles son 0 o 1, y un ejemplo de la salida del programa anterior es textf″0′:532,′1′:492 , lo que indica que obtuvimos 532 instancias de 0 y 492 instancias de 1. (Por defecto, el número de ciclos para iniciar el circuito se llama textfdisparos en QISKit, es 1024.)
d. Lenguaje cuántico
OpenQASM (el lenguaje de ensamblador cuántico abierto [25], que simplemente podemos llamar QASM) es un lenguaje cuántico que proporciona instrucciones para dispositivos cuánticos reales similares al ensamblador en computadoras clásicas. La base de la sintaxis QASM es textfpuertaqubit donde textfpuerta establece el funcionamiento de la puerta cuántica, y textfqubit - qubit. QISKit tiene una función para generar código QASM a partir de un esquema. En el esquema de números aleatorios anterior, podríamos agregar una línea.
print(qcircuit.qasm())
al final para obtener el código QASM para el circuito que se muestra a continuación:
OPENQASM 2.0; include ”qelib1.inc”; qreg q0[1]; creg c0[1]; h q0[0]; measure q0[0] −> c0[0];
Listado 5. Código OpenQASM para un generador de números aleatorios.
Las primeras dos líneas se incluyen en cada archivo QASM. La línea 3 (4) crea un registro cuántico (clásico), y las líneas 5 y 6 dan instrucciones para el circuito. En OpenQASM, puede escribir circuitos pequeños como estos, pero para circuitos más grandes, es mejor usar herramientas en QISKit para la programación gratuita y eficiente de computadoras cuánticas.
e. Hardware cuántico
Existe una gran cantidad de documentación para backends cuánticos compatibles con QISKit. Estos dispositivos incluyen IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits) y QS1_1 (20 qubits, disponibles solo para miembros de IBM Q Network). La documentación para todos está disponible en GitHub. Echaremos un vistazo más de cerca a IBMQX5 en la Sección III B, cuya topología se muestra en la Figura 3.
f. Simulador
IBM , . , 12 , , 25 . , III D.

Figura 3. Topología esquemática de IBMQX5, tomada de [30]. Las flechas direccionales indican oportunidades de enredos. Por ejemplo, podríamos realizar una operación (en QASM) cx Q1, Q2 pero no una operación cx Q2, Q1 . Para hacer esto último, el compilador traduce la instrucción en compuertas equivalentes que se ejecutan en la topología y el conjunto de compuertas.ProjectqC. ProjectQ
ProjectQ — IBM, . ProjectQ Thomas Häner Damien S. Steiger Matthias Troyer ETH Zurich, .
a.
ProjectQ Python (2.7 3.4+). . pip :
python −m pip install −−user projectq
( ). :
git clone https://github.com/ProjectQ−Framework/ProjectQ cd projectq python −m pip install −−user
, , . ProjectQ GitHub.
b.
ProjectQ . , . - ( , ). — / , . [18, 19] , , - .
c.
ProjectQ , . ProjectQ ( ProjectQ), — / . , :
6. ProjectQ .
2 , 3 . 5 (engine) MainEngine , 6 . 8 9 : 0, . « » . — operation | qubit , H|0> , . , /. pyQuil QISKit, ProjectQ . , qbits[0] 9, , int , 12.
d.
, ProjectQ . ProjectQ IBM, OpenQASM: IBM.
e.
ProjectQ . , IBM ProjectQ.
f.
ProjectQ , C++, , , Python. , ProjectQ ClassicalSimulator (stabilizer circuits), . . , , , CNOT [26]. , , , , . , C++ Simulator .
C++ Simulator ProjectQ . [23]() (, ), 26 5 , 28 20 — . [III D]() 6.
ProjectQ , , . , pyQuil ProjectQ [27], Microsoft QDK Thomas Häner Damian Steiger ETH Zurich [28], . ( , , QDK ProjectQ C++, .)
Kit de desarrollo cuánticoD. Quantum Development Kit
Rigetti IBM, Microsoft . [29] , , , . , Microsoft , Quantum Development Kit (QDK), , . , QDK «-» Q#, Visual Studio Visual Studio Code 30 . 2018 , -, MacOS, Windows Linux.
a.
, Visual Studio Code , . ( VS Code, Visual Studio . - - , , VS Code.) , QDK , Bash:
dotnet new −i "Microsoft.Quantum.ProjectTemplates::0.2 −*"
QDK GitHub ( , QDK), :
git clone https://github.com/Microsoft/Quantum.git cd Quantum code
b.
— Q#, - , , , Q# . ; , .
c.
Q# . C#: , Python, , C#. , :
// random number generator circuit in QDK operation random (count: Int, initial: Result) : (Int, Int) { body { mutable numOnes = 0; using ( qubits = Qubit[1]) { for (test in 1..count) { Set(initial, qubits[0]); H(qubits[0]); let res = M(qubits[0]); // count the number of ones if (res == One) { set numOnes = numOnes + 1; } } Set(Zero, qubits[0]); } // return statistics return (count − numOnes, numOnes); } }
7. Q# .
, , /, , . . , , , . — .qs Q#, Driver.cs .qs , .csproj , . , 65 . -, , «Quickstart» .
, QDK , . , — (a+b) , . QDK , , ( C , , , , .
d. /
, QDK . Q# / .
e.
QDK , 30 . , QDK ProjectQ, , ProjectQ. ( III D.) Azure , 40 . QDK , .
, QDK (trace simulator), , , , . , . , . , , - , . . . - QDK.
III. Comparación
Más adelante en esta sección, cuando se consideraron los conceptos básicos de cada plataforma, compararemos cada una de las características adicionales, incluido el soporte en la biblioteca, el equipo cuántico y los niveles del compilador cuántico. También enumeraremos algunas de las características notables y útiles de cada plataforma.
A. Soporte de la biblioteca
« » ( ) (, language.DoQuantumFourierTransform (...) ) . , , 4.
, , , . , , , .
, pyQuil, QISKit QDK . ProjectQ FermiLib, FermiLib, OpenFermion, . , , , ProjectQ. Microsoft QDK , , . , QDK , , QDK, . QISKit .
B.
pyQuil QISKit, . , — — « ». ( ), , / . , , --. IBMQX5 Agave, . - .
a. IBMQX5
IBMQX5 — 16- ( 3). (T2) 31±5 0- , — 89±17 15- . 80 10 . CNOT - , 170- cx q[6], q[7] 348 cx q[3], q[14] . 99,5% ( = 1 — ). - 94,9% . 12,4% 6%. [30].
, , IBM , , . Agave Rigetti, -, , . , .
b. Agave
Agave 8 (transmon) , 2. (T2) 9,2 1- , 15,52 2- . Controlled- Z 118 195 . 96,2% ( , = 1 — ) 93,2%. - 87% - . . - pyQuil.
Algorithm | pyQuil | QISKit | ProjectQ | QDK |
---|
Random Number Generator | (T) | (T) | (T) | (T) |
Teleportation | (T) | (T) | (T) | (T) |
Swap Test | (T) | | | |
Deutsch-Jozsa | (T) | (T) | | (T) |
Grover's Algorithm | (T) | (T) | (T) | (B) |
Quantum Fourier Transform | (T) | (T) | (B) | (B) |
Shor's Algorithm | | | (T) | (D) |
Bernstein Vazirani | (T) | (T) | | (T) |
Phase Estimation | (T) | (T) | | (B) |
Optimization/QAOA | (T) | (T) | | |
Simon's Algorithm | (T) | (T) | | |
Variational Quantum Eigensolver | (T) | (T) | (P) | |
Amplitude Amplification | (T) | | | (B) |
Quantum Walk | | (T) | | |
Ising Solver | (T) | | | (T) |
Quantum Gradient Descent | (T) | | | |
Five Qubit Code | | | | (B) |
Repetition Code | | (T) | | |
Steane Code | | | | (B) |
Draper Adder | | | (T) | (D) |
Beauregard Adder | | | (T) | (D) |
Arithmetic | | | (B) | (D) |
Fermion Transforms | (T) | (T) | (P) | |
Trotter Simulation | | | | (D) |
Electronic Structure (FCI, MP2, HF, etc.) | | | (P) | |
Process Tomography | (T) | (T) | | (D) |
Meyer-Penny Game | (D) | | | |
Vaidman Detection Test | | (T) | | |
Battleships Game | | (T) | | |
Emoji Game | | (T) | | |
Counterfeit Coin Game | | (T) | | |
4. , . « » (T), (D), (B) (P).C.
, , , . / . — , , . QISKit Rigetti, .
IBMQX5 u1 , u2 , u3 y CNOT donde

, u1 Rz(θ) , u2 y u3 — Rx(π/2)

, .

donde X y Z — . IBM Rz(θ) « », , . , z , z () , .
IBMQX5 3. , CNOT , CNOT

, CNOT QISKit, , , QISKit CNOT, . QISKit , , .
8- Agave Rigetti Rx(kπ/2) k∈Z , Rz(θ) Controlled- Z . , , Controlled- Z ( CZ )

Agave 2. QISKit, pyQuil ( ).
, , 5. , pyQuil, Agave, QISKit — IBMQX5. , QISKit (. . ), pyQuil. , - . , IBMQX5 , , pyQuil, . , ( ) - - (, , [32]), . [46], .

5. ( ), pyQuil 8- Agave Rigetti ( ) , QISKit IBM IBMQX5 16- . , Agave, 0, 1 2 ( 2), , IBMQX5, 0, 1 2. , H , Rx Rz . CNOT IBMQX5, Agave — pyQuil CNOT Controlled- Z . ProjectQ.D.
, . , , (. . ) . , , , , , . . QISKit , C++, ProjectQ , B . QVM pyQuil.
a. pyQuil
Rigetti, Quantum Virtual Machine (QVM), , . , API. API 30- , . 16- 10 2,61 . 23 10 56,33 , , QVM API. - - , QVM , QVM , ProjectQ QISKit.
QVM . , . , , . Noise and Quantum Computation pyQuil.
b. QISKit
QISKit , : , , , y . . () . , / . [33], [34-36] . ClassicalSimulator ProjectQ, (stabilizer circuits), .
, 10 10 23,55 . — 239,97 , 12 1000 ( 17 ). , n 2n×2n .
C . 25 . 20 . 6 7.
s ProjectQ
ProjectQ C++, . , , 28 , (569,71 ) 20-. [18]. 6 7.

6. QISKit () ProjectQ C++ (), ( ) ( ). , ( ). **B**.
7. , ProjectQ C++ QISKit, . , √X , CNOT, . , . ProjectQ.E.
pyQuil Grove, GitHub, pyQuil. Rigetti , Slack Rigetti Forest. Quil ( ). , pyQuil OpenFermion [37], Python , .
QISKit JavaScript Swift. Python - . Grove, QISKit . , ACQUA QISKit . . IBM , . 3 , QISKit, 80000 , 60 , IBM [31]. QISKit Slack , , . , QISKit .
, ProjectQ . , TikZ TEX . ProjectQ. ProjectQ , . ProjectQ , IBM. , ProjectQ , OpenFermion, .
QDK Windows , 2018 macOS Linux. QDK, . , Q# , , . QDK , , , , , . .
IV.
, , , (-) (-) . — , . / .
, , :
- , , QISKit ( ProjectQ) pyQuil — .
- , , QISKit, pyQuil QDK — .
- , , Python — .
- , C/C#, QDK — .
- , , , ProjectQ — .
- , - , pyQuil — .
- , , Strawberry Fields .
, , . . , , .
Referencias- Bernhard Ömer, A procedural formalism for quantum computing , Master's thesis, Department of Theoretical Physics, Technical University of Vienna, 1998.
- S. Bettelli, L. Serafini, T. Calarco, Toward an architecture for quantum programming , Eur. Phys. J. D, Vol. 25, No. 2, pp. 181-200 (2003).
- Peter Selinger (2004), A brief survey of quantum programming languages , in: Kameyama Y., Stuckey PJ (eds) Functional and Logic Programming. FLOPS 2004. Lecture Notes in Computer Science, vol 2998. Springer, Berlin, Heidelberg.
- Benjamin P. Lanyon, James D. Whitfield, Geoff G. Gillet, Michael E. Goggin, Marcelo P. Almeida, Ivan Kassal, Jacob D. Biamonte, Masoud Mohseni, Ben J. Powell, Marco Barbieri, Alaґn Aspuru-Guzik, Andrew G. White, Towards quantum chemistry on a quantum computer , Nature Chemistry 2 , pages 106-111 (2010), doi:10.1038/nchem.483.
- Jonathan Olson, Yudong Cao, Jonathan Romero, Peter Johnson, Pierre-Luc Dallaire-Demers, Nicolas Sawaya, Prineha Narang, Ian Kivlichan, Michael Wasielewski, Alaґn Aspuru-Guzik, Quantum information and computation for chemistry , NSF Workshop Report, 2017.
- Jacob Biamonte, Peter Wittek, Nicola Pancotti, Patrick Rebentrost, Nathan Wiebe, Seth Lloyd, Quantum machine learning , Nature volume 549 , pages 195-202 (14 September 2017).
- Seth Lloyd, Masoud Mohseni, Patrick Rebentrost, Quantum principal component analysis , Nature Physics volume 10 , pages 631-633 (2014).
- Vadim N. Smelyanskiy, Davide Venturelli, Alejandro Perdomo-Ortiz, Sergey Knysh, and Mark I. Dykman, Quantum annealing via environment-mediated quantum diffusion , Phys. Rev. Lett. 118 , 066802, 2017.
- Patrick Rebentrost, Brajesh Gupt, Thomas R. Bromley, Quantum computational finance: Monte Carlo pricing of financial derivatives , arXiv preprint (arXiv:1805.00109v1), 2018.
- IM Georgescu, S. Ashhab, Franco Nori, Quantum simulation , Rev. Mod. Phys. 86, 154 (2014), DOI: 10.1103/RevModPhys.86.153.
- EF Dumitrescu, AJ McCaskey, G. Hagen, GR Jansen, TD Morris, T. Papenbrock, RC Pooser, DJ Dean, P. Lougovski, Cloud quantum computing of an atomic nucleus , Phys. Rev. Lett. 120 , 210501 (2018), DOI: 10.1103/PhysRevLett.120.210501.
- Lukasz Cincio, Yigit Subasi, Andrew T. Sornborger, and Patrick J. Coles, Learning the quantum algorithm for state overlap , arXiv preprint (arXiv:1803.04114v1), 2018
- Patrick J. Coles, Stephan Eidenbenz, Scott Pakin, et al., Quantum algorithm implementations for beginners , arXiv preprint (arXiv:1804.03719v1), 2018.
- Mark Fingerhuth, Open-Source Quantum Software Projects , accessed May 12, 2018.
- Quantiki: List of QC Simulators , accessed May 12, 2018
- R. Smith, MJ Curtis and WJ Zeng, A practical quantum instruction set architecture , 2016.
- QISKit, originally authored by Luciano Bello, Jim Challenger, Andrew Cross, Ismael Faro, Jay Gambetta, Juan Gomez, Ali Javadi-Abhari, Paco Martin, Diego Moreda, Jesus Perez, Erick Winston, and Chris Wood, https://github.com/QISKit/qiskit-sdk-py .
- Damian S. Steiger, Thomas Häner, and Matthias Troyer ProjectQ: An open source software framework for quantum computing , 2016.
- Thomas Häner, Damian S. Steiger, Krysta M. Svore, and Matthias Troyer A software methodology for compiling quantum programs , 2016.
- The Quantum Development Kit by Microsoft, homepage: https://www.microsoft.com/en — us/quantum/development-kit, github: https://github.com/Microsoft/Quantum .
- Michael A. Nielsen and Isaac L. Chuang, Quantum Computation and Quantum Information 10th Anniversary Edition, Cambridge University Press, 2011.
- Doug Finke, Education , Quantum Computing Report, https://quantumcomputingreport.com/resources/education/ , accessed May 26, 2018.
- All code in this paper was run and tested on a Dell XPS 13 Developer Edition laptop running 64 bit Ubuntu 16.04 LTS with 8 GB RAM and an Intel Core i7-8550U CPU at 1.80 GHz. Programs were run primarily from the command line but the Python developer environment Spyder was also used for Python programs and Visual Studio Code was used for C# (Q#) programs.
- Forest: An API for quantum computing in the cloud, https://www.rigetti.com/index.php/forest , accessed May 14, 2018.
- Andrew W. Cross, Lev S. Bishop, John A. Smolin, Jay M. Gambetta, Open quantum assembly language , 2017.
- Scott Aaronson, Daniel Gottesman, Improved Simulation of Stabilizer Circuits , Phys. Rev. A 70 , 052328, 2004.
- pyQuil Lisence, github.com/rigetticomputing/pyquil/blob/master/LICENSE#L204 , accessed June 7, 2018.
- Microsoft Quantum Development Kit License, marketplace.visualstudio.com/items/quantum.DevKit/license , accessed June 7, 2018.
- Hao Zhang, Chun-Xiao Liu, Sasa Gazibegovic, et al. Quantized Majorana conductance , Nature 556 , 74-79 (05 April 2018).
- 16-qubit backend: IBM QX team, “ibmqx5 backend specification V1.1.0,” (2018). Retrieved from https://ibm.biz/qiskit-ibmqx5 and https://quantumexperience.ng.bluemix.net/qx/devices on May 23, 2018.
- Talia Gershon, Celebrating the IBM Q Experience Community and Their Research , March 8, 2018.
- M. Reck, A. Zeilinger, HJ Bernstein, and P. Bertani, Experimental realization of any discrete unitary operator , Physical Review Letters, 73, p. 58, 1994.
- Ryan LaRose, Distributed memory techniques for classical simulation of quantum circuits , arXiv preprint (arXiv:1801.01037v1), 2018.
- Thomas Haner, Damian S. Steiger, 0.5 petabyte simulation of a 45-qubit quantum circuit , arXiv preprint (arXiv:1704.01127v2), September 18, 2017.
- Jianxin Chen, Fang Zhang, Cupjin Huang, Michael Newman, Yaoyun Shi, Classical simulation of intermediate-size quantum circuits , arXiv preprint (arXiv:1805.01450v2), 2018.
- Alwin Zulehner, Robert Wille, Advanced simulation of quantum computations , arXiv preprint ( arXiv:1707.00865v2 ), November 7, 2017.
- Jarrod R. McClean, Ian D. Kivlichan, Kevin J. Sung, et al., OpenFermion: The electronic structure package for quantum computers , arXiv:1710.07629, 2017.
- Nathan Killoran, Josh Izaac, Nicols Quesada, Ville Bergholm, Matthew Amy, Christian Weedbrook, Strawberry Fields: A Software Platform for Photonic Quantum Computing , arXiv preprint (arXiv:1804.03159v1), 2018.
- IonQ website, https://ionq.co/ , accessed June 15, 2018.
- D-Wave: The quantum computing company, https://www.dwavesys.com/home , accessed June 20, 2018.
- 4 2018 Rigetti 20- , . , 8- «- ». , 20- (, , ).
- IBMQ Network , 2017 — JP Morgan Chase , Daimler , Samsung , Honda , Oak Ridge National Lab , — , 2018 — Zapata Computing , Strangeworks , QxBranch , Quantum Benchmark , QC Ware , Q-CTRL , Cambridge Quantum Computing (CQC) , 1QBit . North Carolina State University , IBM Q Hub, University of Oxford University of Melbourne . https://www.research.ibm.com/ibmq/network/ .
- , - - . QISKit, ACQUA , pyQuil.
- pyQuil : , from pyquil.gates import H, MEASURE . pyquil.gates , , , .
- , () . , () , , .
- IBM, 31 2018 , « » Python Cython, .
A, . Players Quantum Computing Report [22]. , , . / — .
a. Strawberry Fields
Xanadu , , Strawberry Fields Python , [38]. Xanadu «qumodes» ( ), , , . Strawberry Fields Numpy TensorFlow, Blackbird. GitHub, , , , . , Xanadu https://www.xanadu.ai/ , .
b. IonQ
IonQ — -, College Park , . IonQ , . 171 Yb , IonQ T2 () 15- , T2 1 . , T1 ( ) 20 000 , 10−4 . , -- - , «» . , .
IonQ , IonQ . . , - [39].
c. D-Wave Systems
D-Wave [40], , . D-Wave, 1999 , , , ,
D-Wave , — 2048 , Matlab, C/C++ Python . /, D-Wave . D-Wave .
BB.
ProjectQ C++. Dell XPS 13 Developer Edition 64- Ubuntu 16.04 LTS 8 Intel Core i7-8550U 1,80 .
, , 7. , QISKit — .
CC. :
. , QDK , , . — , — — . . , , , — , .
, , . , QISKit.

8. , circuit_drawer , QISKit v0.5.4.pyQuil
QISKit
ProjectQ
Quantum Developer Kit
// ============================================================================= // teleport.qs // // Teleportation circuit in QDK. // ============================================================================= operation Teleport(msg : Qubit, there : Qubit) : () { body { using (register = Qubit[1]) { // get auxiliary qubit to prepare for teleportation let here = register[0]; // main circuit H(here); CNOT(here, there); CNOT(msg, here); H(msg); // conditional operations if (M(msg) == One) { Z(there); } if (M(here) == One) { X(there); } // reset the "here" qubit Reset(here); } } } operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { // two qubits let msg = register[0]; let there = register[1]; // encode message to send if (message) { X(msg); } // do the teleportation Teleport(msg, there); // check what message was sent if (M(there) == One) { set measurement = true; } // reset all qubits ResetAll(register); } return measurement; } }