المعلوماتية > الذكاء الصنعي

لغة برمجية جديدة للتحكم بطريقة حركة الروبوتات

لعلَّ أجملِ ما يمكن ملاحظته في فصل الخريف هو التجمعُ الهائلُ لأسراب الطيورالمهاجرة وهي تحلّقُ في السماء جماعاتٍ جماعات. هل تساءلت يومًا عن السر الكامن خلف هذا التنظيم المذهل بين الطيور وتنوع أشكال الأسراب؟

لقد اتضح للعلماء أن السرَّ يكمنُ في أن كلِّ طيرٍ من السرب يتبعُ مجموعةً من القواعد البسيطة التي تحكمُ كيف يتواصلُ مع الطيور الأخرى أثناء الطيران، فيما تظهر النتيجةُ النهائية لهذا التواصل معقدةً لعيان. لسنوات عديدة، تمت محاكاةُ هذا السلوك على أجهزة الحاسوبِ بنجاح، لكن حتى الآن لم يتمكن أحدٌ من إعادة إنتاجه على أرض الواقع باستعمال مجموعةٍ من الروبوتات الطائرة أو حتى السائرة، وذلك لسببين: الأول هو أنه حتى الساعة، لم يتمَّ إنتاجُ روبوتاتٍ بانسيابيةِ وسرعة الطيور ذاتها، وحتى مع وجود روبوتات أقل انسيابية، تبقى المهمةُ صعبة، وهنا يأتي السبب الثاني وهو عدم وجودِ طريقةٍ سهلة للتحكم في السرب ككل.

يتغيرُ العامل الأول بسرعة، حيث يتمُّ اختراعُ روبوتات- طائرة وسائرة- قادرةٍ وغيرِ مكلفة، مما يدفع العديدَ من الباحثين والهواة والفنانين لتجريب هذه الروبوتات ودراسة السلوكِ الذي تنتجُه. يتفق هؤلاء على أن التحكمَ بمجموعة من الروبوتات المتجانسةِ يعدُّ تحديًا حقيقيًا. وبغياب لغةٍ برمجية خاصة، وجب عليهم التعاملُ مع المشاكل عينِها في كل مرة وبالطريقة عينِها.

اليوم، قام "Carlo Pinciroli"، من مدرسة «مونتريال» متعددة التقنيات بكندا وبمساعدة فريقه، بتطوير لغة البرمجة: "Buzz" وهي لغةُ برمجةٍ خاصة بأسراب الروبوتات غير المتجانسة.

تعتمد اللغةُ الجديدة أسلوبين للتحكم بالسرب، الأول: التحكمُ من أسفل لأعلى (bottom-up)، حيث يتم التحكمُ بكل روبوت منفردًا بشكل مستقل عن السرب. هذه الطريقة مهمةٌ من أجل ضمانِ التواصل وتبادل المعلومات بين الروبوتات على المستوى الفردي، غير أنها تصبحُ معقدةً كلما زاد حجم السرب.

وهنا يأتي الأسلوب المعاكس: التحكم من أعلى لأسفل (top-down)، حيث يتم التحكمُ بالسرب كوِحدةٍ واحدة، وهو أسلوبٌ فعال في حالات الأسراب كبيرة الحجم، لكنه لا يسمح بالتحكم الدقيق في السلوكيات الفردية للروبوت.

يتفق Pinciroli وزملاؤه أن إمكانيةَ اللغة الجديدة في الجمع بين الطريقتين ستمكنُ المبرمجَ من اختيار الطريقة الأكثرِ ملائمةً للخوارزمية السربية التي يريد دراستَها. كما تسمحُ هذه اللغةُ أيضًا بالجمع بين الأوامر بطريقة مفهومةٍ وبنتائجَ متوقعة، مما يجعلها سهلة الاستعمال. كما أنها قابلةٌ للتمديد، وبالتالي يمكن استعمالُها بفاعلية مع الأسراب متغيرة الأحجام.

مبادئ تصميم اللغة:

يعتمد تصميم لغة Buzz على مجموعةٍ من المبادئ هي:

سربٌ منفصل وخطوات تنفيذٍ متدرجة: يتألف السربُ من مجموعة متمايزةٍ من الروبوتات. يحمل كل روبوت بداخله آلةَ Buzz افتراضية (Buzz Virtual Machine)، ويقوم كلُّ واحد بتنفيذ الـ«سكريبت» الخاص به، وتتم عملية التنفيذ بطريقة تدريجيةٍ وفق خمسِ مراحل هي:

تجميعُ بيانات المستشعرات وتخزينها في الآلة الافتراضية (BVM).

تجميع الرسائل الواردة ومعالجتها من قبل الآلة الافتراضية (BVM).

تنفيذ جزء من «سكريبت» Buzz،

إرسال الرسائل الموجودة في طابور المخرجات (output queue) للجهاز الافتراضي (BVM).

تجميع بيانات تفعيل المشغلات (actuators) من الجهاز الافتراضي وتطبيقها على الأجهزة،

صيغة قابلة للتجزئة وسهلة التنبؤ: تستعمل لغةُ Buzz صيغةً أمرية بسيطة مستوحاة من لغات مثل Python وLua وJavaScript. تسمح طريقةُ صياغة اللغة بتعلمِها وفهمِها بسهولة. كما تسمح بكتابةِ سكريبتات سهلة التنبؤ وقابلة للتجزئة؛ يقصد بـ «سهلة التنبؤ» أنه بإمكان المبرمج الاستدلال على نتيجة السكريبت بمجرد قراءته، وذلك لوضوح الكلمات المستعملة في صياغة اللغة، أما «قابلية التجزئة» فيقصد بها تجزئة البرنامج إلى صفوف(classes) ودوال واستعمالها كوحدات للبرمجة (modules).

توفير الدعم للروبوتات غير المتجانسة (support for heterogeneous robots): صُممت لغة Buzz خصيصًا لتدعم أسراب الروبوتات غير المتجانسة، لهذا الغرض طورت كـ «لغة امتداد»؛ أي لغة ترث خصائصَ وميزاتِ لغات أخرى وتضيف عليها التحسينات المناسبة.

التجريد على مستوى السرب (swarm-level abstraction): من أحدث سماتِ اللغة الجديدة هي قدرتها على التعامل مع أسراب الروبوتات، أي يمكنُ إنشاءُ وحذف أسراب وتنفيذ عمليات المجموعات عليها من الاتحاد والتقاطع والطرح بين الأسراب. ُيعنى كل سرب بمجموعة من العمليات. ويمكنُ استخدامها من أجل التنسيق لتنفيذ عمليات معقدة.

التواصل الموجه (situated communication): يجهز كل روبوت بجهاز يسمح له بالتواصل الموجه؛ أي بإرسال واستقبال رسائل ضمن مجال محدد بطريقة مباشرة خالية من العوائق. عند استقبال الرسالة، يتعرف الروبوت أيضًا على المسافة وزاوية المرسل. يستعمل التواصل الموجه في الروبوتية السربية للوصول إلى التنسيق الكلي في خوارزميات مثل: تشكل الأنماط (Pattern Formation).

مشاركة البيانات (information sharing): توفر لغة Buzz طريقتين لمشاركة البيانات بين الروبوتات: تتبع الأثر الافتراضي أو الستيغمارجية الافتراضية (virtual stigmergy)* والاستعلام الجواري (neighbor query)، الذي يسمح للروبوت بمساءلة الروبوتات الواقعة بالجوار عن قيم بعض المتغيرات.

قواعد اللغة:

العمليات والأنواع البسيطة :

- تشمل العمليات في لغة Buzz عبارات الإسناد (Assignment statements)، والعمليات الحسابية (arithmetic operations)، والحلقات (loops) والعبارات الشرطية (branches).

مثال:

- تضم لغة Buzz الأنماط التالية: virtual stigmergy، swarm، closure، table، string، floating-point، integer، n.

تندرج الأنماط : string، floating-point، integer، nil ضمن الأنماط النظامية المتواجدة في أغلب اللغات النصية مثل: Python أو Lua.

- تعتبر الجداول النمطالمركب الوحيد الموجود في اللغة، ويمكنُ استخدامها كـمصفوفات (arrays) أو كـقواميس بيانات (dictionaries).

مثال:

- تدعم Buzz أيضًا الدوال في شكل إغلاقات closures، والتي تضم نوعين: الإغلاقات الأصلية، وهي الدوال المعرفة داخل سكريبت اللغة، والإغلاقات من نوع "C"، وهي الدوال المخزنة داخل الآلة الافتراضية.

مثال:

- يسمحُ الجمع بين الجداول والإغلاقات بإنشاء بنية شبيهة بالصفوف الخاصة بالبرمجة غرضية التوجه.

مثال:

إدارة السرب (Swarm management):

- لإنشاء متغير من نوع سرب، على المبرمج أن يستعمل معرف وحيد (identifier)، والذي ستتم مشاركتُه بين بقية الروبوتات التي تنتمي إلى السرب، المتغير ذو بنية شبيهة بالكلاس.

مثال: [[[img:14153]]]]

- يكون المتغير من نوع swarm خاليًا عند إنشائه أول مرة. ولإضافة روبوتات جديدة إلى السرب تُستعمل دالتان هما: ()Select و ()Join

تسمح الدالة الأولى بإضافة روبوتات إلى السرب شرطَ تحققِ عبارة يحددها المبرمج وتتم معالجتها من قبل كل روبوت بشكل منفرد. تسمحُ الدالة الثانية بإضافة روبوتات بدون شروط. للخروج من السرب يوفر Buzz الدالتين المضادتين: () unselect و()leave. يتم اختبار ما إذا كان الروبوت ينتمي إلى سرب معين من خلال الدالة: ()in

مثال:

- حالما يتم إنشاء السرب، تُسند إليه مختلف المهام عن طريق الدالة: ()exec التي تأخذ إغلاقا كمعامل.

مثال:

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

مثال:

العمليات الجوارية (neighbor operations): توفر لغة Buzz مجموعةً متكاملة من العمليات بين الروبوتات المتجاورة فيما بينها، والتي تشمل البيانات المكانية وبيانات التواصل بين الروبوتات.

- البنية الجوارية (neighbors structure): للقيام بأي عملية جوارية لابد من المرور بالبنية الجوارية. حيث لكل روبوت، تقوم هذه البنية بتخزين الإحداثيات المكانية للروبوتات الواقعة ضمن مجال تواصله، ويتم تحديث البنية كل فترة زمنية. داخليًا هي مصممة على شكل قاموس بيانات، يأخذ مدخل الفهرس قيمة الـId للروبوت، ومدخل البيانات قيمة اثلاثية (المسافة والاتجاه والارتفاع).

- تعتمد البنية ثلاثَ عمليات أساسية هي: التكرار والتحويل والاختزال:

○ التكرار: مشفر ضمن الدالة ()foreach، وتمكّن المبرمج من تطبيق دالة على جميع الروبوتات المجاورة دون قيمة رجوع.

مثال:

○ التحويل: مشفر ضمن الدالة ()map، وتقوم بتطبيق دالة بقيمة رجوع على كل روبوت مجاور. قيمة دالة الرجوع هي نتيجة العملية المطبقة على بيانات الروبوت المجاور، والنتيجة بنية جوارية جديدة أين يترافق رقم الفهرس مع مداخل البيانات المحولة.

مثال:

○ الاختزال: مشفر ضمن الدالة ()reduce، وتطبق دالة على كل روبوت مجاور للحصول على نتيجة واحدة.

مثال:

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

مثال:

- التواصل: فائدة أخرى للبنية الجوارية؛ أي تبادل ومعاينة البيانات الموضعية. من أجل ذلك توفر اللغة دالتين: ()broadcast و()listen. الأولى تسمح للروبوت بإرسال ثنائية (مفتاح، قيمة) للروبوتات المجاورة. الدالة الثانية تأخذ مدخلين: المفتاح الذي يتم الإصغاء له والدالة التي سينفذها الروبوت المصغي حين تلقيه بيانات من الروبوتات المجاورة.

الستيغمارجية الافتراضية (Virtual Stigmergy): عبارة عن بنية معطيات يتشارك من خلالها باقي الروبوتات البيانات بشكل شامل. التسمية مستوحاة من طريقة التواصل اللامباشر، المعتمدة علىى المحيط المستعملة لدى بعض مجتمعات الحشرات كالنمل والنمل الأبيض..

- توجد ثلاث دوال وهي ()get() وput () وcreate. الدالة ()create تنشئ بنية ستيغمارجية جديدة في حين تسمح الدالتان ()get و()put بالقراءة والكتابة على المداخل (فهرس، قيمة).

مثال:

خلاصة:

يعدُّ غياب لغة برمجية في مجال الروبوتية السربية عائقًا في طريق تطور هذا العلم. لهذا تهدف لغة Buzz إلى إزالة هذا العائق والغوص في الأنظمة السربية غير المتجانسة وتمكين الباحثين من مشاركة أبحاثهم.

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

--------

فهرست المصطلحات:

الذكاء السربي (Swarm Intelligence): هو ذكاء المجموعة، مستوحى من الطبيعة، تحديدا من مجتمعات الكائنات التي تعيش مع بعضها البعض كالنمل والنحل وبعص انواع السمك والطيور، يتميز هذا النوع من الذكاء بأن نتيجته لا ترى على المستوى الفردي بل تظهر كنتيجة على المستوى الجماعي. سيتم التطرق لهذا المصطلح وكل ما يتعلق به في مقال قادم مفصل منفصل.

الستيغمارجية الافتراضية عبارة عن بنية بيانات (data structure) تسمح للروبوتات بمشاركة قيم عامة لمجموعة من المتغيرات.

-----------------------------

المصادر:

هنا

هنا