Path: blob/main/translations/es/ch-applications/vqe-molecules.ipynb
3861 views
Simulación de Moléculas usando VQE
En este tutorial, presentamos el Solucionador Propio Cuántico Variacional (Variational Quantum Eigensolver, VQE), motivamos su uso, explicamos la teoría necesaria y demostramos su implementación para encontrar la energía del estado fundamental de las moléculas.
Introducción
En muchas aplicaciones es importante encontrar el valor propio mínimo de una matriz. Por ejemplo, en química, el valor propio mínimo de una matriz Hermitiana que caracteriza a la molécula es la energía del estado fundamental de ese sistema. En el futuro, el algoritmo de estimación de fase cuántica se puede usar para encontrar el valor propio mínimo. Sin embargo, su implementación en problemas útiles requiere profundidades de circuito que excedan los límites del hardware disponible en la era NISQ. Así, en 2014, Peruzzo et al. propusieron VQE para estimar la energía del estado fundamental de una molécula utilizando circuitos mucho menos profundos [1].
Expresado formalmente, dada una matriz Hermitiana con un valor propio mínimo desconocido , asociado con el estado propio , VQE proporciona una estimación delimitando :
donde es el estado propio asociado con . Al aplicar un circuito parametrizado, representado por , a algún estado inicial arbitrario , el algoritmo obtiene una estimación en . La estimación se optimiza iterativamente mediante un controlador clásico que cambia el parámetro minimizando el valor esperado de .
El Método Variacional de la Mecánica Cuántica
Antecedentes Matemáticos
VQE es una aplicación del método variacional de la mecánica cuántica. Para comprender mejor el método variacional, se proporcionan algunos antecedentes matemáticos preliminares. Un vector propio, , de una matriz es invariante bajo la transformación por hasta una constante multiplicativa escalar (el valor propio ). Esto es,
Además, una matriz es Hermitiana cuando es igual a su propia transpuesta conjugada.
El teorema espectral establece que los valores propios de una matriz Hermitiana deben ser reales. Por lo tanto, cualquier valor propio de tiene la propiedad de que {latex} \lambda_i = \lambda_i^*. Como cualquier cantidad medible debe ser real, las matrices Hermitianas son adecuadas para describir los Hamiltonianos de los sistemas cuánticos. Además, puede expresarse como
donde cada es el valor propio correspondiente al vector propio . Además, el valor esperado del observable en un estado cuántico arbitrario está dado por
Sustituyendo con su representación como una suma ponderada de sus vectores propios,
La última ecuación demuestra que el valor esperado de un observable en cualquier estado se puede expresar como una combinación lineal utilizando los valores propios asociados con como pesos. Además, cada uno de los pesos en la combinación lineal es mayor o igual a 0, ya que y entonces está claro que
La ecuación anterior se conoce como método variacional (en algunos textos también se conoce como principio variacional) [2]. Es importante señalar que esto implica que el valor esperado de cualquier función de onda siempre será al menos el valor propio mínimo asociado con . Además, el valor esperado del estado propio viene dado por {latex} \langle \psi_{\text{min}}|H|\psi_{\text{min}}\rangle = \langle \psi_{\text{min}}|\lambda_{\text{min}}|\psi_{\text{min}}\rangle = \lambda_{\text{min}}. Por lo tanto, como se esperaba, {latex} \langle H \rangle_{\psi_{\text{min}}}=\lambda_{\text{min}}.
Delimitación del Estado Fundamental
Cuando el Hamiltoniano de un sistema se describe mediante la matriz Hermitiana , la energía del estado fundamental de ese sistema, , es el valor propio más pequeño asociado con . Seleccionando arbitrariamente una función de onda (llamada ansatz) como estimación inicial que se aproxima a , calculando su valor esperado, , y actualizando iterativamente la función de onda, se pueden obtener límites arbitrariamente estrictos en la energía del estado fundamental de un Hamiltoniano.
El Solucionador Propio Cuántico Variacional
Formas Variacionales
Se requiere un enfoque sistemático para variar el ansatz para implementar el método variacional en una computadora cuántica. VQE lo hace mediante el uso de un circuito parametrizado de forma fija. Este circuito suele denominarse forma variacional y su acción puede representarse mediante la transformación lineal . Se aplica una forma variacional a un estado inicial (como el estado de vacío , o el estado de Hartree Fock) y genera un estado de salida . La optimización iterativa sobre tiene como objetivo generar un valor esperado {latex} \langle \psi(\theta)|H|\psi(\theta)\rangle \approx E_{gs} \equiv \lambda_{\text{min}}. Idealmente, estará cerca de (donde la 'cercanía' se caracteriza por la fidelidad del estado o la distancia de Manhattan), aunque en la práctica, se pueden obtener límites útiles en incluso si este no es el caso.
Además, una forma variacional fija con un número polinomial de parámetros solo puede generar transformaciones a un subespacio de tamaño polinomial de todos los estados en un espacio de Hilbert de tamaño exponencial. En consecuencia, existen varias formas variacionales. Algunas, como Ry y RyRz, están diseñadas heurísticamente, sin tener en cuenta el dominio de destino. Otros, como UCCSD, utilizan conocimientos específicos del dominio para generar aproximaciones cercanas basadas en la estructura del problema. La estructura de las formas variacionales comunes se analiza con mayor profundidad más adelante en este documento.
Formas Variacionales Simples
Al construir una forma variacional debemos equilibrar dos objetivos opuestos. Idealmente, nuestra forma variacional de qubits sería capaz de generar cualquier estado posible donde y . Sin embargo, nos gustaría que la forma variacional use la menor cantidad de parámetros posible. Aquí, nuestro objetivo es dar la intuición para la construcción de formas variacionales que satisfagan nuestra primera meta, sin tener en cuenta la segunda en aras de la simplicidad.
Considera el caso donde . La compuerta U3 toma tres parámetros, y , y representa la siguiente transformación:
Hasta una fase global, cualquier posible transformación de un solo qubit puede implementarse configurando adecuadamente estos parámetros. En consecuencia, para el caso de un solo qubit, el circuito proporciona una forma variacional capaz de generar cualquier estado posible:

Además, esta 'forma variacional' universal solo tiene 3 parámetros y, por lo tanto, puede optimizarse de manera eficiente. Vale la pena enfatizar que la habilidad de generar un estado arbitrario asegura que durante el proceso de optimización, la forma variacional no limite el conjunto de estados alcanzables sobre los cuales se puede tomar el valor esperado de . Idealmente, esto asegura que el valor esperado mínimo esté limitado solo por las capacidades del optimizador clásico.
Se puede derivar una forma variacional universal menos trivial para el caso de 2 qubits, donde se deben considerar las interacciones de dos cuerpos y, por lo tanto, el entrelazamiento para lograr la universalidad. Basado en el trabajo presentado por Shende et al. [3], el siguiente es un ejemplo de un circuito universal de 2 qubits parametrizado:

Permite que la transformación realizada por el circuito anterior sea representada por . Cuando se optimiza de forma variable, el valor esperado de se minimiza cuando . Por formulación, puede producir una transformación a cualquier estado posible y, por lo tanto, esta forma variacional puede obtener un límite arbitrariamente estrecho en las energías del estado fundamental de dos qubits, solo limitado por las capacidades del optimizador clásico.
Optimización de Parámetros
Una vez que se ha seleccionado una forma variacional parametrizada eficientemente, de acuerdo con el método variacional, sus parámetros deben optimizarse para minimizar el valor esperado del Hamiltoniano objetivo. El proceso de optimización de parámetros tiene varios desafíos. Por ejemplo, el hardware cuántico tiene varios tipos de ruido, por lo que la evaluación de la función objetivo (cálculo de energía) puede no reflejar necesariamente la verdadera función objetivo. Además, algunos optimizadores realizan una serie de evaluaciones de funciones objetivo que dependen de la cardinalidad del conjunto de parámetros. Se debe seleccionar un optimizador apropiado teniendo en cuenta los requisitos de una aplicación.
Una estrategia de optimización popular es el descenso de gradiente donde cada parámetro se actualiza en la dirección que produce el mayor cambio local de energía. En consecuencia, el número de evaluaciones realizadas depende del número de parámetros de optimización presentes. Esto permite que el algoritmo encuentre rápidamente un óptimo local en el espacio de búsqueda. Sin embargo, esta estrategia de optimización a menudo se atasca en óptimos locales deficientes y es relativamente costosa en términos de la cantidad de evaluaciones de circuitos realizadas. Si bien es una estrategia de optimización intuitiva, no se recomienda su uso en VQE.
Un optimizador apropiado para optimizar una función objetivo ruidosa es el optimizador de Aproximación Estocástica de Perturbación Simultánea (Simultaneous Perturbation Stochastic Approximation, SPSA). SPSA aproxima el gradiente de la función objetivo con solo dos mediciones. Lo hace perturbando simultáneamente todos los parámetros de forma aleatoria, en contraste con el descenso de gradiente donde cada parámetro se perturba de forma independiente. Cuando se utiliza VQE en un simulador ruidoso o en hardware real, se recomienda SPSA como el optimizador clásico.
Cuando el ruido no está presente en la evaluación de la función de costo (como cuando se usa VQE con un simulador de vector de estado), puede ser útil una amplia variedad de optimizadores clásicos. Dos de estos optimizadores compatibles con Qiskit Aqua son el optimizador de Programación Secuencial de Mínimos Cuadrados (Sequential Least Squares Programming, SLSQP) y el optimizador de Optimización Restringida por Aproximación Lineal (Constrained Optimization by Linear Approximation, COBYLA). Vale la pena señalar que COBYLA solo realiza una evaluación de la función objetivo por iteración de optimización (y, por lo tanto, el número de evaluaciones es independiente de la cardinalidad del conjunto de parámetros). Por lo tanto, si la función objetivo está libre de ruido y se desea minimizar el número de evaluaciones realizadas, se recomienda probar COBYLA.
Ejemplo con una Forma Variacional de un Solo Qubit
Ahora usaremos la forma variacional simple de un solo qubit para resolver un problema similar a la estimación de la energía del estado fundamental. Específicamente, se nos da un vector de probabilidad aleatorio y deseamos determinar una posible parametrización para nuestra forma variacional de un solo qubit de modo que genere una distribución de probabilidad cercana a (donde la cercanía se define en términos de la distancia de Manhattan entre los dos vectores de probabilidad).
Primero creamos el vector de probabilidad aleatoria en python:
Posteriormente, creamos una función que toma los parámetros de nuestra única forma variacional U3 como argumentos y devuelve el circuito cuántico correspondiente:
Ahora especificamos la función objetivo que toma como entrada una lista de los parámetros de la forma variacional y devuelve el costo asociado con esos parámetros:
Finalmente, creamos una instancia del optimizador COBYLA y ejecutamos el algoritmo. Ten en cuenta que la salida varía de una ejecución a otra. Además, mientras esté cerca, la distribución obtenida podría no ser exactamente la misma que la distribución objetivo; sin embargo, aumentar el número de iteraciones aumentará la precisión de la salida.
Estructura de Formas Variacionales Comunes
Como ya se discutió, no es posible que una forma variacional polinomialmente parametrizada genere una transformación a cualquier estado. Las formas variacionales se pueden agrupar en dos categorías, dependiendo de cómo manejen esta limitación. La primera categoría de formas variacionales utiliza conocimientos específicos del dominio o aplicación para limitar el conjunto de posibles estados de salida. El segundo enfoque usa un circuito heurístico sin dominio previo o conocimiento específico de la aplicación.
La primera categoría de las formas variacionales aprovecha las características del dominio del problema para restringir el conjunto de transformaciones que pueden ser necesarias. Por ejemplo, al calcular la energía del estado fundamental de una molécula, el número de partículas en el sistema se conoce a priori. Por lo tanto, si se utiliza un estado inicial con el número correcto de partículas, limitando la forma variacional a producir solo transformaciones que conservan las partículas, el número de parámetros necesarios para abarcar el nuevo subespacio de transformación se puede reducir considerablemente. De hecho, al utilizar información similar de la teoría de agrupaciones acopladas (Coupled-Cluster), la forma variacional UCCSD puede obtener resultados muy precisos para la estimación de la energía del estado fundamental molecular cuando se parte del estado de Hartree Fock. Otro ejemplo que ilustra la explotación del conocimiento específico del dominio se deriva de considerar el conjunto de circuitos realizables en hardware cuántico real. Las computadoras cuánticas existentes, como las basadas en qubits superconductores, tienen una conectividad de qubit limitada. Es decir, no es posible implementar compuertas de 2 qubits en pares de qubits arbitrarios (sin insertar compuertas swap). Por lo tanto, se han construido formas variacionales para arquitecturas de computadoras cuánticas específicas donde los circuitos se ajustan específicamente para explotar al máximo la conectividad y las compuertas disponibles de forma nativa de un dispositivo cuántico determinado. Dicha forma variacional se utilizó en 2017 para implementar con éxito VQE para la estimación de las energías del estado fundamental de moléculas tan grandes como BeH en una computadora cuántica de IBM [4].
En el segundo enfoque, las compuertas están en capas de manera que se puedan obtener buenas aproximaciones en una amplia gama de estados. Qiskit Aqua admite tres de estas formas variacionales: RyRz, Ry y SwapRz (solo discutiremos las dos primeras). Todas estas formas variacionales aceptan múltiples configuraciones especificadas por el usuario. Tres configuraciones esenciales son la cantidad de qubits en el sistema, la configuración de profundidad y la configuración de entrelazamiento. Una sola capa de una forma variacional especifica un cierto patrón de rotaciones de un solo qubit y compuertas CX. La configuración de profundidad indica cuántas veces la forma variacional debe repetir este patrón. Al aumentar el ajuste de profundidad, a costa de aumentar el número de parámetros que deben optimizarse, aumenta el conjunto de estados que la forma variacional puede generar. Finalmente, la configuración de entrelazamiento selecciona la configuración e implícitamente el número de compuertas CX. Por ejemplo, cuando la configuración de entrelazamiento es lineal, las compuertas CX se aplican a pares de qubits adyacentes en orden (y, por lo tanto, compuertas CX se agregan por capa). Cuando la configuración de entrelazamiento está completa, se aplica una compuerta CX a cada par de qubits en cada capa. Los circuitos para RyRz correspondientes a entanglement="full" y entanglement="linear" se pueden ver ejecutando el siguiente fragmento de código:
Supón que la configuración de profundidad está configurada en . Entonces, RyRz tiene parámetros y Ry (no se muestra) tiene parámetros.
Implementación de VQE en Qiskit
Esta sección ilustra una implementación de VQE utilizando el enfoque programático. Qiskit Aqua también permite una implementación declarativa, sin embargo, revela menos información sobre el algoritmo subyacente. Este código, específicamente la preparación de operadores qubit, se basa en el código que se encuentra en el repositorio de tutoriales de Qiskit (y a partir de julio de 2019, se puede encontrar en: https://github.com/Qiskit/qiskit-tutorials).
Primero se deben importar las siguientes bibliotecas.
Ejecución de VQE en un Simulador de Vector de Estado
Demostramos el cálculo de la energía del estado fundamental para LiH a varias distancias interatómicas. Se debe crear un controlador (driver) para la molécula en cada una de esas distancias. Ten en cuenta que en este experimento, para reducir la cantidad de qubits utilizados, congelamos el núcleo y eliminamos dos orbitales desocupados. Primero, definimos una función que toma una distancia interatómica y devuelve el operador qubit apropiado, , así como alguna otra información sobre el operador.
Primero, la energía exacta del estado fundamental se calcula utilizando el operador de qubit y un solucionador propio exacto clásico. Posteriormente, se crea el estado inicial , que la instancia de VQE utiliza para producir el ansatz final . Se almacena el resultado exacto y el resultado del VQE para cada distancia interatómica. Observa que el resultado dado por vqe.run(backend)['energy'] + shift es equivalente a la cantidad , donde el mínimo no es necesariamente el mínimo global.
Al inicializar la instancia de VQE con VQE(qubit_op, var_form, optimizer, 'matrix'), el valor esperado de en se calcula directamente a través de la multiplicación de matrices. Sin embargo, cuando se usa un dispositivo cuántico real o un verdadero simulador como qasm_simulator con VQE(qubit_op, var_form, optimizer, 'paulis'), el cálculo del valor esperado es más complicado Un Hamiltoniano se puede representar como una suma de cadenas de Pauli, con cada término de Pauli actuando en un qubit según lo especificado por el mapeo que se utiliza. Cada cadena de Pauli tiene un circuito correspondiente adjunto al circuito que corresponde a . Posteriormente, cada uno de estos circuitos se ejecuta y todos los resultados se utilizan para determinar el valor esperado de en . En el siguiente ejemplo, inicializamos la instancia de VQE con el modo matrix, por lo que el valor esperado se calcula directamente a través de la multiplicación de matrices.
Ten en cuenta que el siguiente fragmento de código puede tardar unos minutos en ejecutarse hasta completarse.
Observa que los resultados de VQE están muy cerca de los resultados exactos y, por lo tanto, la curva de VQE oculta la curva de la energía exacta.
Ejecución de VQE en un Simulador Ruidoso
Aquí, calculamos la energía del estado fundamental para H usando un simulador ruidoso y mitigación de errores.
Primero, preparamos el operador de qubit que representa el Hamiltoniano de la molécula:
Ahora, cargamos un mapa de acoplamiento de dispositivos y un modelo de ruido del proveedor IBMQ y creamos una instancia cuántica, lo que permite la mitigación de errores:
Finalmente, debemos configurar el optimizador, la forma variacional y la instancia de VQE. A medida que los efectos del ruido aumentan conforme lo hace la profundidad del circuito de compuertas de dos qubits, usamos una forma variacional heurística (RYRZ) en lugar de UCCSD, ya que RYRZ tiene un circuito mucho menos profundo que UCCSD y usa sustancialmente menos compuertas de dos qubits.
El código siguiente puede tardar unos minutos en ejecutarse hasta completarse.
Cuando la mitigación de ruido está habilitada, aunque el resultado no se encuentre dentro de la precisión química (definida como dentro de 0.0016 Hartrees del resultado exacto), está bastante cerca de la solución exacta.
Problemas
Se te da un Hamiltoniano con la promesa de que su estado fundamental está cerca de un estado de qubits máximamente entrelazado. Explica qué forma (o formas) variacional es probable que aprenda de manera eficiente y precisa la energía del estado fundamental de . También puedes responder creando tu propia forma variacional y explicando por qué es apropiado para usar con este Hamiltoniano.
Calcula el número de evaluaciones de circuito realizadas por iteración de optimización, cuando se usa el optimizador COBYLA, el
qasm_simulatorcon 1000 iteraciones y un Hamiltoniano con 60 cadenas de Pauli.Utiliza VQE para estimar la energía del estado fundamental de BeH con una distancia interatómica de Å. Puedes reutilizar la función
get_qubit_op(dist)reemplazandoatom="Li .0 .0 .0; H .0 .0 " + str(dist)conatom="Be .0 .0 .0; H .0 .0 -" + str(dist) + "; H .0 .0 " + str(dist)e invocando la función conget_qubit_op(1.3). Ten en cuenta que la eliminación de los orbitales desocupados no conserva la precisión química de esta molécula. Sin embargo, para reducir la cantidad de qubits necesarios a 6 (y, por lo tanto, permitir una simulación eficiente en la mayoría de las computadoras portátiles), la pérdida de precisión es aceptable. Si bien está más allá del alcance de este ejercicio, el lector interesado puede usar operaciones de reducción de qubits para reducir la cantidad de qubits requeridos a 7, sin perder ninguna precisión química.
Referencias
Peruzzo, Alberto, et al. "A variational eigenvalue solver on a photonic quantum processor." Nature communications 5 (2014): 4213.
Griffiths, David J., and Darrell F. Schroeter. Introduction to quantum mechanics. Cambridge University Press, 2018.
Shende, Vivek V., Igor L. Markov, and Stephen S. Bullock. "Minimal universal two-qubit cnot-based circuits." arXiv preprint quant-ph/0308033 (2003).
Kandala, Abhinav, et al. "Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets." Nature 549.7671 (2017): 242.