Перейти до основного вмісту

Класичні оптимізатори

Що таке оптимізатор?

Вікторія Ліпінська розповідає про класичні оптимізатори та їхню роль у VQE.

Ти дізнаєшся про кілька прикладів оптимізаторів і про те, як вони поводяться за наявності та відсутності шуму.

Посилання

Наступні статті цитуються у відео вище.

Програмування класичного оптимізатора

У попередніх уроках ти навчився будувати гамільтоніан, придатний для квантового комп'ютера, і створювати варіаційну схему. Ти також дізнався, що варіаційна схема (або анзац) містить параметри, які потрібно варіювати, а оптимальний вибір параметрів — той, що дає найнижчу можливу цільову функцію або енергію. Таким чином, задача зводиться до пошуку в просторі параметрів оптимального набору. Більшу частину роботи з класичними оптимізаторами вже зроблено за нас: відмінні оптимізатори доступні з кількох джерел.

У цьому уроці ти дізнаєшся:

  • Як класичні оптимізатори вписуються в розрахунок VQE
  • Які класичні оптимізатори доступні в SciPy
  • Які оптимізатори ще недоступні через SciPy і як тимчасово доповнити їх за допомогою qiskit.algorithms
  • Які параметри доступні для цих оптимізаторів і що вони означають з точки зору квантових обчислень

SciPy — це безкоштовна бібліотека Python з відкритим кодом, що містить пакети для різних областей наукових обчислень, зокрема оптимізації. Зокрема, SciPy має пакет оптимізації, що включає 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)

Some example code is shown below. We restrict our discussion here to the last two arguments.

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

SciPy містить документацію з усіма доступними методами minimize. Ось кілька прикладів, що заслуговують уваги — усі вони є методами мінімізації скалярної функції однієї або кількох змінних:

  • cobyla: алгоритм оптимізації лінійними апроксимаціями (COBYLA).
  • slsqp: послідовне квадратичне програмування методом найменших квадратів (SLSQP).
  • nelder-mead: алгоритм Нелдера–Міда.

Більшість доступних алгоритмів класичної оптимізації є локальними мінімізаторами: вони різними способами знаходять локальні мінімуми, але не гарантують знаходження глобального мінімуму. Деякі класичні оптимізатори явно оцінюють градієнти і використовують їх для пошуку локальних мінімумів. Інші можуть використовувати послідовні лінійні або квадратичні апроксимації цільової функції.

Ці алгоритми мають кілька спільних параметрів, але з тонкими відмінностями. Наприклад, усі вони мають параметр для задання максимальної кількості ітерацій через нотацію 'maxiter': 200 з прикладу вище. Усі мають якийсь параметр для задання іншого критерію зупинки на основі значень функції або змінних, хоча ці критерії дещо відрізняються для різних алгоритмів. COBYLA, наприклад, дозволяє задати допуск (наприклад, 'tol': 0.0001), що є нижньою межею «довіреного регіону». SLSQP дозволяє задати точність функції, що використовується в критерії зупинки ('ftol'). Nelder-Mead дозволяє задати допуск на різницю між послідовними вгадуваннями параметра (xx) (xatol) або допуск на різницю між послідовними значеннями цільової функції f(x)f(x) (fatol) (або обидва). Повний список доступних алгоритмів та параметрів можна знайти в документації SciPy для minimize.