الجيل الإجرائي مع الحوسبة الكمومية





سنقوم اليوم بتحليل حديث James Wootton من IBM Quantum في مؤتمر FDG 2020. سنتحدث عن الحوسبة الكمومية - وهي تقنية واعدة محتملة ، ومع ذلك ، لا يوجد سوى القليل من التطبيقات في المرحلة الحالية من التطوير. ومع ذلك تم العثور على واحد منهم في الجيل الإجرائي.



دعونا نتحدث بمزيد من التفصيل عن كيفية تنفيذه على الكيوبتات ، وكذلك إعطاء أكواد البرنامج.









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







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



يعد بناء أجهزة كمبيوتر قادرة على أداء الحوسبة الكمومية مهمة شاقة بحد ذاتها ، وهي قيد الإنشاء منذ سنوات. أحد المعلمات المهمة لوصف جهاز كمي هو عدد الكيوبتات. في الواقع ، هذه هي نفس البتات ، لكنها مطبقة بطريقة كمومية - وبالتالي لديها حالات أكثر من المعتاد 0 و 1. في سياق فيزياء الكم ، يمكننا كتابة قيم البت باستخدام زوج من المتجهات المتعامدة: | 0⟩ و | 1⟩. في حالة الكيوبتات ، سيتم استكمال وصف الحالات بسعة معقدة c 0 و c 1 ، والتي تحقق الشرط: | ج 0 | 2 + | ج 1 | 2= 1 ، بسبب تحقيق عدد أكبر من حالات الكيوبت c 0 | 0⟩ + c 1 | 1⟩.







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



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



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







هناك أيضًا أجهزة ذات طاقة أكثر تواضعًا ، تتكون من حوالي 20 كيوبت. كما أتاحت شركة IBM البرامج الكمومية التي تستخدم ما يصل إلى 15 كيوبت مجانًا. بالإضافة إلى ذلك ، فقد أنشأوا برنامج محاكاة للمساعدة في تصميم واختبار البرامج الكمية. وبينما تعد محاكاة أكثر من 50 كيوبت مهمة حسابية شاقة ، حتى الكمبيوتر المحمول الخاص بك يمكنه التعامل مع ما يقرب من 20 كيوبت دون أي مشاكل.



كل العوامل مجتمعة تجعل 20 كيوبت علامة فارقة. بغض النظر عما إذا كنا نستخدم أجهزة كمومية حقيقية أو مضاهاة ، فإن تشغيل برنامج كمي من هذا المستوى ليس صعبًا للغاية.







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



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



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



لكن دعونا لا نتقدم على أنفسنا. تتمثل الخطوة الأولى نحو عصر توسيع المنفعة في إثبات أنه حتى البرامج الكمومية ذات 20 كيلوبت يمكن أن تكون مفيدة. هذا ما سنفعله.







حان الوقت الآن لتوضيح بعض التفاصيل.



الجيل الإجرائي يعني أننا بحاجة إلى إنشاء شيء ما. ولكن ماذا؟



يعتبر توليد التضاريس هو الأكثر وضوحًا ، لذا فلنبدأ بذلك.



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



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







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



نستخدم بشكل أساسي العمليات التي يمكن اعتبارها أشكالًا جزئية لبوابة NOT. عند تطبيقها على وحدات البت العادية ، لا تغير القيمة من 0 إلى 1 والعكس صحيح. بمساعدة البوابات الكمومية ، يمكننا تحديد معلمات هذا العنصر لإجراء عملية يمكن أن تؤدي نصف NOT ، أو ربع ، أو أي جزء كسري آخر يمكن تمثيله بمجموعة من 2 n من السعات من n كيوبت.



تعمل الوظيفة أدناه على تحويل الصورة الأصلية إلى دائرة كمومية:



def height2circuit(height):
#   
L = max(max(height))+1
#  
grid = make_grid(L)
#    
n = 2*int(np.ceil(np.log(L)/np.log(2)))
#   
state = [0]*(2**n)
#    
H = 0
for bit string in grid:
(x,y) = grid[bit string]
if (x,y) in height:
h = height[x,y]
state[ int(bit string,2) ] = np.sqrt( h )
H += h
#  
for j,amp in enumerate(state):
state[ j ] = amp/np.sqrt(H)
#   
qc = QuantumCircuit(n,n)
qc.initialize(state,range(n))
#   Qiskit 
# qc.initialize( state, qc.qregs[0])
return qc


ثم نحتاج إلى إجراء العملية المعاكسة - تحويل دائرة الكم إلى صورة:



def circuit2height(qc):
#     
n = qc.num_qubits
grid = make_grid(int(2**(n/2)))
#     
ket = qi.Statevector(qc.data[0][0].params)
qc.data.pop(0)
#        
ket = ket.evolve(qc)
#   
p = ket.probabilities_dict()
#       
max_h = max( p.values() )
#      
height = {}
for bit string in p:
if bit string in grid:
height[grid[bit string]] = p[bit string]/max_h
return height


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



في المثال أعلاه في (أ) ، نبدأ بزوج من النقاط التي تبدو عشوائية. تدريجيًا ، يتعرضون لطمس ، وبعد ذلك يتم فرض تأثيرات التداخل عليهم. هذا يؤدي إلى ظهور نمط - في حالتنا ، مثل رقعة الشطرنج على (و). هذه النتيجة بالذات لها اتصال واضح بوحدتي البكسل التي بدأنا بها. إذا كنت تأخذ بيانات أخرى كنقطة بداية ، فستكون النتيجة أيضًا مختلفة تمامًا.



تم تطوير Quantum Blur واختباره على العديد من الألعاب المزدحمة. يتم استخدامه بشكل أساسي لإنشاء القوام وخرائط المستوى.







بعد إنشاء هذه الخرائط ، نستخدمها في التناظرية الكمومية لضوضاء بيرلين عالية التردد.



لذلك نقوم الآن بإنشاء ملف التعريف الرئيسي - على سبيل المثال ، الجزر - بطريقة أخرى - كما في © في مثالنا. ثم نحتاج إلى مجموعة أولية من البكسل كما في (أ). نقوم بطمسها كميًا لإنشاء نمط مثل (ب). بعد ذلك نقوم بتطبيقه على الملف الشخصي الرئيسي لإنشاء المشهد النهائي.



يمكنك مشاهدة مثال ثنائي الأبعاد هنا ، بالإضافة إلى العرض ثلاثي الأبعاد الذي تم استخدامه في لعبة IBM QiskitBlocks التعليمية. تم أيضًا تطوير تفاصيل مثل معلومات حول نوع العشب وموضع الأشجار في العرض ثلاثي الأبعاد باستخدام العمليات الكمية.









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



ينقل النقل الآني الكمي المعلومات بين الكيوبتات. لذلك نأخذ سجلين كيوبت من نفس الحجم ونغير حالتهما. لنستخدم هذه العملية لإنشاء رسم متحرك للانتقال.







يمكن أيضًا استخدام فكرة تشفير مماثلة لأشكال أخرى من البيانات. حاول Wootton استخدامه في الموسيقى:





ومستوى ماريو:





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



كما استخدمت الفنانة ليبي هيني بعض هذه الأفكار كنقطة انطلاق لعملها.





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







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



في غضون ذلك ، يمكنك تجربة تأثير ضبابية الكم بنفسك. إنه مكتوب بلغة Python ، ولكن يوجد أيضًا مكون إضافي لـ Unity . ربما ستكون مفيدة لك.



رابط المقال كاملاً: هنا .



All Articles