QAOA على نطاق الأداة
شاهد الفيديو حول QAOA على نطاق الأداة مع أوليفيا لينز، أو افتح الفيديو في نافذة منفصلة على يوتيوب.
نظرة عامة على الدرس
حتى الآن في هذه الدورة، نأمل أننا أعطيناك أساساً متيناً للإطار والأدوات اللازمة لحل مسائل على نطاق الأداة باستخدام حاسوب كمي. والآن سنرى أخيراً هذه الأدوات وهي تعمل.
في هذا الدرس، سنتعمق في مثال على نطاق الأداة لمسألة Max-Cut، وهي مسألة شهيرة في نظرية الرسوم البيانية تتعلق بأفضل طريقة لتقسيم رسم بياني إلى قسمَين. سنبدأ برسم بياني بسيط من خمس عقد لبناء حدسنا حول كيفية مساعدة الحاسوب الكمي في حل المسألة، ثم نطبّق هذا على نسخة من المسألة على نطاق الأداة.
سيكون هذا الدرس نظرة عامة واسعة على النهج الذي نتبعه لحل هذه المسألة. لن يكون شرحاً للكود خطوة بخطوة. ولكن هناك درس تطبيقي مرفق يحتوي على كود فعلي يمكنك تشغيله لحل مسألة Max-Cut على حاسوب كمي.
المسألة
للتذكير، لا تُعدّ جميع المسائل الحسابية مناسبة للحوسبة الكمية. "المسائل السهلة" لن تستفيد من هذه التقنية لأن الحواسيب الكلاسيكية ممتازة بالفعل في حلها.
حالات الاستخدام الثلاث التي نتفاءل أكثر باستكشافها هي:
- محاكاة الطبيعة
- معالجة البيانات ذات البنية المعقدة
- التحسين
سنركّز اليوم على حالة الاستخدام الثالثة، التحسين. في مسألة التحسين، نبحث عموماً عن أكبر أو أصغر قيمة ممكنة لدالة معطاة. يمكن أن تتزايد صعوبة إيجاد هذه القيم القصوى بالطرق الكلاسيكية بشكل أسّي مع نمو حجم المسألة.
مسألة التحسين التي تهمنا اليوم تُسمى Max-Cut، وسنحلّها باستخدام خوارزمية تُعرف بخوارزمية التحسين الكمي التقريبي (QAOA).
ما هي Max-Cut؟
نبدأ برسم بياني يتكوّن من مجموعة من الرؤوس (أو العقد)، يتصل بعضها بحوافّ. في المسألة، يُطلب منا تقسيم عقد الرسم البياني إلى مجموعتَين فرعيتَين بـ"قطع" الحوافّ التي تربطهما. نريد إيجاد التقسيم الذي يُعظّم عدد الحوافّ المقطوعة بهذه الطريقة — ومن هنا جاء الاسم "Max-Cut".

على سبيل المثال، الشكل أعلاه يُظهر رسماً بيانياً من خمس عقد مع حل Max-Cut على اليمين. يقطع خمس حوافّ، وهو أفضل ما يمكن تحقيقه مع هذا الرسم البياني.
نظراً لصغر رسم بياني من خمس عقد، ليس من الصعب جداً تحديد Max-Cut ذهنياً أو بتجربة بعض القطوعات على ورقة. لكن كما تتخيل، تصبح المسألة أصعب وأصعب كلما زاد عدد الرؤوس — جزئياً لأن عدد القطوعات المحتملة التي يجب مراعاتها يزداد بشكل أسّي بزيادة عدد العقد. وعند نقطة معينة، يصبح هذا صعباً حتى بالنسبة للحواسيب العملاقة مع أي خوارزمية كلاسيكية معروفة.
نريد طريقة لحل مسألة Max-Cut لهذه الرسوم البيانية الأكبر والأكثر تعقيداً، لأن المسألة لها تطبيقات عملية كثيرة، بما فيها اكتشاف الاحتيال في التمويل، وتجميع الرسوم البيانية، وتصميم الشبكات، وتحليل وسائل التواصل الاجتماعي. كثيراً ما تظهر Max-Cut كمسألة فرعية ضمن نهج معيّن لمسألة أكبر. لذا فهي أكثر شيوعاً مما قد نتصور للوهلة الأولى.
الحل
الآن سنستعرض النهج الذي نتبعه لحل مسألة Max-Cut على حاسوب كمي. سنفعل ذلك برسم بياني بسيط من خمس عقد. يمكنك المتابعة باستخدام درس دفتر Python التطبيقي. بعد ذلك المثال البسيط، سيرشدك الدرس التطبيقي خلال مثال على نطاق الأداة للمسألة.
الخطوة الأولى هي إنشاء رسمنا البياني بتحديد عدد العقد والحوافّ التي تربط عقدتَين. يمكنك القيام بذلك باستيراد حزمة تُسمى rustworkx، كما هو موضّح في الدرس التطبيقي. والنتيجة ستكون رسماً بيانياً كهذا:
سنستخدم إطار أنماط Qiskit لإيجاد حلول Max-Cut لهذا الرسم البياني على حاسوبنا الكمي.
التخطيط
نحتاج إلى تخطيط المسألة على حاسوبنا الكمي. للقيام بذلك، لنلاحظ أولاً أن تعظيم عدد القطوعات في رسم بياني يمكن كتابته رياضياً كـ:
حيث و هما عقدتان في الرسم البياني، و و إما 0 أو 1 بحسب أي جانب من التقسيم توجد فيه كل عقدة (إحدى المجموعتَين مُسمّاة بـ"0" والأخرى بـ"1"). عندما يكون و على الجانب ذاته من التقسيم، يساوي التعبير في المجموع صفراً. أما عند وجودهما على الجانبَين المختلفَين، أي عند وجود قطع بينهما، يساوي التعبير واحداً. وهكذا يُعظّم تعظيم عدد القطوعات المجموع.
يمكننا أيضاً قلب المسألة والبحث عن الحد الأدنى بضرب كل قيمة في السالب.
الآن أصبحنا مستعدّين للتخطيط. قد يبدو مرهباً التفكير في كيفية الانتقال من رسم بياني كالذي رسمناه للتو إلى دائرة كمية. لكننا سنفعل ذلك خطوةً خطوة.
تذكّر أننا سنحاول حل Max-Cut باستخدام QAOA. في منهجية QAOA، نريد في نهاية المطاف الحصول على مشغّل (أو بعبارة أخرى هاميلتوني) يُستخدم لتمثيل دالة التكلفة لخوارزميتنا الهجينة، إضافةً إلى دائرة مُعاملة (ansatz) نستخدمها لتمثيل الحلول المحتملة للمسألة.
QUBO
يمكننا أخذ عينات من هذه الحلول المرشحة ثم تقييمها باستخدام دالة التكلفة. للقيام بذلك، نستفيد من سلسلة من إعادات الصياغة الرياضية، بما فيها صياغة التحسين الثنائي غير المقيّد التربيعي — أو QUBO اختصاراً — وهي طريقة مفيدة لترميز مسائل التحسين التوليفي. في QUBO، نريد إيجاد:
حيث مصفوفة من الأعداد الحقيقية، ويقابل عدد العقد في رسمنا البياني، وهو خمسة هنا.
لتطبيق QAOA، نحتاج إلى صياغة مسألتنا كهاميلتوني — وهو دالة أو مصفوفة تمثّل إجمالي طاقة النظام. تحديداً، نريد إنشاء هاميلتوني دالة تكلفة بالخاصية التي تكون فيها حالته الأرضية مقابلةً للقيمة الدنيا للدالة. لذا، لحل مسألة التحسين لدينا، سنحاول تحضير الحالة الأرضية لـ على حاسوب كمي. ثم يُسفر أخذ العينات من هذه الحالة عن حل باحتمالية عالية.
التخطيط إلى هاميلتوني دالة تكلفة
كما اتضح، نحن محظوظون، لأن مسألة QUBO وثيقة الصلة جداً بل هي مكافئة حسابياً لأحد أشهر الهاميلتونيَّات في الفيزياء وأكثرها شيوعاً: هاميلتوني إيزينج.
لكتابة مسألة QUBO كهاميلتوني إيزينج، كل ما نحتاجه هو إجراء تغيير بسيط في المتغيرات:
لن نتتبع جميع الخطوات هنا، لكنها موضّحة في الدفتر المرفق. في النهاية، تصغير تعبير QUBO يعادل تصغير هذا التعبير:
بإعادة الكتابة مجدداً بشكل طفيف نحصل على هاميلتوني دالة التكلفة، حيث يمثّل الحد الأدنى للتعبير الحالة الأرضية، وZ هو مشغّل باولي Z، و معامل سلمي حقيقي:
الآن بعد أن حصلنا على هاميلتونينا، نحتاج إلى إعادة كتابته بدلالة مشغّلات باولي ZZ ثنائية المحلية، التي يمكننا تحويلها بسهولة إلى بوابات ثنائية الكيوبت في دائرتنا الكمية. سنحصل في النهاية على ستة كائنات — أو سلاسل باولي — كل منها يقابل إحدى الحوافّ الستة في الرسم البياني. كل عنصر من العناصر الخمسة في السلسلة يمثّل عملية على عقدة — الوحدة إذا لم تكن العقدة متصلة بتلك الحافة، ومشغّل باولي Z إذا كانت. في Qiskit، تُفهرَس سلاسل البت التي تمثّل الكيوبتات بشكل معكوس. على سبيل المثال، حافة بين العقدتَين 0 و1 تُرمَّز كـIIIZZ، وحافة بين العقدتَين 2 و4 تُرمَّز كـZIZII.