Parity Twine Optimizer: функція Qiskit від ParityQC
Див. довідник API
Qiskit Functions — це експериментальна можливість, доступна лише користувачам IBM Quantum® Premium Plan, Flex Plan та On-Prem (через IBM Quantum Platform API) Plan. Вони мають статус попереднього релізу (preview) і можуть змінюватися.
Огляд
Parity Twine Optimizer дає змогу користувачам розв'язувати задачі оптимізації на квантових комп'ютерах за допомогою методу Parity Twine. Цей підхід, побудований на архітектурі Parity, використовує компілятор ParityQC для мінімізації кількості вентилів і глибини схеми, необхідних для виконання квантового алгоритму, з урахуванням зв'язності пристрою.
Таке зменшення обсягу ресурсів дає змогу розв'язувати актуальні для галузі задачі оптимізації такого розміру, який є нездійсненним за допомогою стандартних методів транспіляції з великою кількістю SWAP-вентилів. Parity Twine Optimizer автоматизує етапи транспіляції та може використовуватися з мінімальним втручанням користувача.
Підхід Parity Twine перевершує всі інші методи компіляції за зменшенням кількості вентилів і глибини схем для таких квантових алгоритмів, як алгоритм квантової наближеної оптимізації (QAOA) та квантове перетворення Фур'є (QFT). Завдяки абстрагуванню квантової інформації від фізичних кубітів нелокальні взаємодії реалізуються без SWAP-вентилів. Натомість ланцюжки Parity Twine (послідовності вентилів CNOT) систематично розподіляють логічну інформацію про парність між кубітами.
Оптимізатор використовує QAOA для мінімізації енергії заданої функції вартості. QAOA — це гібридний квантово-класичний варіаційний алгоритм, розроблений для розв'язання задач комбінаторної оптимізації шляхом наближення основного стану гамільтоніана вартості (). Доданок змішування () спричиняє переходи між станами для дослідження простору розв'язків. Почергова послідовність цих доданків, керована параметрами і , визначає унітарний оператор , який діє на початковий стан.
Кодування унітарного оператора задачі, exp(), потребує кодування всіх логічних -тільних операторів обертання (exp()). Цього можна досягти за допомогою -тільних генераторів (мереж Parity Twine), які зменшують глибину схеми QAOA та кількість двокубітних вентилів.
Опис
Вхідними даними Parity Twine Optimizer є задача оптимізації, назва обраного апаратного забезпечення IBM Quantum, а також додаткові необов'язкові аргументи для налаштування параметрів транспіляції та виконання на апаратному забезпеченні. Функція оптимізатора передає визначення задачі компілятору Parity Twine. Рисунок 1 показує огляд робочого процесу функції.
Вхідна задача оптимізації попередньо обробляється у (нормалізований) гамільтоніан. Потім компілятор ParityQC будує параметризовану анзац-схему Parity Twine, яка транспілюється у логічний анзац, що відповідає нативному набору вентилів обраного апаратного забезпечення.
Параметри схеми QAOA класично оптимізуються за допомогою підходу "efficient depth one" і присвоюються транспільованій схемі. Оскільки використовується один раунд QAOA, оптимальні параметри та отримуються за допомогою пошуку по сітці на CPU без потреби у витратній ітеративній оптимізації із численними викликами схеми. Це значно мінімізує необхідний час роботи QPU для оптимізатора. Час виконання на схему здебільшого визначається постійними накладними витратами на запуск завдання на QPU. Після встановлення параметрів схеми завдання надсилається на вказаний QPU IBM®.
Потім необроблені результати проходять постобробку. На цьому етапі використовується локальний жадібний пошук, який випадково перебирає рядок розв'язку та інвертує значення бітів, якщо це зменшує значення функції вартості.
Бенчмарки
Продуктивність може залежати як від конкретного екземпляра задачі, так і від наступних етапів обробки. У деяких випадках класичні вибірки та вибірки, згенеровані квантовим комп'ютером, можуть досягати подібної кінцевої якості розв'язку після еквівалентної постобробки. Тому оцінювання має враховувати весь робочий процес оптимізації.
Модель Шеррінгтона-Кіркпатріка
Рисунок 2 демонструє ефективність Parity Twine Optimizer. Тут порівнюються результати, отримані за допомогою оптимізатора, з результатами випадкової вибірки для моделі Шеррінгтона-Кіркпатріка із збільшенням кількості кубітів.
Постобробка як випадкових результатів, так і результатів оптимізатора приводить до точних основних станів, проте необроблене мінімальне значення енергії, отримане Twine QAOA, завжди краще за випадкові значення. Для найбільших розглянутих кількостей кубітів (90 та 100) шум апаратного забезпечення погіршує результат оптимізатора настільки, що він повертається до необроблених значень, які збігаються з випадковою вибіркою.
Див. цей навчальний матеріал для вступу до моделі Шеррінгтона-Кіркпатріка та подробиць щодо її розв'язання за допомогою Parity Twine Optimizer.
Задача Market Split
Таблиця 1 показує конкретні показники продуктивності Parity Twine Optimizer, застосованого до різних екземплярів задачі Market Split (MS). Їх отримано з QOBLIB - Quantum Optimization Benchmarking Library і вони відповідають поданням, зробленим до бібліотеки за допомогою Parity Twine Optimizer.
MS violation — це показник точності, який вимірює, наскільки розв'язок далекий від задоволення всіх обмежень, визначений як . Нижчі значення цього показника вказують на точніші розв'язки.
Таблиця 1 наводить усереднені значення для п'яти запусків кожного екземпляра з використанням Parity Twine Optimizer, з пристроєм ibm_boston як бекендом, і 100 000 шотів.
Наведено мінімальне значення MS violation, отримане із запусків кожного екземпляра.
| Екземпляр | Кубіти | Двокубітні вентилі | Глибина двокубітних вентилів | MS violation | Час відображення (с) | Час виконання QPU (с) | Час постобробки (с) |
|---|---|---|---|---|---|---|---|
| ms_03_050_002 | 20 | 399 | 76 | 0 | 45 | 29 | 71 |
| ms_03_100_022 | 20 | 399 | 76 | 0 | 30 | 29 | 77 |
| ms_03_200_177 | 20 | 399 | 76 | 0 | 33 | 29 | 63 |
| ms_04_050_001 | 30 | 899 | 116 | 1 | 68 | 29 | 216 |
| ms_04_100_003 | 30 | 899 | 116 | 2 | 89 | 29 | 187 |
| ms_04_200_030 | 30 | 899 | 116 | 3 | 89 | 29 | 219 |
| ms_05_100_003 | 40 | 1599 | 156 | 3 | 237 | 30 | 364 |
| ms_06_050_001 | 50 | 2499 | 196 | 4 | 499 | 30 | 464 |
| ms_07_050_001 | 60 | 3599 | 236 | 17 | 858 | 31 | 637 |
| ms_08_050_001 | 70 | 4899 | 276 | 36 | 1561 | 31 | 773 |
Таблиця 1: показники продуктивності для різних екземплярів задачі Market Split. Назви екземплярів відповідають прикладам з бібліотеки задач QOBLIB. Як зазначалося раніше в розділі опису, час QPU є мінімальним і майже постійним, оскільки використовується лише один раунд QAOA з оптимальними параметрами схеми, отриманими на CPU.
Див. цей навчальний матеріал для вступу до задачі Market Split та подробиць щодо її розв'язання за допомогою Parity Twine Optimizer.
Задача найбільшої незалежної множини
Рисунок 3 порівнює результати, отримані за допомогою оптимізатора Parity Twine, з результатами випадкової вибірки для задачі найбільшої незалежної множини на обраних екземплярах, отриманих з QOBLIB - Quantum Optimization Benchmarking Library. Вони охоплюють від 18 (mammalia-kangaroo-interactions) до 114 (es60fst03) кубітів.
Для невеликих екземплярів необроблені результати розміру найбільшої незалежної множини від оптимізатора та випадкової вибірки подібні, але для більших екземплярів оптимізатор дає значно кращі результати. Постобробка як результатів випадкової вибірки, так і результатів оптимізатора знову приводить до розмірів множин, що узгоджуються з точними значеннями.
Початок роботи
Автентифікуйтеся за допомогою свого токена API IBM Quantum Platform та оберіть функцію Qiskit так:
# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util
_needed = {"qiskit_ibm_catalog": "qiskit-ibm-catalog"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_catalog import QiskitFunctionsCatalog
# Authenticate and load the Qiskit Function
catalog = QiskitFunctionsCatalog(
channel="ibm_quantum_platform",
)
function = catalog.load("parityqc/parity-twine-optimizer")
Приклад
Parity Twine Optimizer можна застосувати до простого прикладу QUBO так, як показано нижче. Спочатку задача визначається за допомогою словника:
problem = {"()": 3, "(0,)": 1, "(0, 1)": 2, "(1, 2)": -1}
Потім тип змінної потрібно визначити як binary або spin:
variable_type = "spin"
Це визначає цільову функцію , де .
Оберіть бекенд. Наприклад:
backend_name = "ibm_phoenix"
Використайте catalog.backends(), щоб переглянути список доступних бекендів з облікового запису/екземпляра користувача.
Якщо бекенд не вказано, автоматично обирається найменш завантажений бекенд (той, у якого найменше очікуваних завдань).
Після завантаження оптимізатора (див. вище) ти можеш запустити його для задачі з параметрами за замовчуванням:
function_job = function.run(
problem=problem, variable_type=variable_type, backend_name=backend_name
)
print(f"Job ID: {function_job.job_id}")
Перевірте стан завдання так:
# Monitor the job status
function_job.status()
Отримайте результати так:
# Retrieve the job result if the status is DONE
result = function_job.result()
result
Виведення результатів дає таке:
{
'solution': {'0': -1, '1': 1, '2': 1},
'objective_value': -1.0,
'solution_bitstring': '100',
'metadata': {
'circuit_metrics': {
'depth': 20,
'gate_count': 198,
'two_qubit_gate_depth': 4,
'two_qubit_gate_count': 4,
'num_qubits': 3,
'operations': {'delay': 158, 'rz': 17, 'sx': 14, 'cz': 4, 'measure': 3, 'x': 2}
},
'solver_info': {
'variable_mapping': {'0': 0, '1': 1, '2': 2},
'bitstring_distributions': {
'before_postprocessing': {'100': 71760, ... },
'after_postprocessing': {'100': 88440, '011': 11560}
},
'best_parameters': {
'beta': [-0.46259546391008877],
'gamma': [0.6181957189727373]
}
},
'resource_usage': {
'RUNNING: MAPPING': {'CPU_TIME': 42.878},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU_TIME': 0.094},
'RUNNING: WAITING_FOR_QPU': {'CPU_TIME': 790.623},
'RUNNING: EXECUTING_QPU': {'QPU_TIME': 28.0},
'RUNNING: POST_PROCESSING': {'CPU_TIME': 0.828}
}
}
}
Словник solution відповідає кубітам, визначеним у задачі ( та ), і надає їхні оптимізовані значення спіну.
objective_value — це вартість або енергія задачі оптимізації. Вона кількісно визначає якість solution.
metadata надає інформацію про транспіляцію (кількість/глибину двокубітних вентилів, використані вентилі, активні кубіти) та різні часи виконання як для квантових, так і для класичних обчислень.
Крім того, metadata дає змогу зазирнути у внутрішню роботу алгоритму. Ти можеш побачити оптимізовані варіаційні параметри (beta та gamma) і переглянути, як покращився розподіл виміряних бітових рядків після застосування класичної постобробки до необроблених квантових результатів.
Усі бітові рядки у вихідному результаті можна зіставити зі змінними задачі за допомогою variable_mapping.
Наприклад, ти можеш зіставити 'solution_bitstring': '100' за допомогою 'variable_mapping': {'0': 0, '1': 1, '2': 2} з бінарним розв'язком: {'0': 1, '1': 0, '2': 0}.
Оскільки ти розв'язуєш задачу в термінах спінових змінних, тобі потрібно застосувати перетворення з бінарного в спіновий вигляд (0 -> 1, 1 -> -1 ).
Після цього ти отримаєш кінцевий розв'язок 'solution': {'0': -1, '1': 1, '2': 1}.
Див. довідник API для повних відомостей про вхідні та вихідні дані функції Parity Twine Optimizer.
Журнал змін
[1.0.2] - 2026-09-15
Notes
Цей реліз знаменує першу стабільну промислову версію функції Qiskit Parity Twine Optimizer. Очікується, що майбутні релізи додадуть таке:
- компіляцію задач вищого порядку,
- додаткові алгоритми оптимізації, та
- покращення у попередній та постобробці.
Можливості
- Розв'язуйте розріджені та щільні задачі QUBO за допомогою ефективного компілятора Parity Twine.
Документація
- Посібник користувача для початку роботи.
- Навчальні матеріали з прикладами для задач Market Split та Sherrington-Kirkpatrick.
- Документація API.
Отримати підтримку
Зверніться до ParityQC з будь-якими питаннями чи проблемами.
Наступні кроки
- Подай запит на доступ до функції, заповнивши цю форму.
- Перегляньте довідник API для цієї функції Qiskit.
- Спробуй навчальний матеріал із застосування Parity Twine Optimizer до задачі Market Split.
- Спробуй навчальний матеріал із застосування Parity Twine Optimizer до моделі Шеррінгтона-Кіркпатріка.
- Перегляньте препринт ArXiv Connectivity-aware Synthesis of Quantum Algorithms, Drier et al. (2025).