محاكي الحاسوب الكمي
اكتب دائرة كمية صغيرة بلغة JavaScript وحاكها مباشرة في متصفحك، ثم شاهد مخطط الدائرة والاحتمالات ومتجه الحالة. أو صِف عملية عالية المستوى، مثل الجمع، وشاهد تحويلها تلقائياً إلى دائرة كمية حقيقية قابلة للعكس.
نموذج الضوضاء
لا تحسب الحواسيب الكمية الحقيقية بصورة مثالية: فالكيوبتات شديدة الحساسية وتفقد بعض معلوماتها، أي يحدث فك الترابط، مع كل تفاعل غير مرغوب مع الحرارة أو الحقول الكهرومغناطيسية أو الكيوبتات المجاورة. كما أن عمليات البوابات والقراءة النهائية ليست دقيقة تماماً. يحسب هذا المحاكي بصورة مثالية افتراضياً، ويمكن هنا تفعيل نماذج أخطاء نموذجية ومشاهدة أثرها مباشرة.
صِف عملية باستخدام quantum.add أو quantum.subtract أو quantum.multiply أو quantum.divide أو quantum.random. يبدأ Ctrl+Enter المحاكاة. يتوفر التوثيق الكامل عبر زر «التوثيق».
أُنشئت هذه الشفرة تلقائياً من شفرة البرنامج أعلاه وحُوكيت مباشرة. يمكنك تعديلها يدوياً هنا وتشغيلها مجدداً.
عُدلت الدائرة المنشأة يدوياً، لذلك أُخفي تجميع السجلات في المخطط. سيؤدي تشغيل شفرة البرنامج أعلاه مجدداً إلى استبدال هذه التغييرات.
الحد الأقصى 4000 حرف. طرائق QuantumCircuit المتاحة: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (الاسم البديل: toffoli), swap, measureAll, run. يبدأ Ctrl+Enter المحاكاة.
مخطط الدائرة
يعرض منظور الخطوات الاحتمالات ومتجه الحالة مباشرة بعد البوابة المختارة. وتنطبق نتائج shots أدناه دائماً على الدائرة الكاملة.
OpenQASM 2.0
OpenQASM 2.0 صيغة تبادل واسعة الاستخدام للدوائر الكمية، ويقرأها Qiskit وغيره. ملاحظة حول ترتيب البتات: يقرأ هذا المحاكي q0 بوصفه البت الأعلى أهمية إلى اليسار، بينما يقرأ Qiskit q[0] بوصفه الأقل أهمية؛ لذلك تظهر سلاسل البتات المقاسة معكوسة هناك.
الاحتمالات
احتمال قياس كل سلسلة بتات ممكنة، محسوب بدقة من متجه الحالة. اتجاه القراءة: q0 هو البت الأيسر الأعلى أهمية.
كرات Bloch
تظهر حالة كل كيوبت كسهم في كرة Bloch: القطب الشمالي = |0⟩، والجنوبي = |1⟩، وخط الاستواء = تراكب متساوي الأوزان. إذا كان السهم أقصر بوضوح من نصف القطر، فلا يملك الكيوبت حالة نقية مستقلة بل يكون متشابكاً. وقد تقصر الضوضاء السهم أيضاً بسبب فقدان الترابط. الكرات المشوشة تقريبية هنا؛ إذ يُحسب متوسط متجه Bloch عبر مسارات الضوضاء. وفي عرض الخطوات تتحرك الأسهم بوابة بعد أخرى من دون ضوضاء فقط.
نتائج shots
عدد مرات ظهور كل سلسلة بتات فعلياً في القياسات المحاكاة. ومع تعدد النتائج الممكنة تتذبذب الأعداد عشوائياً حول الاحتمالات الدقيقة.
متجه الحالة
السعات المركبة وراء الاحتمالات: يعطي مربع مقدار السعة، أي الجزء الحقيقي² + الجزء التخيلي²، احتمال حالتها.
| الحالة | الجزء الحقيقي | الجزء التخيلي |
|---|
الأساسيات: كيف يعمل؟
من البرنامج إلى الكيوبت الفيزيائي
الحاسوب الكمي الحقيقي أكثر من شريحة. تحول إلكترونيات التحكم الكلاسيكية الدائرة إلى نبضات دقيقة. وفي المثال تشكل ليزرات التبريد وإعادة الضخ والكيوبت والقراءة الإشارات على طاولة بصرية وتوجهها إلى حجرة مفرغة محمية. هناك تغير حالة الكيوبت وتقيسها، ثم تعود نتيجة القياس إلى الحاسوب الكلاسيكي.
الكيوبت وحالات الأساس
البت الكلاسيكي إما 0 أو 1. ويمكن أن يوجد الكيوبت أيضاً في تراكب حالتي الأساس |0⟩ و |1⟩. ومع عدة كيوبتات تُكتب جميع حالات الأساس كسلسلة بتات، مثل |10⟩ لكيوبتين، حيث يكون q0 في هذا المحاكي دائماً البت الأعلى أهمية إلى اليسار.
التراكب
يحمل الكيوبت في التراكب مكونات عدة حالات أساس في الوقت نفسه. توصف هذه المكونات بسعات مركبة، ويعطي مربع مقدار السعة احتمال الحصول على الحالة المقابلة عند القياس.
كرة Bloch
يمكن تمثيل حالة كيوبت واحد بسهم داخل كرة: يمثل القطب الشمالي |0⟩، والقطب الجنوبي |1⟩، وتمثل نقاط خط الاستواء كلها تراكبات متساوية الأوزان؛ ويحدد الطور اتجاه السهم على خط الاستواء. تدير بوابات الدوران rx، ry، و rz السهم حول المحور الموافق، بينما تديره بوابات الطور مثل S وT حول محور Z. ومع الكيوبتات المتشابكة ينكمش السهم نحو مركز الكرة، فلا يعود للكيوبت حالة نقية خاصة به؛ وهكذا يصبح التشابك مرئياً حرفياً.
القياس وshots
measureAll() تقيس جميع الكيوبتات معاً وتنهي الدائرة. ولأن القياس الواحد لا يعطي إلا نتيجة عشوائية واحدة، تُقاس الدائرة تصورياً عدة مرات تسمى shots باستخدام run({ shots })، فيظهر توزيع الاحتمالات كمدرج تكراري. وتُحسب الاحتمالات الدقيقة مباشرة من متجه الحالة أيضاً، بمعزل عن عشوائية shots.
بوابة Hadamard
تأخذ بوابة Hadamard h(q) الكيوبت من حالة محددة (|0⟩ أو |1⟩) إلى تراكب متساوي الأوزان بين |0⟩ و |1⟩ ، أي نحو 50% / 50% عند القياس.
بوابات الطور: S وT
لا تغيّر البوابتان s(q) و t(q) احتمالات قياس كيوبت منفرد؛ بل تديران طور سعة |1⟩ بمقدار 90° لـS و45° لـT. لا يظهر أثرهما إلا مع التراكب: بين بوابتي Hadamard يحدد الطور كيف تتجمع السعات أو تلغي بعضها بالتداخل. أما نسختا dagger sdg(q) و tdg(q) فتدوران في الاتجاه المعاكس تماماً وتلغيان S وT. القاعدة: بوابتا T تصنعان S، وبوابتا S تصنعان Z.
CNOT والتشابك الشرطي
تقلب بوابة CNOT cnot(control, target) الكيوبت الهدف فقط عندما يكون كيوبت التحكم في الحالة |1⟩. وإذا كان التحكم في تراكب مسبقاً فقد ينشأ تشابك، فلا يعود وصف الكيوبتين مستقلاً كما في حالة بيل. أما إذا كان التحكم في حالة أساس محددة، فلا تنفذ CNOT إلا قلب بت شرطياً بلا تشابك. لذلك لا تنشئ كل CNOT تشابكاً تلقائياً.
CZ: النظير المتناظر لـCNOT
تعكس بوابة CZ cz(a, b) إشارة السعة فقط عندما يكون الكيوبتان |1⟩. وعلى خلاف CNOT، لا يوجد تحكم أو هدف؛ تعمل البوابة بالطريقة نفسها على الكيوبتين، لذا تُرسم كنقطتين متصلتين. يمكن تحويل CZ وCNOT إحداهما إلى الأخرى: CNOT هي CZ يمر هدفها عبر Hadamard قبلها وبعدها. وتعد CZ لبنة أساسية في خوارزميات مثل بحث Grover.
حالة GHZ: تشابك ثلاثي
تمدد حالة GHZ، المسماة نسبة إلى Greenberger وHorne وZeilinger، مبدأ حالة بيل إلى ثلاثة كيوبتات: تشبك بوابة Hadamard وبوابتا CNOT الكيوبتات كلها، فلا يعطي القياس إلا |000⟩ أو |111⟩ ، ولا يعطي سلاسل مختلطة أبداً. لا يعود لأي كيوبت حالة مستقلة؛ فالمعلومة تكمن حصراً في الارتباط المشترك.
خوارزمية Deutsch: أصغر أفضلية كمية
تجيب خوارزمية Deutsch بتقييم واحد لأوراكل مجهول عن سؤال يحتاج حاسوباً كلاسيكياً إلى تقييمين: هل الدالة ثابتة أم متوازنة؟ تكمن الحيلة في تمرير الإدخال عبر الأوراكل في تراكب؛ وبفضل التداخل تُشفّر الإجابة بوضوح في كيوبت الإدخال. ويقع مبدأ ارتداد الطور هذا في صميم معظم الخوارزميات الكمية.
بحث Grover: تضخيم السعات
يجد بحث Grover عنصراً معلّماً في مجموعة غير مرتبة باستعلامات أقل كثيراً من البحث الكلاسيكي. يعلّم الأوراكل الحالة المطلوبة بقلب الطور عبر CZ هنا، ثم يضخم مؤثر الانتشار السعة المعلّمة على حساب البقية. ومع كيوبتين تكفي دورة واحدة لقياس النتيجة الصحيحة باحتمال 100%.
الجمع القابل للعكس: من quantum.add() إلى دائرة
يحوّل محرر شفرة البرنامج أعلاه quantum.add({ a, b }) إلى دائرة من بوابات X وCNOT وCCNOT (Toffoli) تعيد إنتاج الجمع الكلاسيكي بصورة قابلة للعكس تماماً: يمكن عكس كل بوابة لأن لا معلومة تُهدر. وتقلب بوابة CCNOT (ccnot(c1, c2, target)) الكيوبت الهدف فقط عندما يكون كيوبتا التحكم |1⟩ ، وهي لبنة تكفي لبناء أي دائرة كلاسيكية بصورة قابلة للعكس، ومنها جامع كامل بالحمل. تُهيأ المدخلات A وB كحالات أساس محددة ببوابات X. وبما أن الدائرة تمر بحالات محددة لا تراكبات، يعطي القياس نتيجة واحدة صحيحة كلاسيكياً باحتمال 100%. لذلك quantum.add() ينتج نتيجة حتمية رغم المحاكاة الكمية، بدلاً من حالات متعددة باحتمالات أقل من 100%.
الطرح: الجمع بالعكس
لأن كل بوابة كمية قابلة للعكس تماماً، يمكن تنفيذ دائرة الجامع كاملة بالعكس، فيتحول الجمع إلى طرح: quantum.subtract({ a, b }) يستخدم بوابات الجامع نفسها بترتيب عكسي ليحسب a − b. وهذا هو مبدأ الحوسبة القابلة للعكس: لا تدمر أي خطوة معلومة ويمكن التراجع عنها. يتطلب هذا الإصدار a ≥ b لتجنب نتيجة سالبة.
الضرب: quantum.multiply()
ينشأ الضرب من لبنات الجمع القابلة للعكس نفسها: وفق الطريقة المدرسية يُجمع العامل a عدة مرات في مواضع مزاحة توافق بتات b المضبوطة. وكل جمع جزئي جامع حمل متموج قابل للعكس. ولأن سجل الناتج ينمو مع حاصل الضرب، تقتصر العوامل على 3 بتات (0–7)، حتى تتسع العوامل والناتج وكيوبت الحمل ضمن 10 كيوبتات.
القسمة: quantum.divide()
تستخدم القسمة أيضاً لبنات قابلة للعكس فقط: quantum.divide({ a, b }) تنفذ قسمة مطولة مبنية على طرح المقسوم عليه بصورة مزاحة وقابلة للعكس من سجل الباقي؛ والنتيجة هي خارج القسمة و الباقي (a = quotient · b + remainder). ولأن المقسوم والمقسوم عليه وخارج القسمة و كيوبت الاستلاف يجب أن تتسع كلها ضمن 10 كيوبتات، فالقسمة أشد العمليات تقييداً: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 يجب تحقق الشرط، ويجب أن يكون المقسوم عليه b ≥ 1، فلا قسمة على صفر. إذا تجاوز إدخال الميزانية، يبلغ المحرر عنه بدلاً من الحساب.
العشوائية الحقيقية: quantum.random()
لا تستطيع الحواسيب الكلاسيكية توليد عشوائية حقيقية؛ فأعدادها العشوائية تنتج من خوارزميات حتمية زائفة. أما الحاسوب الكمي فيستطيع: quantum.random({ bits }) يضع كل بت في تراكب 50/50 ببوابة Hadamard، والقياس وحده يقرر بصورة غير قابلة للتنبؤ القيمة الناتجة. على العتاد الكمي الحقيقي تكون هذه عشوائية فيزيائية؛ ويحاكيها هذا المحاكي بعشوائية المتصفح الزائفة.
المحاكي مقابل العتاد الكمي الحقيقي
يحسب هذا المحاكي الحالة بدقة بفاصلة عائمة كلاسيكية في متصفحك، ولا ينجح ذلك إلا لأن الدوائر صغيرة حتى 10 كيوبتات. تستخدم الحواسيب الكمية الحقيقية كيوبتات فيزيائية وتتأثر بفك الترابط والضوضاء، ولا تظهر أفضليتها إلا في دوائر أكبر لا يمكن عملياً محاكاتها كلاسيكياً. هذه أداة تعليم، وليست معالجاً كمياً حقيقياً.