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

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 — це гібридний квантово-класичний варіаційний алгоритм, розроблений для розв'язання задач комбінаторної оптимізації шляхом наближення основного стану гамільтоніана вартості (HCH_C). Доданок змішування (HBH_B) спричиняє переходи між станами для дослідження простору розв'язків. Почергова послідовність цих доданків, керована параметрами γ\gamma і β\beta, визначає унітарний оператор U(γ,β)=Πi=1pe−iβiHBe−iγiHCU(\gamma, \beta) = \Pi_{i=1}^p e^{-i \beta_i H_B} e^{-i \gamma_i H_C}, який діє на початковий стан.

Кодування унітарного оператора задачі, exp(−iβHC)-i \beta H_C)), потребує кодування всіх логічних nn-тільних операторів обертання (exp(−iβJi,j,...nZiZj...Zn-i \beta J_{i,j,...n}Z_iZ_j...Z_n)). Цього можна досягти за допомогою nn-тільних генераторів (мереж Parity Twine), які зменшують глибину схеми QAOA та кількість двокубітних вентилів.

Опис​

Вхідними даними Parity Twine Optimizer є задача оптимізації, назва обраного апаратного забезпечення IBM Quantum, а також додаткові необов'язкові аргументи для налаштування параметрів транспіляції та виконання на апаратному забезпеченні. Функція оптимізатора передає визначення задачі компілятору Parity Twine. Рисунок 1 показує огляд робочого процесу функції.

Parity Twine Optimizer workflow

Вхідна задача оптимізації попередньо обробляється у (нормалізований) гамільтоніан. Потім компілятор ParityQC будує параметризовану анзац-схему Parity Twine, яка транспілюється у логічний анзац, що відповідає нативному набору вентилів обраного апаратного забезпечення.

Параметри схеми QAOA класично оптимізуються за допомогою підходу "efficient depth one" і присвоюються транспільованій схемі. Оскільки використовується один раунд QAOA, оптимальні параметри γ\gamma та β\beta отримуються за допомогою пошуку по сітці на CPU без потреби у витратній ітеративній оптимізації із численними викликами схеми. Це значно мінімізує необхідний час роботи QPU для оптимізатора. Час виконання на схему здебільшого визначається постійними накладними витратами на запуск завдання на QPU. Після встановлення параметрів схеми завдання надсилається на вказаний QPU IBM®.

Потім необроблені результати проходять постобробку. На цьому етапі використовується локальний жадібний пошук, який випадково перебирає рядок розв'язку та інвертує значення бітів, якщо це зменшує значення функції вартості.

Бенчмарки​

Застереження

Продуктивність може залежати як від конкретного екземпляра задачі, так і від наступних етапів обробки. У деяких випадках класичні вибірки та вибірки, згенеровані квантовим комп'ютером, можуть досягати подібної кінцевої якості розв'язку після еквівалентної постобробки. Тому оцінювання має враховувати весь робочий процес оптимізації.

Модель Шеррінгтона-Кіркпатріка​

Рисунок 2 демонструє ефективність Parity Twine Optimizer. Тут порівнюються результати, отримані за допомогою оптимізатора, з результатами випадкової вибірки для моделі Шеррінгтона-Кіркпатріка із збільшенням кількості кубітів.

Постобробка як випадкових результатів, так і результатів оптимізатора приводить до точних основних станів, проте необроблене мінімальне значення енергії, отримане Twine QAOA, завжди краще за випадкові значення. Для найбільших розглянутих кількостей кубітів (90 та 100) шум апаратного забезпечення погіршує результат оптимізатора настільки, що він повертається до необроблених значень, які збігаються з випадковою вибіркою.

Parity Twine Optimizer SK Benchmarks

Див. цей навчальний матеріал для вступу до моделі Шеррінгтона-Кіркпатріка та подробиць щодо її розв'язання за допомогою Parity Twine Optimizer.

Задача Market Split​

Таблиця 1 показує конкретні показники продуктивності Parity Twine Optimizer, застосованого до різних екземплярів задачі Market Split (MS). Їх отримано з QOBLIB - Quantum Optimization Benchmarking Library і вони відповідають поданням, зробленим до бібліотеки за допомогою Parity Twine Optimizer.

MS violation — це показник точності, який вимірює, наскільки розв'язок далекий від задоволення всіх обмежень, визначений як ∑i((Ax−b)i)2\sum_i ((Ax - b)_i)^2. Нижчі значення цього показника вказують на точніші розв'язки. Таблиця 1 наводить усереднені значення для п'яти запусків кожного екземпляра з використанням Parity Twine Optimizer, з пристроєм ibm_boston як бекендом, і 100 000 шотів. Наведено мінімальне значення MS violation, отримане із запусків кожного екземпляра.

ЕкземплярКубітиДвокубітні вентиліГлибина двокубітних вентилівMS violationЧас відображення (с)Час виконання QPU (с)Час постобробки (с)
ms_03_050_00220399760452971
ms_03_100_02220399760302977
ms_03_200_17720399760332963
ms_04_050_0013089911616829216
ms_04_100_0033089911628929187
ms_04_200_0303089911638929219
ms_05_100_003401599156323730364
ms_06_050_001502499196449930464
ms_07_050_0016035992361785831637
ms_08_050_00170489927636156131773

Таблиця 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) кубітів.

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

Parity Twine Optimizer MIS Benchmarks

Початок роботи​

Автентифікуйтеся за допомогою свого токена 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"

Це визначає цільову функцію 3+s0+2s0s1−s1s23 + s_0 + 2 s_0s_1 - s_1s_2, де si∈{−1,1}s_i \in \{-1, 1\}.

Оберіть бекенд. Наприклад:

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 відповідає кубітам, визначеним у задачі (s0,s1s_0, s_1 та s2s_2), і надає їхні оптимізовані значення спіну.

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 з будь-якими питаннями чи проблемами.

Наступні кроки​

Рекомендації