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

تحويل الدوائر الفرميونية

مهم

المفاهيم في هذا الدليل متاحة حاليًا في واجهة Python البرمجية فقط. ستتوفر وظائف مكافئة في واجهة C البرمجية في إصدار مستقبلي.

يشرح هذا الدليل كيفية تحويل FermionicCircuit إلى QuantumCircuit قياسية. ويتابع مع مثال التطور الزمني نفسه من دليل الدوائر الفرميونية.

مراحل التحويل​

كما هو موضح في qiskit_fermions.transpiler، تقسّم مديرو التمريرات المُعدّة مسبقًا في هذا المشروع التحويل إلى المراحل التالية:

الإدخال​

يحوّل دائرة الإدخال إلى بنية بيانات رسم بياني موجّه لا دوري (DAG).

التحسين​

يُبقي الدائرة في الفضاء الفرميوني. تستخدم هذه التمريرات البنية الفرميونية وعلاقات التبديل بينما تظل المعرفة الواعية بالمسألة متاحة بالكامل. F2FSynthesis هي التمريرة التي تُجري تروترة (Trotterization) لبوابة Evolution هنا، بصيغة حاصل ضرب أو بواسطة FermionicQDrift، وQDriftTrotterization هي نسختها الواعية بالإشغال؛ راجع تمريرات التحسين للمجموعة الكاملة، وتركيب بوابة Evolution في الفضاء الفرميوني لمعرفة كيفية اختيار صيغة حاصل الضرب.

التخطيط​

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

التركيب​

يحوّل البوابات الفرميونية إلى عمليات كيوبت باستخدام تعيين فرميون إلى كيوبت المختار. تُحوَّل نسخ FermionicGate إلى تسلسلات من البوابات الكمومية القياسية. ويُنقَل الحاجز (barrier) إلى كل كيوبت من كل سجل لمسه، فيستمر في الفصل بين البوابات على جانبيه خلال مرحلة الكيوبت.

الكيوبت​

يحوّل دائرة الكيوبت الناتجة باستخدام طرق Qiskit القياسية، بما في ذلك التحسين والتخطيط والتوجيه للعتاد المستهدف.

الإخراج​

يحوّل بنية بيانات DAG الداخلية إلى صيغة الإخراج المطلوبة.

مثال عملي: التحويل باستخدام جوردان-فيغنر​

استخدم مدير التمريرات المُعدّ مسبقًا لتحويل دائرتك الفرميونية باستخدام تعيين فرميون إلى كيوبت جوردان-فيغنر:

>>> from qiskit_fermions.circuit import FermionicCircuit
>>> from qiskit_fermions.circuit.library import Evolution
>>> from qiskit_fermions.operators import FermionOperator, cre, ann
>>> from qiskit_fermions.transpiler.presets import generate_preset_jw_pass_manager
>>>
>>> # Create the same fermionic circuit from the previous guide
>>> circuit = FermionicCircuit(4)
>>> hamiltonian = FermionOperator.from_terms([
... ([cre(0), ann(2)], 0.5),
... ([cre(2), ann(0)], 0.5),
... ([cre(1), ann(3)], 0.5),
... ([cre(3), ann(1)], 0.5),
... ])
>>> hamiltonian.groups = [0, 0, 1, 1]
>>> evolution = Evolution(4, hamiltonian, time=1.0)
>>> circuit.append(evolution, circuit.register)
>>>
>>> # Generate the Jordan-Wigner transpilation pipeline
>>> pm = generate_preset_jw_pass_manager()
>>>
>>> # Transpile the fermionic circuit to a qubit circuit
>>> qubit_circuit = pm.run(circuit)
>>>
>>> # The result is a standard QuantumCircuit
>>> print(type(qubit_circuit))
<class 'qiskit.circuit.quantumcircuit.QuantumCircuit'>

The transpiled QuantumCircuit of the fermionic time evolution.

المقارنة مع سير العمل التقليدي​

يصف دليل الدوائر الفرميونية كيف يجري سير العمل التقليدي ترميز فرميون إلى كيوبت قبل بناء QuantumCircuit. قارن بين النهجين:

>>> from qiskit_fermions.mappers.library import jordan_wigner
>>> from qiskit.circuit import QuantumCircuit
>>> from qiskit.circuit.library import PauliEvolutionGate
>>>
>>> # Map the fermionic Hamiltonian to a qubit operator
>>> qubit_hamiltonian = jordan_wigner(hamiltonian, 4).simplify()
>>>
>>> # Build the QuantumCircuit directly
>>> quantum_circuit = QuantumCircuit(4)
>>> pauli_evolution = PauliEvolutionGate(qubit_hamiltonian, time=1.0)
>>> quantum_circuit.append(pauli_evolution, quantum_circuit.qubits)
<qiskit.circuit.instructionset.InstructionSet object at ...>

The directly constructed QuantumCircuit of the fermionic time evolution.

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

سير العمل المتقدمة​

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

  • تخصيص تمريرات المحوِّل التي تعمل خلال كل مرحلة.

  • اختيار صيغة حاصل الضرب التي تُجري تروترة لبوابة Evolution في الفضاء الفرميوني، إما لكل بوابة أو لخط كامل باستخدام F2FSynthesis (راجع تركيب بوابة Evolution في الفضاء الفرميوني).

  • تنفيذ تعيينات فرميون إلى كيوبت مخصصة عن طريق إنشاء إضافات تركيب (راجع F2QSynthesisPlugin).

  • بناء تمريرات محوِّل مخصصة.