الحالات المرجعية
في هذا الدرس، سنستكشف كيف يمكننا تهيئة نظامنا بـحالة مرجعية لمساعدة خوارزميتنا التبايُنية على التقارب بشكل أسرع. أولًا، سنتعلم كيفية بناء حالة مرجعية يدويًا، ثم نستكشف عدة خيارات قياسية يمكن استخدامها في الخوارزمية التبايُنية.
الحالة الافتراضية
تشير الحالة المرجعية إلى نقطة البداية الثابتة الأولية لمسألتنا. لتحضير حالة مرجعية، نحتاج إلى تطبيق العملية الوحدوية غير المُعاملَة في بداية دائرتنا الكمومية، بحيث . إذا توفرت لديك تخمين مستنير أو نقطة بيانات من حل أمثل موجود، فمن المرجح أن تتقارب الخوارزمية التبايُنية بشكل أسرع إذا استخدمت ذلك كنقطة بداية.
أبسط حالة مرجعية ممكنة هي الحالة الافتراضية، حيث نستخدم الحالة الابتدائية لدائرة كمومية مؤلفة من كيوبت: . بالنسبة للحالة الافتراضية، يكون العامل الوحدوي . نظرًا لبساطتها، تُعدّ الحالة الافتراضية حالة مرجعية صالحة تُستخدم في سيناريوهات كثيرة.
الحالة المرجعية الكلاسيكية
لنفترض أن لديك نظامًا مؤلفًا من ثلاثة كيوبتات وتريد البدء في الحالة عوضًا عن الحالة الافتراضية . هذا مثال على حالة مرجعية كلاسيكية خالصة، ولبنائها تحتاج فقط إلى تطبيق بوابة X على الكيوبت (وفق ترتيب Qiskit للكيوبتات)، إذ إن .
في هذه الحالة، يكون عاملنا الوحدوي ، مما يعطي الحالة المرجعية .
# 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")
الحالة المرجعية الكمومية
لنفترض أنك تهدف إلى البدء بحالة أكثر تعقيدًا تتضمن التراكب و/أو التشابك، كـ.
للحصول على هذه الحالة من ، أحد الأساليب هو استخدام بوابة Hadamard على الكيوبت ()، وبوابة CNOT (CX) مع الكيوبت كمتحكم والكيوبت كهدف ()، وأخيرًا بوابة على الكيوبت ().
في هذا السيناريو، يكون عاملنا الوحدوي ، وحالتنا المرجعية هي .
qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.x(2)
qc.draw("mpl")
بناء الحالات المرجعية باستخدام دوائر القوالب
يمكننا أيضًا استخدام دوائر قوالب متنوعة، مثل 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")
الحالات المرجعية الخاصة بالتطبيق
تعلم الآلة الكمومي
في سياق المُصنِّف الكمومي التبايُني (VQC)، تُشفَّر بيانات التدريب في حالة كمومية من خلال دائرة مُعاملَة تُعرف بـخريطة الميزات، حيث تمثل كل قيمة معامل نقطة بيانات من مجموعة بيانات التدريب. zz_feature_map هو نوع من الدوائر المُعاملَة يمكن استخدامه لتمرير نقاط بياناتنا () إلى خريطة الميزات هذه.
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")
الملخص
في هذا الدرس، تعلمت كيفية تهيئة نظامك باستخدام:
- الحالة المرجعية الافتراضية
- الحالات المرجعية الكلاسيكية
- الحالات المرجعية الكمومية
- الحالات المرجعية الخاصة بالتطبيق
يبدو عبء العمل التبايُني عالي المستوى على النحو التالي:
بينما تكون الحالات المرجعية نقاط بداية ثابتة، يمكننا استخدام الشكل التبايُني لتعريف ansatz يمثل مجموعة من الحالات المُعاملَة التي تستكشفها خوارزميتنا التبايُنية.