الخوارزميات الكمية: تقدير الطور
Kento Ueda (15 May 2024)
يقدّم هذا الدفتر المفاهيم الأساسية وطريقة تنفيذ تحويل فورييه الكمي (QFT) وتقدير الطور الكمي (QPE).
تحميل ملف PDF للمحاضرة الأصلية. لاحظ أن بعض مقتطفات الكود قد تكون قديمة لأنها صور ثابتة.
الوقت التقريبي للتشغيل على وحدة المعالجة الكمية هو 7 ثوانٍ.
1. المقدمة
تحويل فورييه الكمي (QFT)
تحويل فورييه الكمي هو النظير الكمي لتحويل فورييه المنفصل الكلاسيكي. إنه تحويل خطي يُطبَّق على الحالات الكمية، يُعيد رسم أسس الحوسبة إلى تمثيلاتها في أساس فورييه. يؤدي QFT دورًا محوريًا في كثير من الخوارزميات الكمية، إذ يوفّر طريقة فعّالة لاستخلاص معلومات الدورية من الحالات الكمية. يمكن تنفيذ QFT بعدد من العمليات باستخدام بوابات كمية كبوابات هادامار وبوابات التحكم بالطور لـ كيوبت، مما يتيح تسريعًا أسيًا مقارنةً بتحويل فورييه الكلاسيكي.
- التطبيقات: إنه ركيزة أساسية في خوارزميات كمية مثل خوارزمية شور لتحليل الأعداد الكبيرة إلى عواملها واللوغاريتم المنفصل.
تقدير الطور الكمي (QPE)
تقدير الطور الكمي هو خوارزمية كمية تُستخدم لتقدير الطور المرتبط بمتجه ذاتي لمؤثر أحادي. تمثّل هذه الخوارزمية جسرًا بين الخصائص الرياضية المجردة للحالات الكمية وتطبيقاتها الحسابية.
- التطبيقات: يمكنها حل مسائل مثل إيجاد القيم الذاتية للمصفوفات الأحادية ومحاكاة الأنظمة الكمية.
يُشكّل كلٌّ من QFT وQPE معًا العمود الفقري لكثير من الخوارزميات الكمية التي تحل مسائل يعجز عنها الحاسوب الكلاسيكي. بنهاية هذا الدفتر، ستمتلك فهمًا واضحًا لكيفية تنفيذ هذه التقنيات.
2. أساسيات تحويل فورييه الكمي (QFT)
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram, plot_bloch_multivector
from qiskit.quantum_info import Statevector
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Sampler
from numpy import pi
بالقياس على تحويل فورييه المنفصل، يعمل QFT على الحالة الكمية لـ كيوبت ويُعيد رسمها إلى الحالة الكمية .
حيث .
أو بصيغة التمثيل بالمصفوفة الأحادية:
2.1. الحدس
يُحوّل تحويل فورييه الكمي (QFT) بين أساسَين: أساس الحوسبة (محور Z)، وأساس فورييه. لكن ماذا يعني أساس فورييه في هذا السياق؟ على الأرجح تتذكر أن تحويل فورييه لدالة يصف تحليل على دالة جيبية بتردد . بعبارة بسيطة: تحويل فورييه هو دالة تصف مقدار كل تردد الذي نحتاجه لبناء دالة من دوال الجيب (أو دوال الجيب تمام). للحصول على فهم أعمق لما يعنيه QFT في هذا السياق، تأمّل الصور المتدرجة أدناه التي تُظهر رقمًا مُرمَّزًا بالنظام الثنائي باستخدام أربعة كيوبتات:
في أساس الحوسبة، نخزّن الأرقام بالنظام الثنائي باستخدام الحالتين و.
لاحظ التردد الذي تتغيّر به الكيوبتات المختلفة؛ الكيوبت الأيسر يتقلّب مع كل زيادة في الرقم، والتالي مع كل زيادتين، والثالث مع كل أربع زيادات، وهكذا.
إذا طبّقنا تحويل فورييه الكمي على هذه الحالات، نُعيد الرسم:
(نُشير عادةً إلى الحالات في أساس فورييه بعلامة التلدة (~)).
في أساس فورييه، نخزّن الأرقام باستخدام دورانات مختلفة حول محور Z:
IFRAME
الرقم الذي نريد تخزينه يُحدّد الزاوية التي يدور عندها كل كيوبت حول محور Z. في الحالة ، تكون جميع الكيوبتات في الحالة . كما يتضح من المثال أعلاه، لترميز الحالة على 4 كيوبتات، دوّرنا الكيوبت الأيسر بمقدار دورة كاملة ( راديان). الكيوبت التالي يُدار بضعف هذا المقدار ( راديان، أو دورة كاملة)، ثم تتضاعف هذه الزاوية للكيوبت الذي يليه، وهكذا.
مجددًا، لاحظ التردد الذي يتغيّر به كل كيوبت. الكيوبت الأيسر (qubit 0) في هذه الحالة يمتلك أدنى تردد، بينما الكيوبت الأيمن يمتلك أعلاه.
2.2 مثال: QFT لكيوبت واحد
لنتأمل حال ة .
يمكن كتابة المصفوفة الأحادية على النحو:
هذه العملية هي نتيجة تطبيق بوابة هادامار ().
2.3 التمثيل الضربي لـ QFT
لنُعمّم التحويل لـ ، حيث يعمل على الحالة .
2.4 مثال: بناء دائرة تحويل فورييه الكمي لـ 3 كيوبتات
من الوصف أعلاه، قد لا يكون من الواضح كيفية بناء دائرة QFT. في الوقت الحالي، لاحظ فقط أننا نتوقع أن تمر الطورات في الثلاثة كيوبتات بمعدلات تطور مختلفة. فهم كيفية ترجمة ذلك إلى دائرة متروك كتمرين للقارئ. تتوفر مخططات وأمثلة متعددة في ملف PDF للمحاضرة. تشمل الموارد الإضافية هذا الدرس من دورة أساسيات الخوارزميات الكمية.
سنوضّح تحويل QFT باستخدام المحاكيات فقط، وبالتالي لن نستخدم إطار أنماط Qiskit حتى ننتقل إلى تقدير الطور الكمي.
# Prepare for 3 qubits circuit
qr = QuantumRegister(3)
cr = ClassicalRegister(3)
qc = QuantumCircuit(qr, cr)
qc.h(2)
qc.cp(pi / 2, 1, 2) # Controlled-phase gate from qubit 1 to qubit 2
qc.cp(pi / 4, 0, 2) # Controlled-phase gate from qubit 0 to qubit 2
qc.draw(output="mpl")
qc.h(1)
qc.cp(pi / 2, 0, 1) # Controlled-phase gate from qubit 0 to qubit 1
qc.draw(output="mpl")
qc.h(0)
qc.draw(output="mpl")
qc.swap(0, 2)
qc.draw(output="mpl")
نحاول تطبيق QFT على كمثال.
أولاً، نتحقق من التمثيل الثنائي للعدد الصحيح 5 وننشئ الدائرة التي تشفّر الحالة 5:
bin(5)
'0b101'
qc = QuantumCircuit(3)
qc.x(0)
qc.x(2)
qc.draw(output="mpl")
نتحقق من الحالات الكمية باستخدام محاكي Aer:
statevector = Statevector(qc)
plot_bloch_multivector(statevector)

أخيراً، نضيف QFT ونعرض الحالة النهائية لكيوباتنا:
qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)
qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)
qc.swap(0, 2)
qc.draw(output="mpl")
statevector = Statevector(qc)
plot_bloch_multivector(statevector)

يمكننا أن نرى أن دالة QFT عملت بشكل صحيح. لقد دُوِّر الكيوبت 0 بمقدار من دورة كاملة، والكيوبت 1 بمقدار دورات كاملة (ما يعادل من دورة كاملة)، والكيوبت 2 بمقدار دورات كاملة (ما يعادل من دورة كاملة).
2.5 تمرين: تحويل فورييه الكمي
(1) نفّذ تحويل QFT لـ 4 كيوبتات.
##your code goes here##
(2) طبّق QFT على ، وشغّل المحاكاة، ثم ارسم متجه الحالة باستخدام كرة بلوخ.
##your code goes here##
حل التمرين: QFT
(1)
qr = QuantumRegister(4)
cr = ClassicalRegister(4)
qc = QuantumCircuit(qr, cr)
qc.h(3)
qc.cp(pi / 2, 2, 3)
qc.cp(pi / 4, 1, 3)
qc.cp(pi / 8, 0, 3)
qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)
qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)
qc.swap(0, 3)
qc.swap(1, 2)
qc.draw(output="mpl")
(2)
bin(14)
'0b1110'
qc = QuantumCircuit(4)
qc.x(1)
qc.x(2)
qc.x(3)
qc.draw("mpl")
qc.h(3)
qc.cp(pi / 2, 2, 3)
qc.cp(pi / 4, 1, 3)
qc.cp(pi / 8, 0, 3)
qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)
qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)
qc.swap(0, 3)
qc.swap(1, 2)
qc.draw(output="mpl")
statevector = Statevector(qc)
plot_bloch_multivector(statevector)
