Compilación cuántica aproximada con redes tensoriales (AQC-Tensor)
El addon de Qiskit para compilación cuántica aproximada con redes tensoriales (AQC-Tensor) permite a los usuarios compilar la porción inicial de un circuito en una aproximación casi equivalente a ese circuito, pero con muchas menos capas. Esto se logra mediante redes tensoriales usando el método descrito en [1]. Su principal utilidad está en circuitos que simulan evolución temporal, aunque puede aplicarse a cualquier clase de circuitos que tenga acceso a:
- Un gran estado intermedio, conocido como "estado objetivo", que puede obtenerse mediante simulación con redes tensoriales; y,
- Un buen circuito que prepare una aproximación al estado objetivo, pero con menos capas al compilarlo en el dispositivo hardware de destino.
La técnica genera un circuito ansatz basado en un circuito objetivo más grande que el usuario desea ejecutar finalmente en una QPU. Esto se logra simulando primero una porción del circuito objetivo mediante métodos de redes tensoriales, y obteniendo una descripción precisa de un estado intermedio que el circuito ansatz aproximará. Una vez encontrado este estado intermedio, se utiliza como función de coste para optimizar los parámetros del circuito ansatz. Una vez completada la optimización, la porción restante del circuito objetivo se agrega al ansatz y se ejecuta en hardware cuántico.
Instala el paquete AQC-Tensor
Hay dos formas de instalar el paquete AQC-Tensor: desde PyPI o compilándolo desde el código fuente. Se recomienda instalar estos paquetes en un entorno virtual para garantizar la separación entre dependencias.
Instalar desde PyPI
La forma más sencilla de instalar el paquete AQC-Tensor es a través de PyPI. Para usar el paquete, también debes instalar al menos un backend de redes tensoriales. El siguiente fragmento de código instalará el addon junto con quimb (para soporte de redes tensoriales) y jax (para diferenciación automática). Si te interesa, consulta el paquete en GitHub.
pip install 'qiskit-addon-aqc-tensor[quimb-jax]'
Instalar desde el código fuente
Haz clic aquí para leer cómo instalar este paquete manualmente.
Si deseas contribuir a este paquete o instalarlo manualmente, primero clona el repositorio:
git clone git clone git@github.com:Qiskit/qiskit-addon-aqc-tensor.git
e instala el paquete mediante pip. Si planeas ejecutar los tutoriales incluidos en el repositorio del paquete, instala también las dependencias de los notebooks. Si planeas desarrollar en el repositorio, es posible que también quieras instalar las dependencias de dev.
pip install tox jupyterlab -e '.[notebook-dependencies,dev]'
Fundamentos teóricos
El procedimiento AQC-Tensor se explica en detalle en [1]. Esta sección ofrece una visión general de la técnica.

En general, AQC-Tensor requiere tres elementos de entrada:
- Una descripción del estado objetivo en forma de red tensorial. Esto puede generarse simulando un circuito en un simulador de redes tensoriales, o puede obtenerse de otra manera (por ejemplo, realizando evolución temporal en un estado de producto de matrices mediante el principio variacional dependiente del tiempo).
- Un circuito ansatz parametrizado. Idealmente, uno que contenga conectividad eficiente para hardware, de modo que tenga una profundidad razonable en el hardware de destino.
- Parámetros iniciales para insertar en el circuito ansatz, de forma que el estado resultante sea ya una buena aproximación del estado objetivo. (Esto no es, en principio, obligatorio para AQC, pero ayuda a darle al optimizador un punto de partida razonable.)
La técnica consiste en optimizar iterativamente los parámetros del circuito ansatz, de modo que el estado que genera sea lo más cercano posible al estado objetivo.
Generación del ansatz
Para generar (2) y (3) de la lista anterior, el paquete qiskit-addon-aqc cuenta con una función, generated_ansatz_from_circuit(), que toma un circuito de entrada y devuelve un ansatz parametrizado junto con un conjunto inicial de parámetros. Los parámetros que devuelve la función son tales que, al insertarlos en el ansatz, generan un estado exactamente equivalente al circuito de entrada, salvo una fase global.
El ansatz generado por esta función utiliza 9 parámetros por bloque de dos qubits y está basado en la descomposición KAK, que parametriza cualquier compuerta de dos qubits en términos de tres parámetros, salvo rotaciones de un solo qubit. Las rotaciones de un solo qubit se descomponen como , cada una de las cuales tiene tres parámetros. Esto resulta en que el circuito ansatz contiene 3 parámetros por cada bloque de dos qubits del circuito original, más 3 parámetros para una rotación de un solo qubit saliente en cada uno de los dos qubits (para un total de 9 parámetros). Tras añadir estos bloques, el ansatz se completa añadiendo una capa de rotaciones de un solo qubit a cada qubit activo al inicio del circuito.
Simulación con redes tensoriales
Para obtener una descripción del estado objetivo deseado, este addon utiliza un estado de producto de matrices (la forma más simple de una red tensorial) y admite los siguientes simuladores de redes tensoriales:
- El simulador MPS incluido en Qiskit Aer
- El simulador eager
CircuitMPSde Quimb - El simulador lazy
Circuitde Quimb
El parámetro más importante de una red tensorial es su dimensión de enlace máxima, . Este parámetro limita cuánto entrelazamiento puede representarse con una red tensorial y, por tanto, hasta qué profundidad puede simularse fielmente un circuito dado.
Dado un circuito con qubits, un estado de producto de matrices necesita como máximo una dimensión de enlace de para simular exactamente el circuito a cualquier profundidad. Esto está fuera del alcance para circuitos generales de escala utilitaria con más de 100 qubits. Por esta razón, si estás experimentando con este addon para un problema de prueba con pocos qubits, es importante asegurarte de que . De esta manera, cuando escales el problema a un circuito más grande, el estado objetivo seguirá siendo simulable clásicamente.
Próximos pasos
- Lee la página sobre cómo empezar con AQC-Tensor
- Lee el tutorial sobre cómo usar AQC para mejorar la evolución temporal de Trotterización.
Referencias
[1] Robertson, Niall F., et al. "Approximate Quantum Compiling for Quantum Simulation: A Tensor Network based approach" arXiv preprint arXiv:2301.08609 (2023).