التجميع الكمي التقريبي باستخدام شبكات الموتّرات (AQC-Tensor)
تتيح إضافة Qiskit الخاصة بالتجميع الكمي التقريبي باستخدام شبكات الموتّرات (AQC-Tensor) للمستخدمين تجميع الجزء الأول من دائرة كمية في تقريب شبه مكافئ لتلك الدائرة، ولكن بعدد أقل بكثير من الطبقات. يتحقق ذلك باستخدام شبكات الموتّرات وفق المنهجية الموضحة في [1]. والاستخدام الأساسي لهذه الإضافة هو في الدوائر التي تحاكي تطور الزمن، غير أنها قد تنطبق على أي فئة من الدوائر التي تتوفر فيها:
- حالة وسيطة ممتازة تُعرف بـ "الحالة المستهدفة"، يمكن الوصول إليها عبر محاكاة شبكات الموتّرات؛ و
- دائرة جيدة تُعدّ تقريبًا للحالة المستهدفة، ولكن بعدد أقل من الطبقات عند تجميعها على جهاز العتاد المستهدف.
تولّد هذه التقنية دائرة نموذج (ansatz) بناءً على دائرة مستهدفة أكبر يريد المستخدم في نهاية المطاف تنفيذها على وحدة معالجة كمية (QPU). يتم ذلك بمحاكاة جزء من الدائرة المستهدفة باستخدام أساليب شبكات الموتّرات أولاً، والحصول على وصف دقيق للحالة الوسيطة التي ستقرّبها دائرة النموذج. بمجرد إيجاد هذه الحالة الوسيطة، تُستخدم كدالة تكلفة لتحسين معاملات دائرة النموذج. بعد اكتمال التحسين، يُلحق الجزء المتبقي من الدائرة المستهدفة بالنموذج ثم يُنفَّذ على العتاد الكمي.
تثبيت حزمة AQC-Tensor
هناك طريقتان لتثبيت حزمة AQC-Tensor: عبر PyPI أو بالبناء من المصدر. يُنصح بتثبيت هذه الحزم في بيئة افتراضية لضمان الفصل بين تبعيات الحزم المختلفة.
التثبيت من PyPI
أبسط طريقة لتثبيت حزمة AQC-Tensor هي عبر PyPI. لاستخدام الحزمة، يجب عليك أيضًا تثبيت واجهة خلفية واحدة على الأقل لشبكات الموتّرات. سيقوم مقطع الكود التالي بتثبيت الإضافة، إلى جانب quimb (لدعم شبكات الموتّرات) وjax (للاشتقاق التلقائي). إذا كنت مهتمًا، يمكنك الاطلاع على الحزمة على GitHub.
pip install 'qiskit-addon-aqc-tensor[quimb-jax]'
التثبيت من المصدر
انقر هنا لقراءة كيفية تثبيت هذه الحزمة يدويًا.
إذا أردت المساهمة في هذه الحزمة أو تثبيتها يدويًا، فاستنسخ المستودع أولاً:
git clone git clone git@github.com:Qiskit/qiskit-addon-aqc-tensor.git
ثم ثبِّت الحزمة عبر pip. إذا كنت تخطط لتشغيل الدروس التعليمية الموجودة في مستودع الحزمة، فثبِّت تبعيات الدفاتر أيضًا. وإذا كنت تخطط للتطوير في المستودع، فقد ترغب أيضًا في تثبيت تبعيات dev.
pip install tox jupyterlab -e '.[notebook-dependencies,dev]'
الخلفية النظرية
إجراء AQC-Tensor موضّح بالتفصيل في [1]. يقدم هذا القسم نظرة عامة على التقنية.

بشكل عام، يحتاج AQC-Tensor إلى ثلاثة عناصر كمدخلات:
- وصف الحالة المستهدفة في شكل شبكة موتّرات. يمكن توليد ذلك بمحاكاة دائرة على محاكي شبكة موتّرات، أو يمكن توليده بطريقة أخرى (مثلًا، بتطبيق تطور زمني على حالة ناتج مصفوفة باستخدام مبدأ التغييرية المعتمد على الزمن).
- دائرة نموذج (ansatz) ذات معاملات. يُفضّل أن تحتوي على تواصل فعّال على مستوى العتاد، بحيث يكون لها عمق معقول على العتاد المستهدف.
- معاملات ابتدائية تُدخَل في دائرة النموذج، بحيث تكون الحالة الناتجة تقريبًا جيدًا للحالة المستهدفة من البداية. (هذا ليس مطلوبًا من حيث المبدأ لـ AQC، لكنه يساعد في منح المحسِّن نقطة انطلاق منطقية.)
تتمثل التقنية في التحسين التكراري لمعاملات دائرة النموذج، بحيث تكون الحالة التي تولّدها قريبة قدر الإمكان من الحالة المستهدفة.
توليد النموذج
لتوليد العنصرين (2) و(3) من القائمة أعلاه، تمتلك حزمة qiskit-addon-aqc دالة generated_ansatz_from_circuit() التي تأخذ دائرة كمدخل وتُخرج نموذجًا ذا معاملات ومجموعة معاملات ابتدائية. المعا ملات التي تُرجعها الدالة هي تلك التي، عند إدخالها في النموذج، ستولّد حالة مكافئة تمامًا للدائرة المدخلة، حتى طور عالمي.
يستخدم النموذج الذي تولّده هذه الدالة 9 معاملات لكل كتلة ثنائية الكيوبت، ويعتمد على تحليل KAK الذي يُعبّر عن أي بوابة ثنائية الكيوبت بثلاثة معاملات، حتى دورانات أحادية الكيوبت. ثم يُحلَّل كل دوران أحادي الكيوبت كـ ، ولكل منها ثلاثة معاملات. ينتج عن ذلك أن دائرة النموذج تحتوي على 3 معاملات لكل كتلة ثنائية الكيوبت في الدائرة الأصلية، بالإضافة إلى 3 معاملات لدوران خارج أحادي الكيوبت على كل كيوبت من الكيوبتين (ليكون المجموع 9 معاملات). بعد إضافة هذه الكتل، يكتمل النموذج بإضافة طبقة من الدورانات أحادية الكيوبت على كل كيوبت نشط في بداية الدائرة.
محاكاة شبكات الموتّرات
للحصول على وص ف الحالة المستهدفة المطلوبة، تستخدم هذه الإضافة حالة ناتج مصفوفة (الشكل الأبسط لشبكة موتّرات) وتدعم المحاكيات التالية لشبكات الموتّرات:
- محاكي MPS الموجود في Qiskit Aer
- محاكي
CircuitMPSالفوري من Quimb - محاكي
Circuitالكسول من Quimb
أهم معامل في شبكة الموتّرات هو الأبعاد القصوى للرابط، . يحدد هذا المعامل مقدار التشابك الذي يمكن تمثيله بشبكة موتّرات، ومن ثَمّ العمق الذي يمكن محاكاة دائرة معينة به بدقة.
بالنسبة لدائرة تحتوي على كيوبت، تحتاج حالة ناتج المصفوفة إلى أبعاد رابط لا تتجاوز لمحاكاة الدائرة بدقة تامة حتى أي عمق. هذا خارج نطاق دوائر المقياس المفيد العامة التي تعمل على 100 كيوبت أو أكثر. لهذا السبب، إذا كنت تحاول التجربة مع هذه الإضافة على مسألة صغيرة بعدد قليل من الكيوبتات، فمن المهم التأكد من أن . وبذلك، عند توسيع المسألة إلى دائرة أكبر، تبقى الحالة المستهدفة قابلة للمحاكاة الكلاسيكية.
الخطوات التالية
- اقرأ الصفحة الخاصة بـ البدء مع AQC-Tensor
- اقرأ الدرس التعليمي حول استخدام AQC لـ تحسين تطور زمن Trotterized.
المراجع
[1] Robertson, Niall F., et al. "Approximate Quantum Compiling for Quantum Simulation: A Tensor Network based approach" arXiv preprint arXiv:2301.08609 (2023).