Przejdź do głównej treści

Klasyczne optymalizatory

Czym jest optymalizator?​

Victoria Lipinska opowiada o klasycznych optymalizatorach i o tym, jak działają jako część VQE.

Dowiesz się o kilku przykładowych optymalizatorach i o tym, jak radzą sobie w obecności szumu i bez niego.

Odniesienia​

Poniższe artykuły są przywoływane w powyższym filmie.

Kodowanie klasycznego optymalizatora​

W poprzednich lekcjach nauczyłeś(-aś) się tworzyć Hamiltonian nadający się do użycia na komputerze kwantowym oraz jak tworzyć obwód wariacyjny. Dowiedziałeś(-aś) się też, że obwód wariacyjny (czyli ansatz) zawiera parametry do zmiany, a optymalny dobór parametrów to taki, który daje najniższą możliwą funkcję kosztu lub energię. Nasz problem sprowadza się zatem do przeszukania przestrzeni parametrów w celu znalezienia optymalnego zestawu. Większość pracy związanej z klasycznymi optymalizatorami została już za nas wykonana — doskonałe optymalizatory są dostępne z kilku źródeł.

W tej lekcji dowiesz się:

  • Jak klasyczne optymalizatory wpisują się w obliczenia VQE
  • Jakie klasyczne optymalizatory są dostępne w SciPy
  • Jakich optymalizatorów nie ma jeszcze w SciPy i jak je w międzyczasie uzupełnić za pomocą qiskit.algorithms
  • Jakie opcje są dostępne dla tych optymalizatorów i jakie mają znaczenie dla obliczeń kwantowych

SciPy to darmowa biblioteka Pythona o otwartym kodzie źródłowym, zawierająca pakiety przydatne w wielu dziedzinach obliczeń naukowych, w tym optymalizacji. W szczególności SciPy posiada pakiet optymalizacyjny zawierający funkcję 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)

Poniżej pokazano przykładowy kod. Ograniczymy naszą dyskusję tutaj do dwóch ostatnich argumentów.

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

SciPy posiada dokumentację wszystkich dostępnych metod minimalizacji. Oto kilka godnych uwagi przykładów, z których wszystkie są metodami minimalizacji funkcji skalarnej jednej lub więcej zmiennych:

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

Większość dostępnych klasycznych algorytmów optymalizacji to minimalizatory lokalne, ponieważ używają różnych metod do znajdowania minimów lokalnych, ale nie gwarantują znalezienia minimów globalnych. Niektóre klasyczne optymalizatory jawnie szacują gradienty i wykorzystują je do znalezienia minimów lokalnych. Inne mogą używać kolejnych przybliżeń liniowych lub kwadratowych funkcji celu w celu znalezienia minimów.

Te algorytmy mają kilka wspólnych opcji, ale z subtelnymi różnicami. Na przykład wszystkie mają opcję określenia maksymalnej liczby iteracji za pomocą zapisu 'maxiter': 200 powyżej. Wszystkie mają jakąś opcję określającą inne kryterium zatrzymania oparte na wartościach funkcji lub zmiennych, choć te kryteria różnią się nieco w zależności od algorytmu. COBYLA, na przykład, pozwala określić tolerancję (na przykład 'tol': 0.0001), która jest dolną granicą „regionu zaufania”. Dla porównania, SLSQP pozwala określić cel dotyczący precyzji funkcji używanej w kryterium zatrzymania ('ftol'). Nelder-Mead pozwala określić tolerancję różnicy między kolejnymi przypuszczeniami parametrów (xx) (xatol) lub tolerancję różnicy między kolejnymi wartościami uzyskanymi dla funkcji kosztu f(x)f(x) (fatol) (lub obie). Pełną listę dostępnych algorytmów i opcji można znaleźć w dokumentacji minimalizacji SciPy.