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

المتطلبات
قبل البدء في هذا البرنامج التعليمي، تأكد من تثبيت ما يلي:
- Qiskit SDK الإصدار v1.0 أو أحدث، مع دعم التصور المرئي
- Qiskit Runtime الإصدار v0.22 أو أحدث (
pip install qiskit-ibm-runtime)
بالإضافة إلى ذلك، ستحتاج إلى صلاحية الوصول إلى نسخة على IBM Quantum Platform. لاحظ أن هذا البرنامج التعليمي لا يمكن تنفيذه على الخطة المفتوحة، إذ يشغّل أحمال عمل باستخدام الجلسات، المتاحة فقط ضمن الخطة المميزة.
الإعداد
import matplotlib
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 على نطاق صغير
يستخدم الجزء الأول من هذا البرنامج التعليمي مسألة قطع أقصى صغيرة النطاق لتوضيح خطوات حل مسألة تحسين باستخدام حاسوب كمومي.
لإعطاء بعض السياق قبل تحويل هذه المسألة إلى خوارزمية كمومية، يمكن فهم كيفية تحوّل مسألة القطع الأقصى إلى مسألة تحسين تركيبي كلاسيكية بالنظر أولاً في تقليل دالة
حيث المدخل هو متجه تتوافق مكوناته مع كل عقدة في الرسم البياني. بعد ذلك، يُقيَّد كل مكون من هذه المكونات ليكون إما أو (يمثلان الإدراج أو عدم الإدراج في القطع). يستخدم هذا المثال الصغير رسماً بيانياً بـ عقد.
يمكن كتابة دالة لزوج من العقد تشير إلى ما إذا كان الحافة المقابلة موجودة في القطع. على سبيل المثال، الدالة تساوي 1 فقط إذا كانت إحدى القيمتين أو تساوي 1 (مما يعني أن الحافة موجودة في القطع)، وتساوي صفراً في الحالات الأخرى. يمكن صياغة مسألة تعظيم الحواف في القطع على النحو التالي
والتي يمكن إعادة كتابتها على شكل تقليل كما يلي
الحد الأدنى لـ في هذه الحالة يتحقق حين يكون عدد الحواف التي يقطعها القطع أكبر ما يمكن. كما ترى، لا يوجد حتى الآن أي ارتباط بالحوسبة الكمومية. تحتاج إلى إعادة صياغة هذه المسألة بشكل يستطيع الحاسوب الكمومي فهمه. ابدأ بتهيئة مسألتك بإنشاء رسم بياني بـ عقد.
n = 5
graph = rx.PyGraph()
graph.add_nodes_from(np.arange(0, n, 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: تحويل المدخلات الكلاسيكية إلى مسألة كمومية
الخطوة الأولى في النمط هي تحويل المسألة الكلاسيكية (الرسم البياني) إلى دوائر وعوامل كمومية. لتحقيق ذلك، هناك ثلاث خطوات رئيسية:
- استخدام سلسلة من إعادات الصياغة الرياضية لتمثيل المسألة باستخدام تدوين مسائل التحسين الثنائي التربيعي غير المقيّد (QUBO).
- إعادة كتابة مسألة التحسين على شكل هاميلتوني تتوافق حالته الأساسية مع الحل الذي يقلل دالة التكلفة.
- إنشاء دائرة كمومية لتهيئة الحالة الأساسية لهذا الهاميلتوني عبر عملية مشابهة للتلدين الكمومي.
ملاح ظة: في منهجية QAOA، الهدف النهائي هو الحصول على عامل (هاميلتوني) يمثل دالة التكلفة لخوارزميتنا الهجينة، فضلاً عن دائرة ذات معاملات (Ansatz) تمثل الحالات الكمومية التي تُعدّ حلولاً مرشحة للمسألة. يمكن أخذ عينات من هذه الحالات المرشحة ثم تقييمها باستخدام دالة التكلفة.
الرسم البياني → مسألة التحسين
الخطوة الأولى في التحويل هي تغيير التدوين؛ يعبّر ما يلي عن المسألة بتدوين QUBO:
حيث هي مصفوفة من الأعداد الحقيقية، و يتوافق مع عدد العقد في رسمك البياني، و هو متجه المتغيرات الثنائية المُعرَّف أعلاه، و يشير إلى منقول المتجه .
Maximize
-2*x_0*x_1 - 2*x_0*x_2 - 2*x_0*x_4 - 2*x_1*x_2 - 2*x_2*x_3 - 2*x_3*x_4 + 3*x_0
+ 2*x_1 + 3*x_2 + 2*x_3 + 2*x_4
Subject to
No constraints
Binary variables (5)
x_0 x_1 x_2 x_3 x_4
مسألة التحسين → الهاميلتوني
يمكنك بعد ذلك إعادة صياغة مسألة QUBO على شكل هاميلتوني (أي مصفوفة تمثل طاقة نظام ما):
خطوات إعادة الصياغة من مسألة QAOA إلى الهاميلتوني
لتوضيح كيفية إعادة كتابة مسألة QAOA بهذه الطريقة، استبدل أولاً المتغيرات الثنائية بمجموعة جديدة من المتغيرات عبر
يمكن هنا ملاحظة أنه إذا كانت تساوي ، فإن يجب أن تساوي . حين يُعوَّض عن في مسألة التحسين ()، يمكن الحصول على صياغة مكافئة.
الآن إذا عرّفنا ، وأسقطنا عامل الضرب المسبق والحد الثابت ، نصل إلى الصياغتين المتكافئتين لمسألة التحسين ذاتها.
هنا، يعتمد على . لاحظ أننا للحصول على أسقطنا عامل 1/4 والإزاحة الثابتة اللتين لا تؤثران على عملية التحسين.
الآن، للحصول على صياغة كمومية للمسألة، نرفع متغيرات إلى مصفوفة Pauli ، مثل مصفوفة من الشكل
حين تُعوَّض هذه المصفوفات في مسألة التحسين أعلاه، نحصل على الهاميلتوني التالي