المعاملات الشائعة الاستخدام في التحويل
إصدارات الحزم
تم تطوير الكود الموجود في هذه الصفحة باستخدام المتطلبات التالية. ننصح باستخدام هذه الإصدارات أو ما هو أحدث منها.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
تصف هذه الصفحة بعض المعاملات الأكثر استخدامًا في التحويل المحلي. يتم ضبط هذه المعاملات عبر الوسائط المُمرَّرة إلى generate_preset_pass_manager أو transpile.
درجة التقريب
يمكنك استخدام درجة التقريب لتحديد مدى قرب الدائرة الناتجة من الدائرة المطلوبة (المدخلة). وهي قيمة عشرية في النطاق (0.0 - 1.0)، حيث تعني 0.0 أقصى درجة تقريب وتعني 1.0 (الافتراضية) عدم التقريب تمامًا. تُقلل القيم الأصغر من دقة الإخراج في مقابل سهولة التنفيذ (أي عدد بوابات أقل). القيمة الافتراضية هي 1.0.
في تركيب الوحدوية ثنائية الكيوبت (المستخدمة في المراحل الأولى لجميع المستويات وفي مرحلة التحسين مع مستوى التحسين 3)، تحدد هذه القيمة الدقة المستهدفة لتحلل الإخراج. أي مقدار الخطأ الذي يُدخَل عند تحويل التمثيل المصفوفي للدائرة إلى بوابات منفصلة. إذا كانت درجة التقريب أقل (تقريب أكبر)، فستختلف الدائرة الناتجة من التركيب أكثر عن المصفوفة المدخلة، لكنها ستحتوي على الأرجح على عدد أقل من البوابات (لأن أي عملية ثنائية الكيوبت يمكن تحليلها بصورة مثالية بحد أقصى ثلاث بوابات CX)، مما يجعل تنفيذها أسهل.
عندما تكون درجة التقريب أقل من 1.0، قد يتم تركيب دوائر تحتوي على بوابة CX واحدة أو اثنتين، مما يُقلل الخطأ الناتج من العتاد لكنه يزيد الخطأ الناتج من التقريب. ونظرًا لأن CX هي أغلى بوابة من حيث الخطأ، فقد يكون من المفيد تقليل عددها على حساب الدقة في التركيب (استُخدمت هذه التقنية لزيادة الحجم الكمي على أجهزة IBM®: التحقق من صحة الحواسيب الكمومية باستخدام دوائر نماذج عشوائية).
كمثال على ذلك، نُولّد بوابة UnitaryGate ثنائية الكيوبت عشوائية سيتم تركيبها في المرحلة الأولية. قد يُولّد ضبط approximation_degree بقيمة أقل من 1.0 دائرة تقريبية. يجب أيضًا تحديد basis_gates لإعلام أسلوب التركيب بالبوابات التي يمكنه استخدامها في التركيب التقريبي.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import UnitaryGate
from qiskit.quantum_info import random_unitary
from qiskit.transpiler import generate_preset_pass_manager
UU = random_unitary(4, seed=12345)
rand_U = UnitaryGate(UU)
qubits = QuantumRegister(2, name="q")
qc = QuantumCircuit(qubits)
qc.append(rand_U, qubits)
pass_manager = generate_preset_pass_manager(
optimization_level=1,
approximation_degree=0.85,
basis_gates=["sx", "rz", "cx"],
)
approx_qc = pass_manager.run(qc)
print(approx_qc.count_ops()["cx"])
2
ينتج عن ذلك 2 لأن التقريب يتطلب عددًا أقل من بوابات CX.
بذرة مولّد الأعداد العشوائية
بعض أجزاء المحوّل عشوائية الطابع، لذا قد تُعيد عمليات التحويل المتكررة نتائج مختلفة. للحصول على نتيجة قابلة للتكرار، يمكنك ضبط البذرة لمولد الأعداد الشبه‑عشوائية باستخدام الوسيطة seed_transpiler. ستُعيد عمليات التشغيل المتكررة التي تستخدم نفس البذرة النتائج ذاتها.
مثال:
pass_manager = generate_preset_pass_manager(
optimization_level=1, seed_transpiler=11, basis_gates=["sx", "rz", "cx"]
)
optimized_1 = pass_manager.run(qc)
optimized_1.draw("mpl")
التخطيط الأولي
قبل التحويل، تكون الكيوبتات الموجودة في دائرتك كيوبتات افتراضية لا تتوافق بالضرورة مع الكيوبتات الفيزيائية على الـ Backend المستهدف. يمكنك تحديد التعيين الأولي للكيوبتات الافتراضية إلى الكيوبتات الفيزيائية باستخدام الوسيطة initial_layout. لاحظ أن تخطيط الكيوبت النهائي قد يختلف عن التخطيط الأولي لأن المحوّل قد يُعيد ترتي ب الكيوبتات باستخدام بوابات التبديل أو وسائل أخرى.
في المثال أدناه، نُنشئ تخطيطًا أوليًا لـ Backend المحاكي FakeSherbrooke من خلال إنشاء كائن Layout. يُعيّن تخطيطنا الكيوبت الأول من دائرتنا إلى الكيوبت 5 في Sherbrooke، ويُعيّن الكيوبت الثاني إلى الكيوبت 6 في Sherbrooke. لاحظ أن الكيوبتات الفيزيائية تُمثَّل دائمًا بأعداد صحيحة.
from qiskit_ibm_runtime.fake_provider import FakeSherbrooke
from qiskit.transpiler import Layout
backend = FakeSherbrooke()
a, b = qubits
initial_layout = Layout({a: 5, b: 6})
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)
transpiled_circ.draw("mpl", idle_wires=False)
بالإضافة إلى تحديد كائن Layout، يمكنك أيضًا تمرير قائمة من الأعداد الصحيحة، حيث يحتوي العنصر رقم من القائمة على الكيوبت الفيزيائي الذي ينبغي تعيين الكيوبت رقم إليه. مثلًا:
initial_layout = [5, 6]
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend, initial_layout=initial_layout
)
transpiled_circ = pass_manager.run(qc)
transpiled_circ.draw("mpl", idle_wires=False)
يمكنك استخدام دالة plot_error_map لإنشاء رسم تخطيطي لرسم الجهاز مع معلومات الخطأ وتسميات الكيوبتات الفيزيائية. يمكنك أيضًا الاطلاع على رسومات مماثلة في صفحة موارد الحوسبة.
from qiskit.visualization import plot_error_map
plot_error_map(backend, figsize=(30, 24))
خيارات مراحل المحوّل والإضافات
هذه الخيارات تنتهي بـ _method. تؤثر على طريقة عمل المحوّل وتُستخدم للحصول على إخراج أفضل أو مختلف أو محدد منه.
-
init_method(str) - الإضافة المستخدمة في مرحلة التهيئة. -
layout_method(str) - تمريرة اختيار التخطيط (trivial،dense،sabre). يمكن أن يكون أيضًا اسم الإضافة الخارجية المستخدمة لمرحلة التخطيط. -
optimization_method(str) - الإضافة المستخدمة في مرحلة التحسين. -
routing_method(str) - اسم تمريرة التوجيه (basic،lookahead،default،sabre،none). يمكن أن يكون أيضًا اسم الإضافة الخارجية المستخدمة لمرحلة التوجيه. -
scheduling_method(str) - اسم تمريرة الجدولة. يمكن أن يكون أيضًا اسم الإضافة الخارجية المستخدمة لمرحلة الجدولة.as_soon_as_possible: جدولة التعليمات بشكل جشع: أبكر ما يمكن على مورد كيوبت (اختصار:asap).as_late_as_possible: جدولة التعليمات في أحدث وقت ممكن، أي الإبقاء على الكيوبتات في حالة الأساس قدر الإمكان (اختصار:alap).
-
translation_method(str) - اسم تمريرة الترجمة (unroller،translator،synthesis). يمكن أن يكون أيضًا اسم الإضافة الخارجية المستخدمة لمرحلة الترجمة. -
unitary_synthesis_method(str) - اسم أسلوب التركيب الوحدوي المستخدم. القيمة الافتراضية هيdefault.
لعرض قائمة بجميع الإضافات المثبتة لمرحلة معينة، شغّل list_stage_plugins("stage_name"). مثلًا، إذا أردت عرض قائمة بجميع الإضافات المثبتة لمرحلة التوجيه، شغّل list_stage_plugins(routing).
الخطوات التالية
- راجع موضوع الخيارات الافتراضية وإعدادات الضبط.
- تعلّم كيفية ضبط مستوى التحسين.
- جرّب دليل مقارنة إعدادات المحوّل.
- راجع توثيق API للمحوّل.