انتقل إلى المحتوى الرئيسي

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

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

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

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

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

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

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

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

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

# Added by doQumentation — required packages for this notebook
!pip install -q qiskit
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).

في هذا السيناريو، يكون عاملنا الوحدوي URX2CNOT01H0000U_{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 يمثل مجموعة من الحالات المُعاملَة التي تستكشفها خوارزميتنا التبايُنية.