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

الحالات المرجعية

في هذا الدرس، سنستكشف كيف يمكننا تهيئة نظامنا بـحالة مرجعية لمساعدة خوارزميتنا التبايُنية على التقارب بشكل أسرع. أولًا، سنتعلم كيفية بناء حالة مرجعية يدويًا، ثم نستكشف عدة خيارات قياسية يمكن استخدامها في الخوارزمية التبايُنية.

رسم بياني لخيارات الحالات المرجعية بما فيها الحالة الافتراضية والمخصصة للتطبيق والكمومية.

الحالة الافتراضية​

تشير الحالة المرجعية إلى نقطة البداية الثابتة الأولية لمسألتنا. لتحضير حالة مرجعية، نحتاج إلى تطبيق العملية الوحدوية المناسبة غير المُعاملَة URU_R في بداية دائرتنا الكمومية، بحيث ∣ρ⟩=UR∣0⟩|\rho\rangle = U_R |0\rangle. إذا توفّر لديك تخمين مدروس أو نقطة بيانات من حل أمثل موجود، فمن المرجح أن تتقارب الخوارزمية التبايُنية بشكل أسرع إذا استخدمت ذلك كنقطة بداية.

أبسط حالة مرجعية ممكنة هي الحالة الافتراضية، حيث نستخدم الحالة الابتدائية لدائرة كمومية مؤلفة من nn كيوبت: ∣0⟩⊗n|0\rangle^{\otimes n}. بالنسبة للحالة الافتراضية، يكون العامل الوحدوي UR≡IU_R \equiv I. نظرًا لبساطتها، تُعدّ الحالة الافتراضية حالة مرجعية صالحة تُستخدم في سيناريوهات كثيرة.

الحالة المرجعية الكلاسيكية​

لنفترض أن لديك نظامًا مؤلفًا من ثلاثة كيوبتات وتريد البدء في الحالة ∣001⟩|001\rangle عوضًا عن الحالة الافتراضية ∣000⟩|000\rangle. هذا مثال على حالة مرجعية كلاسيكية خالصة، ولبنائها تحتاج فقط إلى تطبيق بوابة X على الكيوبت 00 (وفق ترتيب Qiskit للكيوبتات)، إذ إن ∣001⟩=X0∣000⟩|001\rangle = X_0 |000\rangle.

في هذه الحالة، يكون عاملنا الوحدوي UR≡X0U_R \equiv X_0، مما يعطي الحالة المرجعية ∣ρ⟩≡∣001⟩|\rho\rangle \equiv |001\rangle.

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

_needed = {"qiskit": "qiskit"}
_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 import QuantumCircuit

qc = QuantumCircuit(3)
qc.x(0)

qc.draw("mpl")

Output of the previous code cell

الحالة المرجعية الكمومية​

لنفترض أنك تهدف إلى البدء بحالة أكثر تعقيدًا تتضمن التراكب و/أو التشابك، كـ12(∣100⟩+∣111⟩)\frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

للحصول على هذه الحالة من ∣000⟩|000\rangle، أحد الأساليب هو استخدام بوابة Hadamard على الكيوبت 00 (H0H_0)، وبوابة CNOT (CX) مع الكيوبت 00 كمتحكم والكيوبت 11 كهدف (CNOT01CNOT_{01})، وأخيرًا بوابة XX على الكيوبت 22 (X2X_2).

في هذا السيناريو، يكون عاملنا الوحدوي UR≡X2CNOT01H0∣000⟩U_{R} \equiv X_2CNOT_{01}H_0|000\rangle، وحالتنا المرجعية هي ∣ρ⟩≡12(∣100⟩+∣111⟩)|\rho\rangle \equiv \frac{1}{\sqrt{2}}(|100\rangle+|111\rangle).

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)

qc.draw("mpl")

Output of the previous code cell

بناء الحالات المرجعية باستخدام دوائر القوالب​

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

from qiskit.circuit.library import TwoLocal
from math import pi

reference_circuit = TwoLocal(2, "rx", "cz", entanglement="linear", reps=1)
theta_list = [pi / 2, pi / 3, pi / 3, pi / 2]

reference_circuit = reference_circuit.assign_parameters(theta_list)

reference_circuit.decompose().draw("mpl")

Output of the previous code cell

الحالات المرجعية الخاصة بالتطبيق​

تعلم الآلة الكمومي​

في سياق المُصنِّف الكمومي التبايُني (VQC)، تُشفَّر بيانات التدريب في حالة كمومية من خلال دائرة مُعاملَة تُعرف بـخريطة الميزات، حيث تمثل كل قيمة معامل نقطة بيانات من مجموعة بيانات التدريب. zz_feature_map هو نوع من الدوائر المُعاملَة يمكن استخدامه لتمرير نقاط بياناتنا (xx) إلى خريطة الميزات هذه.

from qiskit.circuit.library import zz_feature_map

data = [0.1, 0.2]

zz_feature_map_reference = zz_feature_map(feature_dimension=2, reps=2)
zz_feature_map_reference = zz_feature_map_reference.assign_parameters(data)
zz_feature_map_reference.decompose().draw("mpl")

Output of the previous code cell

الملخص​

في هذا الدرس، تعلمت كيفية تهيئة نظامك باستخدام:

  • الحالة المرجعية الافتراضية

  • الحالات المرجعية الكلاسيكية

  • الحالات المرجعية الكمومية

  • الحالات المرجعية الخاصة بالتطبيق

يبدو عبء العمل التبايُني عالي المستوى على النحو التالي:

رسم بياني لدائرة يُعدّ فيها عامل وحدوي الحالة المرجعية.

بينما تكون الحالات المرجعية نقاط بداية ثابتة، يمكننا استخدام الشكل التبايُني لتعريف ansatz يمثل مجموعة من الحالات المُعاملَة التي تستكشفها خوارزميتنا التبايُنية.