انتقل إلى المحتوى الرئيسي
هذا المشروع في مرحلة تجريبية. وجدت خطأ؟ افتح مشكلة على GitHub. لديك سؤال أو فكرة؟ اسأل في Discussions — نحب سماع ملاحظاتك!
كيف جودة الترجمة في هذه الصفحة؟

محسّن Parity Twine: دالة Qiskit من ParityQC

راجع مرجع API

ملاحظة

Qiskit Functions ميزة تجريبية متاحة فقط لمستخدمي خطط IBM Quantum® Premium Plan وFlex Plan وOn-Prem (عبر IBM Quantum Platform API). وهي في حالة إصدار أولي (preview) وقابلة للتغيير.

نظرة عامة​

يتيح محسّن Parity Twine للمستخدمين حل مسائل التحسين باستخدام الحواسيب الكمية عبر طريقة Parity Twine. يعتمد هذا النهج، المبني على بنية Parity، على مترجم ParityQC لتقليل عدد البوابات وعمق الدارة اللازمين لتشغيل خوارزمية كمية مع مراعاة اتصالية الجهاز.

يتيح تقليل الموارد هذا حل مسائل تحسين ذات صلة صناعية بأحجام يتعذر تحقيقها باستخدام طرق التحويل البرمجي القياسية كثيفة استخدام بوابات SWAP. يؤتمت محسّن Parity Twine خطوات التحويل البرمجي ويمكن استخدامه بأقل قدر من مدخلات المستخدم.

يتفوق نهج Parity Twine على جميع طرق الترجمة الأخرى من حيث تقليل عدد البوابات وأعماق الدارات لخوارزميات كمية مثل خوارزمية التحسين التقريبي الكمي (QAOA) وتحويل فورييه الكمي (QFT). من خلال تجريد المعلومات الكمية عن الكيوبتات الفيزيائية، يتم تنفيذ التفاعلات غير المحلية دون استخدام بوابات SWAP. بدلاً من ذلك، توزّع سلاسل Parity Twine (تسلسلات من بوابات CNOT) معلومات التكافؤ المنطقية بشكل منهجي بين الكيوبتات.

يستخدم المحسّن QAOA لتقليل طاقة دالة تكلفة معطاة. وQAOA خوارزمية تبايُنية هجينة كمية-كلاسيكية مصمَّمة لحل مسائل التحسين التوافقي من خلال تقريب الحالة الأرضية لهاملتوني التكلفة (HCH_C). يقود حد الخلط (HBH_B) الانتقالات بين الحالات لاستكشاف فضاء الحلول. يحدد تسلسل متناوب من هذين الحدين، يتحكم فيه المعاملان γ\gamma وβ\beta، الوحدوي U(γ,β)=Πi=1pe−iβiHBe−iγiHCU(\gamma, \beta) = \Pi_{i=1}^p e^{-i \beta_i H_B} e^{-i \gamma_i H_C}، الذي يعمل على الحالة الابتدائية.

يتطلب ترميز الوحدوي الخاص بالمسألة، exp(−iβHC)-i \beta H_C))، ترميز جميع مؤثرات الدوران المنطقية ذات nn جسمًا (exp(−iβJi,j,...nZiZj...Zn-i \beta J_{i,j,...n}Z_iZ_j...Z_n)). يمكن تحقيق ذلك باستخدام مولّدات ذات nn جسمًا (شبكات Parity Twine)، والتي تقلل من عمق دارة QAOA وعدد بوابات الكيوبتين.

الوصف​

يتكون مُدخل محسّن Parity Twine من مسألة تحسين، واسم جهاز IBM Quantum المختار، ووسائط اختيارية إضافية لتخصيص إعدادات التحويل البرمجي والتنفيذ على الجهاز. توجّه دالة المحسّن تعريف المسألة إلى مترجم Parity Twine. يوضح الشكل 1 ملخصًا لسير عمل الدالة.

Parity Twine Optimizer workflow

تُعالج مسألة التحسين المُدخلة مسبقًا لتصبح هاملتونيًا (مُطبَّعًا). ثم يقوم مترجم ParityQC ببناء دارة نموذج (ansatz) بارامترية من نوع Parity Twine، والتي يتم تحويلها برمجيًا إلى نموذج منطقي يطابق مجموعة البوابات الأصلية للجهاز المختار.

يتم تحسين معاملات دارة QAOA كلاسيكيًا باستخدام نهج "العمق الواحد الفعّال" وتُسند إلى الدارة المحوَّلة برمجيًا. نظرًا لاستخدام جولة واحدة من QAOA، يتم الحصول على المعاملات المثلى γ\gamma وβ\beta باستخدام بحث شبكي على وحدة المعالجة المركزية دون الحاجة إلى تحسين تكراري مكلف عبر العديد من استدعاءات الدارة. يقلل هذا بشكل كبير من وقت تشغيل QPU المطلوب للمحسّن. يُحدَّد وقت التنفيذ لكل دارة في الغالب بالنفقات الثابتة لتشغيل مهمة على QPU. بعد ضبط معاملات الدارة، تُرسَل المهمة إلى QPU المحدد من IBM®.

تُعالَج النتائج الخام بعد ذلك. تستخدم هذه الخطوة بحثًا جشعًا محليًا يمر عشوائيًا عبر سلسلة الحل ويعكس قيم البتات إذا كان ذلك يقلل من قيمة دالة التكلفة.

معايير الأداء​

إخلاء مسؤولية

قد يعتمد الأداء على كل من مثيل المسألة وخطوات المعالجة اللاحقة. في بعض الحالات، قد تحقق العينات الكلاسيكية والعينات المولّدة كميًا جودة حل نهائية متشابهة بعد معالجة لاحقة متكافئة. لذا ينبغي أن يأخذ التقييم في الاعتبار سير عمل التحسين الكامل.

نموذج Sherrington-Kirkpatrick​

يوضح الشكل 2 فعالية محسّن Parity Twine. تتم فيه مقارنة النتائج التي تم الحصول عليها باستخدام المحسّن مقابل أخذ العينات العشوائي لنموذج Sherrington-Kirkpatrick مع زيادة عدد الكيوبتات.

تؤدي المعالجة اللاحقة لكل من النتائج العشوائية ونتائج المحسّن إلى حالات أرضية دقيقة، لكن ناتج الحد الأدنى الخام للطاقة من Twine QAOA يكون دائمًا أفضل من القيم العشوائية. بالنسبة لأكبر أعداد الكيوبتات المدروسة (90 و100)، تُضعف ضوضاء الجهاز نتيجة المحسّن بحيث تعود إلى قيم خام مطابقة لأخذ العينات العشوائي.

Parity Twine Optimizer SK Benchmarks

راجع هذا الدرس التعليمي للاطلاع على مقدمة عن نموذج Sherrington-Kirkpatrick وتفاصيل حول كيفية حله باستخدام محسّن Parity Twine.

مسألة تقسيم السوق (Market Split)​

يعرض الجدول 1 مقاييس أداء محددة لمحسّن Parity Twine مطبَّقًا على مثيلات مختلفة من مسألة تقسيم السوق (MS). تم الحصول عليها من QOBLIB - مكتبة معايير أداء التحسين الكمي وتقابل المساهمات المقدَّمة إلى المكتبة باستخدام محسّن Parity Twine.

انتهاك MS هو مقياس دقة يقيس مدى ابتعاد الحل عن تحقيق جميع القيود، ويُعرَّف كـ ∑i((Ax−b)i)2\sum_i ((Ax - b)_i)^2. تشير القيم الأقل لهذا المقياس إلى حلول أكثر دقة. يُبلغ الجدول 1 عن القيم المتوسطة لخمس عمليات تشغيل لكل مثيل باستخدام محسّن Parity Twine مع جهاز ibm_boston كخلفية و100,000 لقطة. يُبلغ عن أقل انتهاك MS تم الحصول عليه من عمليات تشغيل كل مثيل.

المثيلالكيوبتاتبوابات الكيوبتينعمق الكيوبتينانتهاك MSزمن التخطيط (ثانية)زمن تشغيل QPU (ثانية)زمن المعالجة اللاحقة (ثانية)
ms_03_050_00220399760452971
ms_03_100_02220399760302977
ms_03_200_17720399760332963
ms_04_050_0013089911616829216
ms_04_100_0033089911628929187
ms_04_200_0303089911638929219
ms_05_100_003401599156323730364
ms_06_050_001502499196449930464
ms_07_050_0016035992361785831637
ms_08_050_00170489927636156131773

الجدول 1: مقاييس أداء لمثيلات مختلفة من مسألة تقسيم السوق. أسماء المثيلات تقابل أمثلة موافقة في مكتبة مسائل QOBLIB. كما ذُكر سابقًا في قسم الوصف، فإن وقت QPU ضئيل وشبه ثابت، حيث تُستخدم جولة واحدة فقط من QAOA بمعاملات دارة مثلى تم الحصول عليها على وحدة المعالجة المركزية.

راجع هذا الدرس التعليمي للاطلاع على مقدمة عن مسألة تقسيم السوق وتفاصيل حول كيفية حلها باستخدام محسّن Parity Twine.

مسألة أكبر مجموعة مستقلة​

يقارن الشكل 3 النتائج التي تم الحصول عليها باستخدام محسّن Parity Twine مقابل أخذ العينات العشوائي لمسألة أكبر مجموعة مستقلة لمثيلات مختارة تم الحصول عليها من QOBLIB - مكتبة معايير أداء التحسين الكمي. تتراوح هذه بين 18 كيوبت (mammalia-kangaroo-interactions) و 114 كيوبت (es60fst03).

بالنسبة للمثيلات الصغيرة، تكون نتائج حجم أكبر مجموعة مستقلة الخام من المحسّن وأخذ العينات العشوائي متشابهة، لكن بالنسبة للمثيلات الأكبر، يعطي المحسّن نتائج أفضل بكثير. تؤدي المعالجة اللاحقة لكل من النتائج المأخوذة عشوائيًا ونتائج المحسّن مرة أخرى إلى أحجام مجموعات متوافقة مع القيم الدقيقة.

Parity Twine Optimizer MIS Benchmarks

البدء​

قم بالمصادقة باستخدام رمز IBM Quantum Platform API الخاص بك، وحدد دالة Qiskit كما يلي:

# Added by doQumentation — installs the packages this notebook needs if they are missing
import importlib.util

_needed = {"qiskit_ibm_catalog": "qiskit-ibm-catalog"}
_missing = [pip for module, pip in _needed.items()
if importlib.util.find_spec(module) is None]
# One at a time, so a package that fails to install does not block the others
for _pip in _missing:
%pip install -q {_pip}
if not _missing:
print("\u2713 All required packages are installed")
from qiskit_ibm_catalog import QiskitFunctionsCatalog

# Authenticate and load the Qiskit Function
catalog = QiskitFunctionsCatalog(
channel="ibm_quantum_platform",
)
function = catalog.load("parityqc/parity-twine-optimizer")

مثال​

يمكن تطبيق محسّن Parity Twine على مثال QUBO بسيط كما يلي. تُعرَّف المسألة أولاً باستخدام قاموس:

problem = {"()": 3, "(0,)": 1, "(0, 1)": 2, "(1, 2)": -1}

ثم يجب تعريف نوع المتغير على أنه binary أو spin:

variable_type = "spin"

يُعرِّف هذا دالة الهدف 3+s0+2s0s1−s1s23 + s_0 + 2 s_0s_1 - s_1s_2 حيث si∈{−1,1}s_i \in \{-1, 1\}.

اختر خلفية (backend). على سبيل المثال:

backend_name = "ibm_phoenix"

استخدم catalog.backends() لعرض قائمة بالخلفيات المتاحة من حساب/مثيل المستخدم.

إذا لم يتم تحديد خلفية، يتم اختيار الخلفية الأقل انشغالاً (التي تحتوي على أقل عدد من المهام المعلّقة) تلقائيًا.

بعد تحميل المحسّن (انظر أعلاه)، يمكنك تشغيله على المسألة باستخدام الخيارات الافتراضية:

function_job = function.run(
problem=problem, variable_type=variable_type, backend_name=backend_name
)
print(f"Job ID: {function_job.job_id}")

تحقق من حالة المهمة كما يلي:

# Monitor the job status
function_job.status()

استرجع النتائج كما يلي:

# Retrieve the job result if the status is DONE
result = function_job.result()

result

تؤدي طباعة النتائج إلى ما يلي:

{
'solution': {'0': -1, '1': 1, '2': 1},
'objective_value': -1.0,
'solution_bitstring': '100',
'metadata': {
'circuit_metrics': {
'depth': 20,
'gate_count': 198,
'two_qubit_gate_depth': 4,
'two_qubit_gate_count': 4,
'num_qubits': 3,
'operations': {'delay': 158, 'rz': 17, 'sx': 14, 'cz': 4, 'measure': 3, 'x': 2}
},
'solver_info': {
'variable_mapping': {'0': 0, '1': 1, '2': 2},
'bitstring_distributions': {
'before_postprocessing': {'100': 71760, ... },
'after_postprocessing': {'100': 88440, '011': 11560}
},
'best_parameters': {
'beta': [-0.46259546391008877],
'gamma': [0.6181957189727373]
}
},
'resource_usage': {
'RUNNING: MAPPING': {'CPU_TIME': 42.878},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU_TIME': 0.094},
'RUNNING: WAITING_FOR_QPU': {'CPU_TIME': 790.623},
'RUNNING: EXECUTING_QPU': {'QPU_TIME': 28.0},
'RUNNING: POST_PROCESSING': {'CPU_TIME': 0.828}
}
}
}

يتوافق القاموس solution مع الكيوبتات المعرَّفة في المسألة (s0,s1s_0, s_1، وs2s_2) ويعطي قيم السبين المحسَّنة الخاصة بها.

يمثل objective_value تكلفة أو طاقة مسألة التحسين. وهو يقيس جودة solution.

توفر metadata معلومات حول التحويل البرمجي (عدد/عمق بوابات الكيوبتين، البوابات المستخدمة، الكيوبتات النشطة) وأزمنة تشغيل مختلفة لكل من وقت الحوسبة الكمية والكلاسيكية.

بالإضافة إلى ذلك، توفر metadata لمحة عن الآليات الداخلية للخوارزمية. يمكنك رؤية المعاملات التبايُنية المحسَّنة (beta وgamma) ومراجعة كيفية تحسّن توزيع سلاسل البتات المقاسة بعد تطبيق المعالجة اللاحقة الكلاسيكية على النتائج الكمية الخام.

يمكن ربط جميع سلاسل البتات في ناتج النتيجة بمتغيرات المسألة باستخدام variable_mapping. على سبيل المثال، يمكنك ربط 'solution_bitstring': '100' مع 'variable_mapping': {'0': 0, '1': 1, '2': 2} بالحل الثنائي: {'0': 1, '1': 0, '2': 0}. بما أنك تحل المسألة من حيث متغيرات السبين، تحتاج إلى تطبيق تحويل الثنائي إلى السبين (0 -> 1، 1 -> -1 ). ثم تصل إلى الحل النهائي 'solution': {'0': -1, '1': 1, '2': 1}.

راجع مرجع API للاطلاع على التفاصيل الكاملة لمدخلات ومخرجات دالة محسّن Parity Twine.

سجل التغييرات​

[1.0.2] - 2026-09-15​

Notes

يمثل هذا الإصدار أول نسخة إنتاجية مستقرة من دالة Qiskit الخاصة بمحسّن Parity Twine. من المتوقع أن تقدّم الإصدارات المستقبلية ما يلي:

  • ترجمة المسائل عالية الرتبة،
  • خوارزميات تحسين إضافية، و
  • تحسينات في المعالجة المسبقة واللاحقة.

الميزات

  • حل مسائل QUBO المتناثرة والكثيفة باستخدام مترجم Parity Twine الفعّال.

التوثيق

  • دليل المستخدم للبدء.
  • دروس تعليمية بأمثلة لمسألتي تقسيم السوق وSherrington-Kirkpatrick.
  • توثيق API.

الحصول على الدعم​

تواصل مع ParityQC لأي أسئلة أو مشكلات.

الخطوات التالية​

التوصيات