Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

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

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

Вікторія Ліпінська розповідає про класичні оптимізатори та їхню роль у 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)

Нижче наведено приклад коду. Тут ми обмежимо наше обговорення двома останніми аргументами.

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.