Iskay Quantum Optimizer — функція Qiskit від Kipu Quantum
See the API reference
- Qiskit Functions — це експериментальна функція, доступна лише для користувачів IBM Quantum® Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API) Plan. Вони перебувають у статусі попереднього випуску та можуть змінюватися.
Огляд
За допомогою Iskay Quantum Optimizer від Kipu Quantum ти можеш розв'язувати складні задачі оптимізації на квантових комп'ютерах IBM®. Цей розв'язувач використовує передовий алгоритм bf-DCQO від Kipu, якому потрібна лише цільова функція як вхідні дані для автоматичного отримання розв'язків задач. Він може обробляти задачі оптимізації з кількістю кубітів до 156, що дозволяє використовувати всі кубіти квантових пристроїв IBM. Оптимізатор використовує відображення 1-до-1 між класичними змінними та кубітами, що дозволяє тобі розв'язувати задачі оптимізації з кількістю бінарних змінних до 156.
Оптимізатор дає змогу розв'язувати задачі безумовної бінарної оптимізації. На додаток до широко використовуваного формулювання QUBO (квадратична безумовна бінарна оптимізація), він також підтримує задачі вищого порядку (HUBO). Розв'язувач використовує неваріаційний квантовий алгоритм, виконуючи більшу частину обчислень на квантових пристроях.
Далі наведено докладніші відомості про використовуваний алгоритм і короткий посібник із використання функції, а також результати тестування на різних екземплярах задач різних розмірів і складності.
Опис
Оптимізатор — це готова до використання реалізація передових алгоритмів квантової оптимізації. Він розв'язує задачі оптимізації, запускаючи сильно стиснені квантові схеми на квантовому апаратному забезпеченні. Це стиснення досягається шляхом введення контрдіабатичних членів в основну еволюцію квантової системи з часом. Алгоритм виконує кілька ітерацій запусків на апаратному забезпеченні для отримання кінцевих розв'язків і поєднує їх із постобробкою. Ці кроки безперешкодно інтегровані в робочий процес Оптимізатора та виконуються автоматично.
Як працює Квантовий Оптимізатор?
У цьому розділі описано основи реалізованого алгоритму bf-DCQO. Введення в алгоритм також можна знайти на каналі Qiskit YouTube.
Алгоритм базується на часовій еволюції квантової системи, яка трансформується з часом, де розв'язок задачі закодовано в основному стані квантової системи наприкінці еволюції. Згідно з адіабатичною теоремою, ця еволюція має бути повільною, щоб гарантувати перебування системи в основному стані. Дигіталізація цієї еволюції є основою дигіталізованих квантових адіабатичних обчислень (DQA) та сумнозвісного алгоритму QAOA. Однак необхідна повільна еволюція непрактична для зростаючих розмірів задач, оскільки призводить до збільшення глибини схеми. Використовуючи контрдіабатичні протоколи, можна придушити небажані збудження, що виникають під час коротких часів еволюції, залишаючись при цьому в основному стані. Тут дигіталізація цього коротшого часу еволюції призводить до квантових схем меншої глибини з меншою кількістю заплутуючих вентилів.
Схеми алгоритмів bf-DCQO зазвичай використовують до десяти разів менше заплутуючих вентилів, ніж DQA, і в три-чотири рази менше заплутуючих вентилів, ніж стандартні реалізації QAOA. Завдяки меншій кількості вентилів під час виконання схеми на апаратному забезпеченні виникає менше помилок. Тому оптимізатор не потребує використання таких методів, як придушення або пом'якшення помилок. Реалізація цих методів у майбутніх версіях може ще більше підвищити якість розв'язку.
Хоча алгоритм bf-DCQO використов ує ітерації, він є неваріаційним. Після кожної ітерації алгоритму вимірюється розподіл станів. Отриманий розподіл використовується для обчислення так званого поля зміщення (bias-field). Поле зміщення дозволяє починати наступну ітерацію зі стану енергії поблизу попередньо знайденого розв'язку. Таким чином алгоритм з кожною ітерацією переходить до розв'язків із нижчою енергією. Як правило, приблизно десяти ітерацій достатньо для збіжності до розв'язку, а загальна кількість необхідних ітерацій значно менша, ніж у варіаційних алгоритмів, і становить порядку приблизно 100 ітерацій.
Оптимізатор поєднує алгоритм bf-DCQO з класичною постобробкою. Після вимірювання розподілу станів виконується локальний пошук. Під час локального пошуку біти виміряного розв'язку випадковим чином перевертаються. Після перевертання оцінюється енергія нового бітового рядка. Якщо енергія нижча, бітовий рядок зберігається як новий розв'язок. Локальний пошук масштабується лише лінійно з кількістю кубітів, тому він є обчислювально дешевим. Оскільки постобробка виправляє локальні перевертання бітів, вона компенсує помилки перевертання бітів, які часто є наслідком недосконалості апаратного забезпечення та помилок зчитування.
Робочий процес
Нижче наведено схему робочого процесу Квантового Оптимізатора.
Використовуючи Квантовий Оптимізатор, розв'язання задачі оптимізації на квантовому апаратному забезпеченні можна звести до:
- Формулювання цільової функції задачі
- Отримання доступу до Оптимізатора через Qiskit Functions
- Запуску Оптимізатора та збору результатів
Тести продуктивності
Наведені нижче показники тестування демонструють, що Оптимізатор ефективно вирішує задачі з кількістю кубітів до 156, і дають загальний огляд точності та масштабованості оптимізатора для різних типів задач. Зверни увагу, що фактичні показники продуктивності можуть відрізнятися залежно від конкретних характеристик задачі, таких як кількість змінних, щільність і локальність членів цільової функції та порядок полінома.
Наступна таблиця включає коефіцієнт апроксимації (AR) — метрику, що визначається таким чином:
де — цільова функція, , — її мінімальне та максимальне значення, а — вартість найкращого знайденого розв'язку відповідно. Таким чином, AR=100% означає, що було отримано основний стан задачі.
| Приклад | Кількість кубітів | Коефіцієнт апроксимації | Загальний час (с) | Використання середовища виконання (с) | Загальна кількість вимірювань | Кількість ітерацій |
|---|---|---|---|---|---|---|
| Unweighted MaxCut | 28 | 100% | 180 | 30 | 30k | 5 |
| Unweighted MaxCut | 30 | 100% | 180 | 30 | 30k | 5 |
| Unweighted MaxCut | 32 | 100% | 180 | 30 | 30k | 5 |
| Unweighted MaxCut | 80 | 100% | 480 | 60 | 90k | 9 |
| Unweighted MaxCut | 100 | 100% | 330 | 60 | 60k | 6 |
| Unweighted MaxCut | 120 | 100% | 370 | 60 | 60k | 6 |
| HUBO 1 | 156 | 100% | 600 | 70 | 100k | 10 |
| HUBO 2 | 156 | 100% | 600 | 70 | 100k | 10 |
- Екземпляри MaxCut із 28, 30 та 32 кубітами запускалися на ibm_sherbrooke. Екземпляри з 80, 100 та 120 кубітами запускалися на процесорі Heron r2.
- Екземпляри HUBO також запускалися на процесорі Heron r2.
Усі еталонні екземпляри доступні на GitHub (див. Kipu benchmark instances). Приклад запуску цих екземплярів можна знайти в Приклад 3: Еталонні екземпляри.
Початок роботи
У цій документації ми пройдемо кроки використання Iskay Quantum Optimizer. У процесі ми швидко покажемо, як завантажити функцію з каталогу і як перетворити задачу на коректний вхід, демонструючи при цьому, як можна експериментувати з різними необов'язковими параметрами.
Для більш детального прикладу ознайомся з навчальним посібником Розв'язання задачі поділу ринку за допомогою Iskay Quantum Optimizer від Kipu Quantum, де ми проходимо через весь процес використання Iskay Solver для розв'язання задачі поділу ринку, яка представляє реальну задачу розподілу ресурсів, де ринки потрібно розбити на збалансовані регіони продажів для досягнення точних цільових показників попиту.
Автентифікуйся за допомогою свого API-ключа, який можна знайти на інформаційній панелі IBM Quantum Platform, і вибери ф ункцію Qiskit таким чином:
# Added by doQumentation — required packages for this notebook
!pip install -q PyGithub networkx qiskit-ibm-catalog
# ruff: noqa: F821
Наступний код передбачає, що ти зберіг свої облікові дані. Якщо ні, дотримуйся інструкцій у розділі збережи свій обліковий запис IBM Cloud для автентифікації за допомогою API-ключа.
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(
channel="ibm_quantum_platform",
instance="INSTANCE_CRN",
token="YOUR_API_KEY", # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard
)
# Access Function
optimizer = catalog.load("kipu-quantum/iskay-quantum-optimizer")
Власний приклад конфігурації
Ось як можна налаштувати Iskay з різними параметрами:
custom_options = {
"shots": 15_000, # Higher shot count for better statistics
"num_iterations": 12, # More iterations for solution refinement
"preprocessing_level": 1, # Light preprocessing for problem simplification
"postprocessing_level": 2, # Maximum postprocessing for solution quality
"transpilation_level": 3, # Using higher transpilation level for circuit optimization
"seed_transpiler": 42, # Fixed seed for reproducible results
"job_tags": ["custom_config"], # Custom tracking tags
}
Оптимізація seed: Зверни увагу, що seed_transpiler за замовчуванням встановлено в None. Це вмикає автоматичний процес оптимізації Transpiler. Якщо значення None, система розпочне спробу з кількома seed-значеннями та вибере те, що дає найменшу глибину схеми, використовуючи всю потужність параметра max_trials для кожного рівня транспіляції.
Продуктивність рівнів транспіляції: Збільшення кількості max_trials з вищими значеннями transpilation_level неминуче збільшить час транспіляції, але не завжди змінюватиме кінцеву схему — це значною мірою залежить від конкретної структури та складності схеми. Однак для деяких схем/задач різниця між 10 спробами (рівень 1) та 50 спробами (рівень 5) може бути разючою, тому дослідження цих параметрів може бути ключем до успішного знаходження розв'язку.