QAOA у масштабі корисності
Перегляньте відео про QAOA у масштабі корисності від Олівії Лейнс або відкрийте відео в окремому вікні на YouTube.
Огляд уроку
До цього моменту в курсі ми сподіваємося надали тобі міцну основу фреймворку та інструментів для вирішення задач у масштабі корисності на квантовому комп'ютері. Тепер настав час побачити ці інструменти в дії.
У цьому уроці ми «забруднимо руки» із масштабним прикладом задачі Max-Cut — знаменитої задачі теорії графів про оптимальне розбиття графа на дві частини. Почнемо з простого графа з п'ятьма вузлами, щоб сформувати інтуїцію щодо того, як квантовий комп'ютер може допомогти вирішити задачу, а потім перейдемо до масштабної версії.
Цей урок дає широкий огляд підходу. Це не покрокове пояснення коду. Проте разом із уроком є туторіал із реальним кодом, який ти можеш запустити, щоб розв'язати Max-Cut на квантовому комп'ютері.
Задача
Нагадаємо: не всі обчислювальні задачі підходять для квантових обчислень. «Легкі задачі» не отримають жодних переваг від цієї технології, оскільки класичні комп'ютери і так їх чудово розв'язують.
Три сфери застосування, щодо яких ми найбільш оптимістичні:
- симуляція природи
- обробка даних зі складною структурою
- оптимізація
Сьогодні ми зосередимося на третій — оптимізації. В задачі оптимізації, як правило, шукають найбільше або найменше значення певної функції. Складність знаходження цих екстремумів класичними методами може зростати експоненційно зі зростанням розміру задачі.
Задача оптимізації, що нас цікавить, — Max-Cut, яку ми будемо розв'язувати за допомогою алгоритму Quantum Approximate Optimization Algorithm (QAOA).
Що таке Max-Cut?
Маємо граф — множину вершин (вузлів), деякі з яких з'єднані ребрами. У задачі потрібно розбити вузли на дві підмножини, «розрізаючи» ребра між ними. Мета — знайти розбиття, що максимізує кількість розрізаних ре бер — звідси назва «Max-Cut».

Наприклад, на малюнку вище показано граф з п'ятьма вузлами та рішенням Max-Cut праворуч. Розрізано п'ять ребер — максимально можливе для цього графа.
Оскільки граф із п'ятьма вузлами дуже малий, рішення нескладно знайти в голові або перебравши варіанти на папері. Але зі зростанням числа вершин задача стає дедалі складнішою — зокрема, кількість можливих розрізів зростає експоненційно. А в певний момент це стає важким навіть для суперкомп'ютерів.
Хотілося б вирішувати Max-Cut для більших, складніших графів, адже задача має багато практичних застосувань: виявлення шахрайства у фінансах, кластеризація графів, проектування мереж, аналіз соціальних медіа. Max-Cut часто зустрічається як підзадача в більших задачах, тому є значно поширенішою, ніж може здатися.
Рішення
Розглянемо підхід до розв'язання Max-Cut на квантовому комп'ютері. Робитимемо це на простому графі з п'ятьма вузлами. Можна слідкувати за ходом у туторіалі з кодом Python. Після простого прикладу туторіал проведе тебе через масштабну версію задачі.
Перший крок — створити граф, задавши кількість вузлів та ребра. Це можна зробити, імпортувавши пакет rustworkx, як показано в туторіалі. Результат буде виглядати так:
Для пошуку рішень Max-Cut ми використаємо фреймворк Qiskit patterns.
Відображення
Потрібно відобразити задачу на квантовий комп'ютер. Для цього зауважимо, що максимізацію кількості розрізів у графі можна математично записати як:
де і — вузли графа, і — 0 або 1 залежно від того, на якому боці розбиття знаходиться вузол. Коли і на одному боці, вираз у сумі рівний нулю. Коли на різних — рівний одиниці. Тому максимізація кількості розрізів максимізує суму.
Можна також перевернути задачу і шукати мінімум, помноживши значення на мінус один:
Тепер можна приступати до відображення. Переходити від графа до квантової схеми може бути лячно. Але ми робитимемо це крок за кроком.
Пам'ятай: ми розв'язуємо Max-Cut за допомогою QAOA. У методології QAOA нам потрібен оператор (Гамільтоніан) для представлення функції витрат гібридного алгоритму, а також параметризована схема (ансатц) для представлення можливих рішень.
QUBO
Ми вибираємо з цих кандидатів рішень і оцінюємо їх за функцією витрат. Для цього використаємо серію математичних переформулювань, зокрема нотацію квадратичної незалежної бінарної оптимізації (QUBO) — зручний спосіб кодування задач комбінаторної оптимізації. У QUBO шукаємо:
де — матриця розміром з речовими числами, — кількість вузлів графа (тут п'ять).
Для застосування QAOA потрібно сформулювати задачу як Гамільтоніан — функцію або матрицю, що представляє повну енергію системи. Нам потрібен Гамільтоніан функції витрат, основний стан якого відповідає мінімуму функції. Тому для вирішення задачі оптимізації ми намагатимемося підготувати основний стан на квантовому комп'ютері. Вибірка з цього стану з високою ймовірністю дасть рішення .
Відображення на Гамільтоніан функції витрат
Виявляється, задача QUBO тісно пов'язана (і фактично обчислювально еквівалентна) одному з найвідоміших і найпоширеніших Гамільтоніанів фізики: Гамільтоніану Ізінга.
Щоб записати задачу QUBO як Гамільтоніан Ізінга, достатньо простої зміни змінних:
Усі кроки описані в прикладеному блокноті. Підсумок: мінімізація QUBO еквівалентна мінімізації:
Переписавши ще раз, отримуємо Гамільтоніан функції витрат, де мінімум відповідає основному стану, Z — оператор Паулі Z, — речовий скалярний коефіцієнт:
Маючи Гамільтоніан, переписуємо його через двокальні оператори Паулі ZZ, що легко перетворюються на двокубітні гейти. Отримаємо шість об'єктів — рядків Паулі, — кожен відповідає одному з шести ребер графа. Кожен із п'яти елементів рядка представляє операцію на вузлі: тотожність, якщо вузол не зв'язаний із цим ребром, і Паулі Z, якщо зв'язаний. У Qiskit рядки кубітів індексуються у зворотному порядку. Наприклад, ребро між вузлами 0 і 1 кодується як IIIZZ, а між 2 і 4 — як ZIZII.