Path: blob/main/translations/es/ch-applications/qaoa.ipynb
3861 views
Resolución de problemas de optimización combinatoria utilizando QAOA
En este tutorial, presentamos problemas de optimización combinatoria, explicamos algoritmos de optimización aproximada, explicamos cómo funciona el Algoritmo Cuántico de Optimización Aproximada (Quantum Approximate Optimization Algorithm, QAOA) y presentamos la implementación de un ejemplo que se puede ejecutar en un simulador o en un sistema cuántico real.
Problema de Optimización Combinatoria
Los problemas de optimización combinatoria implican encontrar un objeto óptimo a partir de un conjunto finito de objetos. Nos centraríamos en problemas que impliquen encontrar cadenas de bits "óptimas" compuestas de 0s y 1s entre un conjunto finito de cadenas de bits. Uno de esos problemas correspondientes a un grafo es el problema de Max-Cut (máximo corte).
Problema Max-Cut
Un problema de Max-Cut (máximo corte) implica dividir los nodos de un grafo en dos conjuntos, de modo que el número de aristas entre los conjuntos sea el máximo. El siguiente ejemplo tiene un grafo con cuatro nodos y se muestran algunas de las formas en que se puede dividir en dos conjuntos, "rojo" y "azul".
Para 4 nodos, como cada nodo se puede asignar a los conjuntos "rojo" o "azul", hay asignaciones posibles, de las cuales tenemos que encontrar una que proporcione el máximo número de aristas entre los conjuntos "rojo" y "azul". El número de tales aristas entre dos conjuntos en la figura, a medida que avanzamos de izquierda a derecha, son 0, 2, 2 y 4. Podemos ver, después de enumerar todas las asignaciones posibles de , que la figura más a la derecha es la asignación que da el número máximo de aristas entre los dos conjuntos. Por lo tanto, si codificamos "rojo" como 0 y "azul" como 1, las cadenas de bits "0101" y "1010" que representan la asignación de nodos a cualquiera de los conjuntos son las soluciones.
Como te habrás dado cuenta, a medida que aumenta la cantidad de nodos en el grafo, la cantidad de asignaciones posibles que debes examinar para encontrar la solución aumenta exponencialmente.
QAOA
QAOA (Algoritmo Cuántico de Optimización Aproximada) presentado por Farhi et al.[1] es un algoritmo cuántico que intenta resolver este tipo de problemas combinatorios.
Es un algoritmo variacional que utiliza una unitaria caracterizada por los parámetros para preparar un estado cuántico . El objetivo del algoritmo es encontrar parámetros óptimos {latex} (\boldsymbol{\beta}_{\text{opt}}, \boldsymbol{\gamma}_{\text{opt}}) tales que el estado cuántico {latex} \lvert \psi(\boldsymbol{\beta}_{\text{opt}}, \boldsymbol{\gamma}_{\text{opt}}) \rangle codifique la solución al problema.
La unitaria tiene una forma específica y está compuesta por dos unitarias y donde es el Hamiltoniano de mezcla y es el Hamiltoniano del problema. Tal elección de unitarias se inspira en un esquema relacionado llamado recocido cuántico (quantum annealing).
El estado se prepara aplicando estas unitarias como bloques alternos de las dos unitarias aplicadas veces tal que
donde es un estado inicial adecuado.
Demostraremos estos pasos usando el problema Max-Cut discutido anteriormente. Para eso, primero definiríamos el grafo subyacente del problema que se muestra arriba.
El Hamiltoniano del problema específico del problema Max-Cut hasta una constante aquí es:
Para construir un Hamiltoniano de este tipo para un problema, es necesario seguir algunos pasos que cubriremos en secciones posteriores de esta página.
El Hamiltoniano mezclador suele tener la forma:
Como términos individuales en la suma de y ambos conmutan, podemos escribir las unitarias como:
Ten en cuenta que cada término en el producto anterior corresponde a una rotación X en cada qubit. Y podemos escribir como:
Examinemos ahora cómo se ven los circuitos de las dos unitarias.
La Unitaria Mezcladora
El Problema de la Unitaria
El Estado Inicial
El estado inicial utilizado durante QAOA suele ser una superposición igual de todos los estados básicos, es decir,
Dicho estado, cuando el número de qubits es 4 (), se puede preparar aplicando compuertas Hadamard a partir de un estado totalmente cero, como se muestra en el siguiente circuito.
El circuito QAOA
Hasta ahora hemos visto que la preparación de un estado cuántico durante QAOA se compone de tres elementos
Preparar un estado inicial
Aplicar la unitaria
{latex} U(H_P) = e^{-i \gamma H_P}correspondiente al Hamiltoniano del problemaLuego, aplicar la mezcla unitaria
{latex} U(H_B) = e^{-i \beta H_B}
Veamos cómo se ve para el problema de ejemplo:
El siguiente paso es encontrar los parámetros óptimos {latex} (\boldsymbol{\beta_{\text{opt}}}, \boldsymbol{\gamma_{\text{opt}}}) tales que el valor esperado
se minimiza. Tal expectativa se puede obtener al hacer la medición en la base Z. Usamos un algoritmo de optimización clásico para encontrar los parámetros óptimos. Los siguientes pasos están involucrados como se muestra en el esquema.

Inicializa y con valores reales adecuados.
Repite hasta que se cumplan algunos criterios de convergencia adecuados:
Preparar el estado usando el circuito qaoa
Medir el estado en la base estándar
Calcular
Encontrar un nuevo conjunto de parámetros
{latex} (\boldsymbol{\beta}_{new}, \boldsymbol{\gamma}_{new})usando un algoritmo de optimización clásicoEstablecer los parámetros actuales iguales a los nuevos parámetros
{latex} (\boldsymbol{\beta}_{new}, \boldsymbol{\gamma}_{new})
El siguiente código implementa los pasos mencionados anteriormente.
Observa que qiskit presenta diferentes opciones de optimizadores clásicos. Aquí elegimos COBYLA como nuestro algoritmo de optimización clásico.
Analizando el resultado
Como notamos que las cadenas de bits "0101" y "1010" tienen la probabilidad más alta y, de hecho, son las asignaciones del grafo (con el que empezamos) que da 4 aristas entre las dos particiones.
Apéndice
1. Construcción del Hamiltoniano del Problema
Cualquier problema de maximización puede expresarse en términos de un problema de minimización y viceversa. Por lo tanto, la forma general de un problema de optimización combinatoria viene dada por
donde , es una variable discreta y es la función de costo, que mapea desde algún dominio a los números reales . La variable puede estar sujeta a un conjunto de restricciones y se encuentra dentro del conjunto de puntos factibles.
En los problemas de optimización combinatoria binaria, la función de costo generalmente se puede expresar como una suma de términos que solo involucran un subconjunto de los bits en la cadena y está escrito en la forma canónica
donde y . Queremos encontrar la cadena de n bits para la cual es el máximo.
1.1 Hamiltonianos Diagonales
Esta función de costo se puede mapear a un Hamiltoniano que es diagonal en la base computacional. Dada la función de costo , este Hamiltoniano se escribe como
donde etiqueta los estados de la base computacional . Si la función de costo solo tiene como máximo términos de peso, es decir, cuando solo contribuye que involucra como máximo bits, entonces este Hamiltoniano diagonal también es solo una suma de operadores Pauli con ponderación .
La expansión de en operadores de Pauli se puede obtener a partir de la expansión canónica de la función de costo sustituyendo cada variable binaria por la matriz {latex} x_i \rightarrow 2^{-1}(1 - Z_i). Aquí se lee como el operador de Pauli que actúa sobre el qubit y es trivial sobre todos los demás, es decir
Esto significa que el Hamiltoniano de espín que codifica la función de costo clásica se escribe como , Hamiltoniano de espín cuántico local que solo involucra a los operadores Pauli .
Ahora, supondremos que solo unos pocos (polinomialmente muchos en ) serán distintos de cero. Además, supondremos que el conjunto está acotado y no es demasiado grande. Esto significa que podemos escribir la función de costo así como el Hamiltoniano como la suma de términos locales ,
donde tanto como el soporte de están razonablemente acotados.
2 Ejemplos:
Consideramos 2 ejemplos para ilustrar problemas de optimización combinatoria. Solo implementaremos el primer ejemplo en Qiskit, pero proporcionaremos una secuencia de ejercicios que dan las instrucciones para implementar el segundo ejemplo también.
2.1 (ponderado)
Considera un grafo no dirigido de nodos G = (V, E) donde |V| = n con pesos de arista ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 7: w_{ij}&̲gt;0, {latex} w_{ij}=w_{ji}, para . Un corte se define como una partición del conjunto original V en dos subconjuntos. La función de costo a optimizar es en este caso es la suma de los pesos de los puntos de conexión de las aristas en los dos subconjuntos diferentes, cruzando el corte. Al asignar o a cada nodo , se intenta maximizar la función de ganancia global (aquí y en las siguientes sumas sobre los índices 1,2,...,n)
Para simplificar la notación, asumimos pesos uniformes para . Para encontrar una solución a este problema en una computadora cuántica, primero es necesario mapearlo a un Hamiltoniano diagonal como se discutió anteriormente. Escribimos la suma sobre aristas en el conjunto
Para mapearlo a un Hamiltoniano de espín, hacemos la asignación {latex} x_i\rightarrow (1-Z_i)/2, donde es el operador Pauli Z que tiene valores propios y obtenemos
Esto significa que el Hamiltoniano se puede escribir como una suma de términos locales:
con .
2.2 Problemas de satisfacción de restricciones y .
Otro ejemplo de un problema de optimización combinatoria es . Aquí la función de costo {latex} C(\textbf{x}) = \sum_{k = 1}^m c_k(\textbf{x}) es una suma de cláusulas que restringen los valores de bits de algunas que participan en la cláusula. Considera, por ejemplo, este caso de una cláusula
para una cadena de bits . La cláusula solo puede cumplirse configurando los bits , y . El problema ahora pregunta si hay una cadena de bits que satisfaga todas las cláusulas o si no existe tal cadena. Este problema de decisión es el principal ejemplo de un problema que es completo.
El problema de optimización estrechamente relacionado pide encontrar la cadena de bits que satisface el número máximo de cláusulas en . Por supuesto, esto puede convertirse nuevamente en un problema de decisión si preguntamos dónde existe una cadena de bits que satisface más de de las cláusulas, que nuevamente es completo.
3. Algoritmos de optimización aproximada
Tanto los problemas considerados anteriormente como son en realidad problemas NP-difíciles (NP-hard) 3. De hecho, resulta que muchos problemas de optimización combinatoria son computacionalmente difíciles de resolver en general. A la luz de este hecho, no podemos esperar encontrar un algoritmo demostrablemente eficiente, es decir, un algoritmo con tiempo de ejecución polinomial en el tamaño del problema, que resuelva estos problemas. Esto también se aplica a los algoritmos cuánticos. Hay dos enfoques principales para tratar estos problemas. El primer enfoque son los algoritmos de aproximación que están garantizados para encontrar una solución de calidad específica en tiempo polinomial. El segundo enfoque son los algoritmos heurísticos que no tienen una garantía de tiempo de ejecución polinomial pero parecen funcionar bien en algunos casos de tales problemas.
Los algoritmos de optimización aproximada son eficientes y brindan una garantía comprobable de qué tan cerca está la solución aproximada del óptimo real del problema. La garantía generalmente se presenta en forma de una relación de aproximación, . Un algoritmo de optimización aproximada probabilística garantiza que produce una cadena de bits de modo que con alta probabilidad tenemos que con un {latex} C_\text{max} = \max_{\textbf{x}}C(\textbf{x}) positivo
Para el problema de existe un famoso algoritmo aproximado debido a Goemans y Williamson 2. Este algoritmo se basa en una relajación SDP del problema original combinada con una técnica de redondeo probabilístico que arroja una solución aproximada de alta probabilidad que tiene una relación de aproximación de . En realidad, se cree que esta relación de aproximación es óptima, por lo que no esperamos ver una mejora mediante el uso de un algoritmo cuántico.
4. El algoritmo QAOA
El algoritmo de optimización aproximada cuántica (Quantum Approximate Optimization Algorithm, QAOA) de Farhi, Goldstone y Gutmann 1 es un ejemplo de algoritmo heurístico. A diferencia del algoritmo de Goemans-Williamson, QAOA no viene con garantías de rendimiento. QAOA adopta el enfoque de los algoritmos aproximados clásicos y busca un análogo cuántico que también produzca una cadena de bits clásica que, con alta probabilidad, se espera que tenga una buena relación de aproximación . Antes de discutir los detalles, primero presentemos la idea general de este enfoque.
4.1 Descripción general:
Queremos encontrar un estado cuántico , que depende de unos parámetros reales , que tiene la propiedad de maximizar el valor esperado con respecto al Hamiltoniano del problema . Dado este estado de prueba, buscamos parámetros que maximicen {latex} F_p(\vec{\gamma},\vec{\beta}) = \langle \psi_p(\vec{\gamma},\vec{\beta})|H|\psi_p(\vec{\gamma},\vec{\beta})\rangle.
Una vez que tenemos dicho estado y los parámetros correspondientes, preparamos el estado en una computadora cuántica y medimos el estado en la base {latex} |x \rangle = |x_1,\ldots x_n \rangle para obtener un resultado aleatorio .
Veremos que este aleatorio va a ser una cadena de bits con alta probabilidad cercana al valor esperado {latex} M_p = F_p(\vec{\gamma}^*,\vec{\beta}^*). Por lo tanto, si está cerca de , también lo está .
4.2 Los componentes del algoritmo QAOA.
4.2.1 El estado de prueba de QAOA
El elemento central de QAOA es el estado de prueba que se preparará en la computadora cuántica. Idealmente, queremos que este estado dé lugar a un valor esperado grande {{latex} F_p(\vec{\gamma},\vec{\beta}) = \langle \psi_p(\vec{\gamma},\vec{\beta})|H|\psi_p(\vec{\gamma},\vec{\beta})\rangle con respecto al Hamiltoniano del problema . En Farhi 1, los estados de prueba se construyen a partir del Hamiltoniano del problema junto con rotaciones Pauli de un solo qubit. Eso significa que, dado un Hamiltoniano del problema
diagonal en la base computacional y un Hamiltoniano de campo transversal
el estado de prueba se prepara aplicando unitarias alternas
al estado del producto con .
Este ansatz en particular tiene la ventaja de que existe una elección explícita para los vectores tal que para {latex} M_p = F_p(\vec{\gamma}^*,\vec{\beta}^*) cuando tomamos el límite {latex} \lim_{p \rightarrow \infty} M_p = C_\text{max}. Esto sigue de ver el estado de prueba como el estado que sigue de la trotterización de la evolución adiabática con respecto a y el Hamiltoniano de campo transversal , cf. Ref 1.
Por el contrario, la desventaja de este estado de prueba es que normalmente se desearía un estado generado a partir de un circuito cuántico que no sea demasiado profundo. Aquí se mide la profundidad con respecto a las compuertas que se pueden aplicar directamente en el chip cuántico. De ahí que existan otras propuestas que sugieran utilizar el estado de prueba Ansatz que se adaptan más al Hardware del chip cuántico Ref. 4, Ref. 5.
4.2.2 Cálculo del valor esperado
Un componente importante de este enfoque es que tendremos que calcular o estimar el valor esperado
para que podamos optimizar los parámetros . Vamos a considerar dos escenarios aquí.
Evaluación clásica
Ten en cuenta que cuando el circuito a preparar no es demasiado profundo, puede ser posible evaluar el valor esperado clásicamente.
Esto sucede por ejemplo cuando se considera para grafos con grado acotado y se considera un circuito con . Veremos un ejemplo de esto en la implementación de Qiskit a continuación (sección 5.2) y proporcionaremos un ejercicio para calcular el valor esperado.
Para ilustrar la idea, recuerda que el Hamiltoniano se puede escribir como una suma de términos individuales {latex} H = \sum_{k = 1}^m \hat{C}_k. Debido a la linealidad del valor esperado, es suficiente considerar los valores esperados de los sumandos individuales. Para se tiene que
Observa que con {latex} B = \sum_{i = 1}^n X_i la unitaria es en realidad un producto de rotaciones de un solo qubit alrededor de con un ángulo para el cual escribiremos {latex} X(\beta)_k = \exp(i\beta X_k).
Todas las rotaciones individuales que no actúan en los qubits donde se admite conmutan con y, por lo tanto, se cancelan. Esto no aumenta el soporte del operador . Esto significa que el segundo conjunto de compuertas unitarias {latex} e^{ -i\gamma_1 H } = \prod_{l=1}^m U_l(\gamma) tiene un gran conjunto de compuertas {latex} U_l(\gamma) = e^{ -i\gamma_1 \hat{C}_l } que conmutan con el operador {latex} e^{ i\beta_1 B } \hat{C}_k e^{ -i\beta_1 B }. Las únicas compuertas {latex} U_l(\gamma) = e^{ -i\gamma_1 \hat{C}_l } que contribuyen al valor esperado son aquellas que involucran qubits en el soporte del original .
Por lo tanto, para la interacción de grado acotado, el soporte de {latex} e^{ i\gamma_1 H } e^{ i\beta_1 B } \hat{C}_k e^{ -i\beta_1 B } e^{ -i\gamma_1 H } solo se expande en una cantidad dada por el grado de interacción en y, por lo tanto, es independiente del tamaño del sistema. Esto significa que para estos subproblemas más pequeños, los valores esperados son independientes de y se pueden evaluar de forma clásica. El caso de un grado en general se considera en 1.
Esta es una observación general, lo que significa que si tenemos un problema en el que el circuito utilizado para la preparación del estado de prueba solo aumenta el soporte de cada término en el Hamiltoniano en una cantidad constante, la función de costo puede evaluarse directamente.
Cuando este es el caso, y solo se necesitan unos pocos parámetros en la preparación del estado de prueba, estos se pueden encontrar fácilmente mediante una simple búsqueda en cuadrícula. Además, se puede usar un valor óptimo exacto de para acotar la relación de aproximación
para obtener una estimación de . Para este caso el algoritmo QAOA tiene las mismas características que un algoritmo de optimización aproximada convencional que viene con una relación de aproximación garantizada que se puede obtener con eficiencia polinomial en el tamaño del problema.
Evaluación en una computadora cuántica
Cuando el circuito cuántico se vuelve demasiado profundo para ser evaluado de forma clásica, o cuando la conectividad del Hamiltoniano del problema es demasiado alta, podemos recurrir a otros medios para estimar el valor esperado. Esto implica estimar directamente en la computadora cuántica. El enfoque aquí sigue el camino de la estimación del valor esperado convencional como se usa en VQE 4, donde un estado de prueba se prepara directamente en la computadora cuántica y el valor esperado se obtiene del muestreo.
Dado que QAOA tiene un Hamiltoniano diagonal , en realidad es sencillo estimar el valor esperado. Solo necesitamos obtener muestras del estado de prueba en la base computacional. Recuerda que para que podamos obtener la estimación muestral de
mediante mediciones repetidas de un solo qubit del estado en la base . Por cada cadena de bits obtenida de la distribución evaluamos la función de costo y la promediamos sobre el número total de muestras. El promedio empírico resultante se aproxima al valor esperado hasta un error de muestreo aditivo que se encuentra dentro de la varianza del estado. La varianza se discutirá a continuación.
Con acceso al valor esperado, ahora podemos ejecutar un algoritmo de optimización clásico, como en 6, para optimizar .
Si bien este enfoque no conduce a una garantía de aproximación a priori para , el valor de la función optimizada se puede usar más tarde para proporcionar una estimación de la relación de aproximación .
4.3.3 Obtener una solución con una tasa de aproximación dada con alta probabilidad
El algoritmo es de naturaleza probabilística y produce cadenas de bits aleatorias a partir de la distribución . Entonces, ¿cómo podemos estar seguros de que muestrearemos una aproximación cercana al valor esperado optimizado ? Ten en cuenta que esta pregunta también es relevante para la estimación de en una computadora cuántica en primer lugar. Si las muestras extraídas de tienen demasiada varianza, se necesitan muchas muestras para determinar la media.
Dibujaremos una cadena de bits que está cerca de la media con alta probabilidad cuando la energía como variable tiene poca varianza.
Ten en cuenta que el número de términos en el Hamiltoniano {latex} H = \sum_{k=1}^m \hat{C}_k está limitado por . Digamos que cada sumando individual tiene una norma de operador que puede estar limitada por una constante universal para todo . Entonces considera
donde hemos usado que {latex} \langle \psi_p(\vec{\gamma},\vec{\beta})|\hat{C}_k \hat{C}_l |\psi_p(\vec{\gamma},\vec{\beta})\rangle \leq \tilde{C}^2.
Esto significa que la varianza de cualquier valor esperado está limitada por . Por lo tanto, esto se aplica en particular a . Además, si solo crece polinomialmente en el número de qubits , sabemos que tomando un número creciente polinomial de muestras de será suficiente para obtener un que conduce a un que estará cerca de .
5. Problemas
El algoritmo QAOA produce una cadena de bits, ¿es esta cadena la solución óptima para este grafo? Compara los resultados experimentales del chip superconductor con los resultados de la simulación QASM local.
Hemos calculado la función de costo analíticamente en la sección 5.2. Verifica los pasos y calcula así como .
Hemos dado una expresión exacta para en la implementación de Qiskit.
Escribe una rutina para estimar el valor esperado a partir de las muestras obtenidas en el resultado (pista: usa la función cost_function_C(x,G) de la sección 5.4 y la evaluación de los datos en ambas secciones 5.a / 5.b)
Utiliza una rutina de optimización, por ejemplo, SPSA del ejemplo de VQE en este tutorial, para optimizar los parámetros en la muestreada numéricamente. ¿Encuentras los mismos valores para ?
El circuito de Prueba en la sección 5.3 corresponde a la profundidad y estaba destinado directamente a ser compatible con el Hardware.
Usa la rutina del ejercicio 2 para evaluar las funciones de costo para . ¿Qué esperas ver en el Hardware real?
Generaliza esta clase de estado de prueba a otras funciones de onda candidatas, como el ansatz eficiente en Hardware de la Ref. 4.
Considera un ejemplo de como se describe en la sección de ejemplos y modifica la función cost_function_C(c,G) de la sección 5.4 que usaste para calcular en consecuencia. Ejecuta el algoritmo QAOA para esta instancia de usando el algoritmo eficiente en Hardware y analiza los resultados.
Referencias
Farhi, Edward, Jeffrey Goldstone, and Sam Gutmann. "A quantum approximate optimization algorithm." arXiv preprint arXiv:1411.4028 (2014).
Goemans, Michel X., and David P. Williamson. Journal of the ACM (JACM) 42.6 (1995): 1115-1145.
Garey, Michael R.; David S. Johnson (1979). Computers and Intractability: A Guide to the Theory of NP-Completeness. W. H. Freeman. ISBN 0-7167-1045-5
Kandala, Abhinav, et al. "Hardware-efficient variational quantum eigensolver for small molecules and quantum magnets." Nature 549.7671 (2017): 242.
Farhi, Edward, et al. "Quantum algorithms for fixed qubit architectures." arXiv preprint arXiv:1703.06199 (2017).
Spall, J. C. (1992), IEEE Transactions on Automatic Control, vol. 37(3), pp. 332–341.
Michael Streif and Martin Leib "Training the quantum approximate optimization algorithm without access to a quantum processing unit" (2020) Quantum Sci. Technol. 5 034008