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 Funkcja minimize ma kilka argumentów, ale najbardziej istotne dla chemii kwantowej są:

  • Funkcja kosztu (cost_func). Jest powiązana z hamiltonianem, ale obejmuje też dodatkowe elementy, takie jak wyznaczanie wartości oczekiwanej przy użyciu Estimatora, a w przypadku obliczeń stanów wzbudzonych może zawierać warunki ortogonalności.
  • Stan początkowy (x0) układu, często stan Hartree-Focka
  • Pozostałe argumenty, w tym argumenty samej funkcji kosztu
  • Parametr method ustawiony na wybrany klasyczny optymalizator
  • Opcje dla klasycznego optymalizatora (nie mylić z opcjami Session omówionymi w następnym rozdziale)

Poniżej znajduje się przykładowy kod. Ograniczamy się tutaj do dwóch ostatnich argumentów.

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

SciPy zawiera dokumentację wszystkich dostępnych metod minimize. Oto kilka godnych uwagi przykładów — wszystkie są metodami minimalizacji skalarnej funkcji jednej lub więcej zmiennych:

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

Większość dostępnych klasycznych algorytmów optymalizacyjnych to minimalizatory lokalne — używają różnych metod do znajdowania minimów lokalnych, ale nie gwarantują znalezienia minimów globalnych. Niektóre klasyczne optymalizatory wprost szacują gradienty i wykorzystują je do znajdowania minimów lokalnych. Inne mogą korzystać z kolejnych liniowych lub kwadratowych aproksymacji funkcji celu do znajdowania minimów.

Algorytmy te mają kilka wspólnych opcji, lecz z subtelnymi różnicami. Na przykład wszystkie pozwalają określić maksymalną liczbę iteracji za pomocą notacji 'maxiter': 200 z powyższego przykładu. Wszystkie mają też pewną opcję określającą inne kryterium zatrzymania oparte na wartościach funkcji lub zmiennych, choć kryteria te są nieco różne dla różnych algorytmów. COBYLA pozwala na przykład określić tolerancję (np. 'tol': 0.0001) stanowiącą dolną granicę „obszaru zaufania". SLSQP natomiast umożliwia określenie celu w precyzji funkcji używanej w kryterium zatrzymania (ftol). Nelder-Mead pozwala określić tolerancję różnicy między kolejnymi zgadywanymi wartościami parametrów (xx) (xatol) lub tolerancję różnicy między kolejnymi wartościami funkcji kosztu f(x)f(x) (fatol) (albo obydwie). Pełna lista dostępnych algorytmów i opcji znajduje się w dokumentacji SciPy minimize.