Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

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 This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:

  • The cost function (cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions.
  • An initial state (x0) for the system, often the Hartree Fock state
  • Other arguments, including arguments of the cost function itself
  • The method set to the classical optimizer you select
  • Options for the classical optimizer (not to be confused with Session options discussed in the next section)

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

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

SciPy tiene documentación sobre todos los métodos de minimización 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 de optimización por aproximación lineal (COBYLA, Constrained Optimization BY Linear Approximations).
  • slsqp: Programación Secuencial de Mínimos Cuadrados (SLSQP).
  • nelder-mead algoritmo de Nelder-Mead.

La mayoría de los algoritmos de optimización clásicos disponibles son minimizadores locales, en el sentido de que usan varios métodos para encontrar mínimos locales, pero no garantizan encontrar mínimos globales. Algunos optimizadores clásicos estiman explícitamente gradientes y los usan para hallar mínimos locales. Otros pueden usar aproximaciones lineales o cuadráticas sucesivas de la función objetivo para encontrar mínimos.

Estos algoritmos tienen varias opciones en común, pero con diferencias sutiles. Por ejemplo, todos tienen la opción de especificar un número máximo de iteraciones usando la notación 'maxiter': 200 de arriba. Todos tienen alguna opción que especifica un criterio de parada diferente basado en los valores de la función o las variables, aunque estos criterios son ligeramente diferentes para distintos algoritmos. COBYLA, por ejemplo, te permite especificar una tolerancia (por ejemplo, 'tol': 0.0001) que es el límite inferior de una "región de confianza". En comparación, SLSQP te permite fijar la precisión objetivo del valor de la función que se usa en el criterio de parada ('ftol'). Nelder-Mead te permite especificar una tolerancia en la diferencia entre estimaciones sucesivas de parámetros (xx) (xatol) o una tolerancia en la diferencia entre valores sucesivos obtenidos para la función de costo f(x)f(x) (fatol) (o ambas). Para una lista completa de algoritmos y opciones disponibles, visita la documentación de minimize de SciPy.