Saltar al contenido principal

Optimizadores clásicos

¿Qué es un optimizador?

Victoria Lipinska explica los optimizadores clásicos y su función como parte de VQE.

Aprenderás sobre algunos optimizadores de ejemplo y cómo se comportan en presencia y ausencia de ruido.

Referencias

Los siguientes artículos se mencionan en el video anterior.

Programar un optimizador clásico

En las lecciones anteriores aprendiste a crear un hamiltoniano adecuado para su uso en un computador cuántico y cómo construir un circuito variacional. También aprendiste que el circuito variacional (o ansatz) contiene parámetros que se varían, y que la elección óptima de parámetros es aquella que produce la función de costo o energía más baja posible. Nuestro problema se reduce entonces a buscar en el espacio de parámetros el conjunto óptimo. La mayor parte del trabajo con optimizadores clásicos ya ha sido realizada por otros, ya que existen excelentes optimizadores disponibles de diversas fuentes.

En esta lección aprenderás:

  • Cómo se integran los optimizadores clásicos en un cálculo VQE
  • Qué optimizadores clásicos están disponibles a través de SciPy
  • Qué optimizadores aún no están disponibles a través de SciPy y cómo complementarlos de forma transitoria con qiskit.algorithms
  • Qué opciones están disponibles para estos optimizadores y qué significan para la computación cuántica

SciPy es una biblioteca de Python gratuita y de código abierto con paquetes para muchas áreas de la computación científica, incluyendo optimización. En particular, SciPy contiene un paquete de optimización con minimize:

from scipy.optimize import minimize Esta función minimize tiene varios argumentos, pero los más relevantes para la química cuántica son:

  • La función de costo (cost_func). Está relacionada con el hamiltoniano, pero también incluye algunas complejidades, como la determinación del valor esperado mediante Estimator y, en el caso de cálculos de estados excitados, podría incluir condiciones de ortogonalidad.
  • Un estado inicial (x0) para el sistema, a menudo el estado de Hartree-Fock
  • Otros argumentos, incluidos los argumentos de la propia función de costo
  • El método configurado con el optimizador clásico que selecciones
  • Las opciones del optimizador clásico (que no deben confundirse con las opciones de Session discutidas en la siguiente sección)

A continuación se muestra un ejemplo de código. Aquí restringimos nuestra discusión a los dos últimos argumentos.

    cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})

SciPy contiene documentación sobre todos los métodos de minimize disponibles. Aquí hay algunos ejemplos destacados, todos los cuales son métodos para minimizar una función escalar de una o más variables:

  • cobyla: Algoritmo COBYLA (Optimization BY Linear Approximation).
  • slsqp: Sequential Least Squares Programming (SLSQP).
  • nelder-mead: Algoritmo de Nelder-Mead.

La mayoría de los algoritmos de optimización clásica disponibles son minimizadores locales: buscan mínimos locales con diversos métodos, sin garantizar encontrar el mínimo global. Algunos optimizadores clásicos estiman gradientes explícitamente y los utilizan para encontrar mínimos locales. Otros utilizan aproximaciones lineales o cuadráticas sucesivas de la función objetivo para la minimización.

Estos algoritmos tienen varias opciones en común, pero con diferencias sutiles. Todos permiten, por ejemplo, especificar un número máximo de iteraciones con la notación 'maxiter': 200 anterior. Todos tienen una opción para establecer otro criterio de terminación basado en valores de la función o de las variables, aunque estos criterios difieren ligeramente según el algoritmo. COBYLA permite, por ejemplo, especificar una tolerancia (por ejemplo, 'tol': 0.0001), que representa el límite inferior de una "región de confianza". En comparación, SLSQP permite establecer un objetivo de precisión para la función utilizada en el criterio de terminación ('ftol'). Nelder-Mead permite especificar una tolerancia para la diferencia entre estimaciones sucesivas de parámetros (xx) (xatol) o una tolerancia para la diferencia entre valores sucesivos de la función de costo f(x)f(x) (fatol) — o ambos. Una lista completa de los algoritmos y opciones disponibles se puede encontrar en la documentación de SciPy minimize.