إنشاء روبوت للمشاركة في كود AI Cup 2018 الروسي



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

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

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

رابط إلى صفحة البداية السريعة للبطولة.

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

لنبدأ بلقب بطولة CodeBall بسيط.

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

جوهر اللعبة ، كما جاء في أغنية حديثة: يجب أن يسجل اللاعبون ، وحارس المرمى لضرب الكرات.

ملعب تخطيطي:



يرجى ملاحظة أن الروبوتات تتحرك على مستوى أرض الساحة XZ ، محور Y هو المسؤول عن ارتفاع كائن اللعبة.

أيضًا كائنات اللعبة بشكل تخطيطي (الكرة والروبوتات (يطلق عليها المنظمون الروبوتات))



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

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

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

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



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

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



دعنا ننكب على علم النبات.

في كل علامة لعبة ، ستتلقى استراتيجيتك الكائنات التالية:

الكرة:

class Ball: x: Float //     y: Float z: Float velocity_x: Float //    velocity_y: Float velocity_z: Float radius: Float //   

وقائمة السير ، مع بيانات لكل روبوت:

 class Robot: id: Int player_id: Int is_teammate: Bool // true,      x: Float //     y: Float z: Float velocity_x: Float //    velocity_y: Float velocity_z: Float radius: Float //    nitro_amount: Float //     touch: bool // true,      touch_normal_x: Float //        touch_normal_y: Float ( null,   ) touch_normal_z: Float 

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

هناك أيضًا فئة لاعب تشير إلى أي روبوتات من القائمة هي لك ، أي منها هي:

 class Player: id: Int me: Bool // true,      strategy_crashed: Bool score: Int //    

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

لقد حان الوقت للفرق.

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



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

قفزة الروبوت هي إضافة السرعة الرأسية (السرعة الرأسية) ، سيتزامن اتجاه قفزة الروبوت مع اتجاه سرعة الروبوت الحالية مع إضافة مكون على المحور ص.

إذا أضفنا منطقًا أكثر تعقيدًا للحركة إلى الكلمات أعلاه ، فيمكننا الحصول على سلوك bots التالي:


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

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

يبدو لي أن منظمي المسابقة اختاروا موضوعًا مثيرًا للاهتمام للبطولة ، الموقع الوحيد بطيء بعض الشيء ، لكنني آمل أن يتم إصلاحه قريبًا.

بعض لحظات اللعبة الجميلة من مشارك البطولة:


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

في غضون ذلك ، تهانينا للعام الجديد القادم 2019!

أن تستمر.

Source: https://habr.com/ru/post/ar434838/


All Articles