ToolDingo

محاكي الحاسوب الكمي

اكتب دائرة كمية صغيرة بلغة JavaScript وحاكها مباشرة في متصفحك، ثم شاهد مخطط الدائرة والاحتمالات ومتجه الحالة. أو صِف عملية عالية المستوى، مثل الجمع، وشاهد تحويلها تلقائياً إلى دائرة كمية حقيقية قابلة للعكس.

نموذج الضوضاء

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

ينطبق على كل محاكاة في هذه الصفحة، سواء التشغيل عالي المستوى أو الدوائر المكتوبة يدوياً.
%
لكل بوابة وكيوبت مشارك، أو لكل بت مقروء في نموذج القراءة. اختر قيمة للسيناريو الذي تريد استكشافه.

شفرة البرنامج

صِف عملية باستخدام quantum.add أو quantum.subtract أو quantum.multiply أو quantum.divide أو quantum.random. يبدأ Ctrl+Enter المحاكاة. يتوفر التوثيق الكامل عبر زر «التوثيق».

التوثيق

صِف عملية في المحرر، فتُنشأ منها دائرة كمية حقيقية تلقائياً وتُحاكى. الحد الأقصى 4000 حرف. Ctrl+Enter يبدأ المحاكاة.

الصيغةالوصفالحدود
quantum.add({ a, b })جمع عددينالنتيجة بحد أقصى 4 بتات (0–15)
quantum.subtract({ a, b })الطرحa ≥ b، بحد أقصى 4 بتات
quantum.multiply({ a, b })الضربالعوامل 0–7 (3 بتات)
quantum.divide({ a, b })القسمة (خارج القسمة + الباقي)b ≥ 1؛ قيد شديد: bits(a)+bits(b)+bits(a÷b)+1 ≤ 10
quantum.random({ bits })عدد عشوائي كمي حقيقيمن 1 إلى 10 بتات

اختر مثالاً

شفرة الدائرة

الحد الأقصى 4000 حرف. طرائق QuantumCircuit المتاحة: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (الاسم البديل: toffoli), swap, measureAll, run. يبدأ Ctrl+Enter المحاكاة.

اختر مثالاً

الأساسيات: كيف يعمل؟

مخطط إعداد حاسوب كمي: يوجه حاسوب تحكم عدة حزم ليزر عبر طاولة بصرية إلى كيوبت داخل حجرة مفرغة.
من حاسوب التحكم الكلاسيكي عبر الليزر والبصريات إلى الكيوبت الفيزيائي.

من البرنامج إلى الكيوبت الفيزيائي

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

الكيوبت وحالات الأساس

البت الكلاسيكي إما 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 كيوبتات. تستخدم الحواسيب الكمية الحقيقية كيوبتات فيزيائية وتتأثر بفك الترابط والضوضاء، ولا تظهر أفضليتها إلا في دوائر أكبر لا يمكن عملياً محاكاتها كلاسيكياً. هذه أداة تعليم، وليست معالجاً كمياً حقيقياً.

الأسئلة الشائعة

هل هذا حاسوب كمي حقيقي؟
لا. هذه الأداة محاكي كلاسيكي لمتجه الحالة يحسب رياضيات دائرة كمية صغيرة، حتى 10 كيوبتات، بدقة باستخدام حساب الفاصلة العائمة في متصفحك. يستخدم العتاد الكمي الحقيقي كيوبتات فيزيائية ويعمل بصورة مختلفة جذرياً.
أي بت يمثله q0 في سلسلة مثل "10"؟
يمثل q0 دائماً البت الأعلى أهمية إلى اليسار. لذلك تنشئ x(0) مع كيوبتين الحالة |10⟩ لا |01⟩.
ماذا تعني shots؟
هي عدد القياسات المتكررة المحاكاة، من 1 إلى 10,000. يسحب كل قياس نتيجة عشوائياً وفق توزيع الاحتمالات الدقيق لمتجه الحالة، بينما لا تعتمد الاحتمالات الدقيقة نفسها على الصدفة وتُعرض منفصلة.
لماذا تعرض بعض الأمثلة رسالة خطأ؟
يسمح نطاق الإصدار الأولي بدائرة واحدة واستدعاء run() واحد فقط بعد measureAll(). وتُرفض فهارس الكيوبتات غير الصالحة والبوابات بعد measureAll() والزوايا أو أعداد shots غير الصالحة وأخطاء الصياغة برسالة مفهومة.
ماذا تفعل بوابات Hadamard وX وCNOT؟
تبدّل X بين |0⟩ و|1⟩. وتحول Hadamard حالة أساس إلى تراكب متساوي الأوزان. وتقلب CNOT الهدف فقط عندما يكون التحكم |1⟩، ويمكن أن تنشئ تشابكاً مع التراكب.
كيف ينشأ التشابك؟
يطبق أحد الأمثلة Hadamard على الكيوبت الأول ثم CNOT على الثاني. لا يعود وصف الكيوبتين مستقلاً، ويعطي القياس نتائج مترابطة مثل |00⟩ أو |11⟩.