Кореляційне кодування Паулі для зменшення вимог до задачі максимального розрізу
Оцінка використання: 35 хвилин на процесорі Eagle r3 (ПРИМІТКА: Це лише оцінка. Твій час виконання може відрізнятися.)
Результати навчання
Після проходження цього посібника користувачі повинні отримати такі результати:
- Зрозуміти теоретичні принципи кореляційного кодування Паулі (PCE), включаючи те, як багаточастинкові рядки Паулі забезпечують поліноміальне стиснення класичних задач оптимізації.
- Реалізувати PCE на практиці для кодування та вирішення великомасштабних задач оптимізації на квантовому обладнанні найближчого майбутнього.
Передумови
Ми рекомендуємо ознайомитися з такими темами перед проходженням цього посібника:
Теоретична основа
У цьому посібнику представлено кореляційне кодування Паулі (PCE) [1] — підхід, розроблений для кодування задач оптимізації в кубіти з більшою ефективністю для квантових обчислень. PCE відображає класичні змінні в задачах оптимізації на багаточастинкові кореляції матриць Паулі, що призводить до поліноміального стиснення просторових вимог задачі. Завдяки використанню PCE зменшується кількість кубітів, необхідних для кодування, що робить його особливо корисним для квантових пристроїв найближчого майбутнього з обмеженими ресурсами кубітів. Крім того, аналітично продемонстровано, що PCE за своєю природою пом'якшує проблему безплідних плато, забезпечуючи суперполіноміальну стійкість до цього явища. Ця вбудована властивість забезпечує безпрецедентну продуктивність квантових розв'язувачів задач оптимізації.
Огляд
Підхід PCE складається з трьох основних кроків, як показано на Рисунку 1 з [1] нижче:
- Кодування задачі оптимізації в простір кореляцій Паулі.
- Розв'язання задачі за допомогою квантово-класичного розв'язувача оптимізації.
- Декодування розв'язку назад у вихідний простір оптимізації.
Підхід PCE може бути адаптований до будь-якого квантового розв'язувача оптимізації, здатного обробляти кореляційні матриці Паулі.

На Рисунку 1 з [1] задача максимального розрізу використовується як приклад для ілюстрації підходу PCE. Задача максимального розрізу з вузлами кодується в простір кореляцій Паулі, представляючи задачу оптимізації у вигляді кореляційної матриці — а саме двочастинкових кореляцій матриць Паулі на кубітах . Кольори вузлів вказують на рядок Паулі, що використовується для кодування кожного вузла. Наприклад, вузол 1, який відповідає бінарній змінній , кодується очікуваним значенням , тоді як кодується . Це відповідає стисненню змінних задачі до кубітів. Загалом, -частинкові кореляції забезпечують поліноміальне стиснення порядку , при . Обраний набір Паулі складається з трьох підмножин взаємно комутуючих рядків Паулі, що дозволяє експериментально оцінити всі кореляцій лише за допомогою трьох налаштувань вимірювання.
Конструюється функція втрат очікуваних значень Паулі, яка імітує вихідну цільову функцію задачі максимального розрізу. Потім функція втрат оптимізується за допомогою кванто во-класичного розв'язувача оптимізації, такого як варіаційний квантовий розв'язувач власних значень (VQE).
Після завершення оптимізації розв'язок декодується назад у вихідний простір оптимізації, що дає оптимальний розв'язок задачі максимального розрізу.
Вимоги
Перед початком цього посібника переконайся, що встановив наступне:
- Qiskit SDK v1.0 або новішої версії з підтримкою візуалізації
- Qiskit Runtime v0.22 або новішої версії (
pip install qiskit-ibm-runtime)
Налаштування
# Added by doQumentation — required packages for this notebook
!pip install -q networkx numpy qiskit qiskit-aer qiskit-ibm-runtime rustworkx scipy
from itertools import combinations
import numpy as np
import rustworkx as rx
import networkx as nx
from scipy.optimize import minimize, OptimizeResult
from qiskit.circuit.library import efficient_su2
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import Session
from rustworkx.visualization import mpl_draw
from qiskit_aer import AerSimulator
def calc_cut_size(graph, partition0, partition1):
"""Calculate the cut size of the given partitions of the graph."""
cut_size = 0
for edge0, edge1 in graph.edge_list():
if edge0 in partition0 and edge1 in partition1:
cut_size += 1
elif edge0 in partition1 and edge1 in partition0:
cut_size += 1
return cut_size