خوارزمية التحسين التقريبي الكمومي
تقدير الاستخدام: 22 دقيقة على معالج Heron r3 (ملاحظة: هذا تقدير فحسب. قد يختلف وقت التشغيل الفعلي.)
نواتج التعلم
بعد إكمال هذا البرنامج التعليمي، يمكنك أن تتوقع فهم المعلومات التالية:
- كيفية تحويل مسألة تحسين تركيبي كلاسيكية (القطع الأقصى) إلى هاميلتوني كمومي
- كيفية تنفيذ وتشغيل خوارزمية التحسين التقريبي الكمومي (QAOA) باستخدام جلسات Qiskit Runtime
- كيفية توسيع سير عمل QAOA من مثال صغير على المحاكي إلى تنفيذ على نطاق الاستخدام العملي على الأجهزة
المتطلبات المسبقة
يُنصح بأن تطّلع على هذه الموضوعات:
- أساسيات الدوائر الكمومية
- الخوارزميات التغايرية
- QAOA بعمق — لمعالجة شاملة لخوارزمية QAOA وتطبيقها على نطاق الاستخدام العملي
الخلفية النظرية
خوارزمية التحسين التقريبي الكمومي (QAOA) هي طريقة تكرارية هجينة (كمومية-كلاسيكية) لحل مسائل التحسين التركيبي. في هذا البرنامج التعليمي، ستستخدم QAOA لحل مسألة القطع الأقصى (max-cut) — وهي مسألة تحسين من نوع NP-hard لها تطبيقات في التجميع وعلم الشبكات والفيزياء الإحصائية. بإعطاء رسم بياني من عقد مرتبطة بحواف، الهدف هو تقسيم العقد إلى مجموعتين بحيث يكون عدد الحواف التي يقطعها التقسيم أقصى ما يمكن.

من التحسين الكلاسيكي إلى الدوائر الكمومية
يمكن التعبير عن القطع الأقصى كمسألة تحسين ثنائي كلاسيكية. تُخصَّص لكل عقدة متغيرة ثنائية تشير إلى المجموعة التي تنتمي إليها. الهدف هو تعظيم عدد الحواف التي تكون نقاطها الطرفية في مجموعتين مختلفتين:
وهذا يكافئ مسألة التحسين الثنائي التربيعي غير المقيّد (QUBO) من الشكل . عبر استبدال متغيرات قياسي ()، يمكن إعادة كتابة QUBO على شكل هاميلتوني التكلفة الذي تشفّر حالته الأساسية الحل الأمثل. بصفة عامة، يحتوي هذا الهاميلتوني على حدود تربيعية وخطية معاً:
بالنسبة لمسألة القطع الأقصى غير الموزونة المطروحة هنا، تتلاشى المعاملات الخطية () ويكون لكل حافة، مما يترك الشكل الأبسط الذي ستبنيه في الكود أدناه. أما الشكل الأعم أعلاه فهو ما ستحتاج إليه لتكييف سير العمل هذا مع الرسوم البيانية الموزونة أو غيرها من المسائل القابلة للتعبير عنها بصيغة QUBO.
كيف تعمل QAOA
تُعدّ QAOA حلولاً مرشحة بتطبيق طبقات متناوبة من عاملين على حالة تراكب أولية : عامل التكلفة وعامل الخلط . تُحسَّن الزوايا و في حلقة تغذية راجعة كلاسيكية؛ يقيّم الحاسوب الكمومي دالة التكلفة، ويحدّث محسّن كلاسيكي المعاملات حتى التقارب. تُشغَّل هذه الحلقة التكرارية ضمن جلسة (Session) Qiskit Runtime، التي تُبقي الجهاز الكمومي محجوزاً عبر التكرارات لتقليل زمن الاستجابة.
لمعالجة أعمق لنظرية QAOA، بما في ذلك الاشتقاق الكامل من QUBO إلى الهاميلتوني، راجع وحدة دورة QAOA.
في هذا البرنامج التعليمي ستحل أولاً مسألة القطع الأقصى لرسم بياني صغير من خمس عقد، ثم ستوسّع سير العمل ذاته إلى مسألة على نطاق الاستخدام العملي بـ 100 عقدة على أجهزة حقيقية. ملاحظة حول صلاحية الوصول للخطة: يستخدم هذا البرنامج التعليمي جلسات Qiskit Runtime، المتاحة فقط ضمن الخطة المميزة. إذا كنت على الخطة المفتوحة، فلا يمكنك تشغيل هذا البرنامج التعليمي كما هو مكتوب؛ بدلاً من ذلك، ستحتاج إلى استبدال Session بـ وضع المهام (أي تقديم كل تكرار كمهمة مستقلة بدلاً من تغليف حلقة التحسين بـ Session(...)). يظل سير العمل قابلاً للتشغيل، لكن كل تكرار يتكبّد زمن انتظار الطابور كاملاً بدلاً من إعادة استخدام جهاز محجوز. راجع نظرة عامة على الخطط المتاحة لمزيد من المعلومات.
المتطلبات
قبل البدء في هذا البرنامج التعليمي، تأكد من تثبيت ما يلي:
- Qiskit SDK الإصدار v2.0 أو أحدث، مع دعم التصور المرئي
- Qiskit Runtime الإصدار v0.22 أو أحدث (
pip install qiskit-ibm-runtime)
بالإضافة إلى ذلك، ستحتاج إلى صلاحية الوصول إلى نسخة على IBM Quantum® Platform.
الإعداد
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime rustworkx scipy
import matplotlib.pyplot as plt
import rustworkx as rx
from rustworkx.visualization import mpl_draw as draw_graph
import numpy as np
from scipy.optimize import minimize
from collections import defaultdict
from typing import Sequence
from qiskit.quantum_info import SparsePauliOp
from qiskit.circuit.library import QAOAAnsatz
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator
from qiskit_ibm_runtime import SamplerV2 as Sampler
مثال على نطاق صغير
يستعرض هذا القسم كل خطوة من سير عمل QAOA على نسخة صغيرة من مسألة القطع الأقصى بخمس عقد. ورغم وصفه بأنه "صغير النطاق"، فإن هذا المثال يظل يُنفَّذ على أجهزة IBM Quantum الحقيقية — إذ يختار الكود معالجاً خلفياً Backend بـ 127 كيوبت أو أكثر وينفّذ الدائرة عليه. هيّئ مسألتك بإنشاء رسم بياني بـ عقد.
n_small = 5
graph = rx.PyGraph()
graph.add_nodes_from(np.arange(0, n_small, 1))
edge_list = [
(0, 1, 1.0),
(0, 2, 1.0),
(0, 4, 1.0),
(1, 2, 1.0),
(2, 3, 1.0),
(3, 4, 1.0),
]
graph.add_edges_from(edge_list)
draw_graph(graph, node_size=600, with_labels=True)
الخطوة 1: تحويل المدخلات الكلاسيكية إلى مسألة كمومية
حوّل الرسم البياني الكلاسيكي إلى دوائر (Circuits) وعوامل كمومية. كما هو موضح في الخلفية النظرية، بالنسبة للقطع الأقصى غير الموزون يُختزَل هاميلتوني التكلفة إلى ، وتستخدم QAOA دائرة Ansatz ذات معاملات لتهيئة الحالات الأساسية المرشحة لـ .