تاريخ المركز الثاني في كأس روسيا لعام 2018: CodeBall

مرحبا بالجميع!

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

يمكن العثور على قواعد المنافسة على موقع المنافسة ، وكذلك في هذه المقالة . رابط إلى ملفي الشخصي: russianaicup.ru/profile/TonyK .

من ناحية ، كانت المهمة هذا العام مشابهة لمهام السنوات الماضية ، ويبدو أن الحل الإيديولوجي سيكون مشابهًا جدًا للحلول السابقة (Agar IO و Mad Cars) ؛ بعد حوالي أسبوع ، سأشعر بالملل والتعب من المشاركة.

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

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

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

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

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

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

المسار هو خطة العمل. في البداية ، كان المسار هو:

  • ضبط العمل بزاوية عشوائية ؛
  • على علامة عشوائية للمسار ، قم بتغيير الزاوية إلى أخرى عشوائية ؛
  • القفز مرة واحدة في علامة عشوائية من المسار.

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

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



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

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

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

لقد تم مضاعفة تقييم مسارات الروبوتات في كل نقطة بعمق 0،9 ^ ، لقد اشتقت هذا المعامل بشكل تجريبي ، مثل مجموع النقاط. لم تتغير قيم المعاملات لفترة طويلة جدًا على مبدأ "الأعمال ، حسنًا".

بدأ في الفوز بالقمم وسرعان ما ارتفع في الترتيب. انتهت المرحلة التجريبية.

لفترة طويلة لم تكن لدي أي أفكار حول الاستراتيجية ، كانت الإصدارات ملحوظة في التعديلات الطفيفة وإصلاحات الأخطاء (اتضح أنني نظرت إلى أن متوسط ​​قوة الارتداد هو (MAX_HIT_E - MIN_HIT_E) / 2 ) ، كما أنه محسّن للمحاكاة. تم لعب دور مهم من خلال عدد المسارات التي تمكنت من الفرز لكل علامة ، لذلك ركزت على التحسين. إزالة الجيوب الأنفية والجذور التربيعية. تمت إضافة سرعة صفر محتملة على المسار قبل أو بعد تغيير الزاوية. تغيرت قليلا التهديف.

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

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

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

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

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

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

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

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

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

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

"محاكاة ذكية"


أول شيء أردت التعامل معه بدقة.

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

من السهل أن نرى أنه في المواقف التي يحدث فيها تصادم على ميكروتكس الأول ، بدلاً من حساب كل 100 ميكروتيك ، يكفي حساب أول ميكروتيكس i - 1 في وقت واحد (في الواقع ، يتم اعتبار خطوة الفيزياء لفترة زمنية محددة ، والآن هذه المرة ستكون t * (i - 1) ، حيث t هو الوقت المناسب لواحد Mikrotik). أنت الآن بحاجة إلى محاكاة 1 microtic ( dt = t ) وما تبقى من 100 - i microtics. نحصل على نفس النتيجة بالضبط في ثلاثة محاكاة فقط بدلاً من مائة. المشكلة الوحيدة هي أننا لا نعرف على أي علم دقيق سيحدث التصادم.

بوجود بعض العلامات الثابتة للمحاكاة ، يمكننا أن نجعل أي عدد من ميكروتيكات من 1 إلى 100 في محاكاة واحدة ونرى ما إذا كان هناك تصادم أم لا. في هذه الحالة ، ستكون الصورة على هذا النحو: في البداية لا توجد لمسة ، ولكن بدءًا من عدد معين من microtics وما يصل إلى مائة هناك لمسة. باستثناء الحالات النادرة جدًا ، عندما لا يكون هناك اتصال في البداية ، عندئذٍ توجد لمسة على جزء من microtics ، ثم لا يوجد اتصال مرة أخرى.

لذلك ، من الممكن العثور على Mikrotik الذي وقع فيه التصادم باستخدام بحث ثنائي عن 10 عمليات محاكاة في أسوأ الحالات. كما هو موضح سابقًا ، يمكنك الحصول على حالة العالم من خلال 100 محاكاة دقيقة بدقة تامة كما هو موضح سابقًا.

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

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

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

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

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



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

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

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

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

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

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

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

الأسبوع الماضي قبل بدء المباراة النهائية.

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

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

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

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



اتضح أنه من دون ضرر كبير للاستراتيجية ، فمن الممكن حساب المسار ليس كل علامة ، ولكن من خلال واحدة. من خلال خفض وقت التشغيل ، تضاعفت بذلك متوسط ​​عدد التكرارات. بعض السحر يحدث هنا. يبدو أننا إذا عدنا مسارات كل علامة ثانية ونضاعف عدد التكرارات ، فلن يتغير متوسط ​​عدد التكرارات. ولكن في الواقع ، سوف يحسب جهاز محاكاة اثنين من القراد (200 microtiks) لكل محاكاة بدلاً من واحد. وستكون المسارات بالفعل 50 ، وليس عمق 100. لهذا السبب سوف يتضاعف متوسط ​​عدد التكرارات.

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

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

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

في النهاية ، كان لدي 7 خيارات للمسارات عندما كان الروبوت على الأرض:

  • 2 زوايا دون قفزة.
  • 2 زوايا مع قفزة.
  • زاويتان مع قفزة وسرعة نيترو الترميزية ؛
  • 2 زاويتان مع قفزة ونيترو يعوض عن الجاذبية.
  • 1 زاوية مع قفزة.
  • 1 زاوية مع قفزة وسرعة نيترو الترميز.
  • 1 زاوية مع قفزة ونيترو يعوض عن الجاذبية (لا تستخدم بسبب خطأ ، لاحظت عند كتابة مقال).

وخياران عندما يكون الروبوت في الهواء:

  • نيترو إلى نقطة عشوائية على سطح الكرة وقوة تأثير عشوائي.
  • قوة تأثير عشوائي.

كانت هناك منافسة قبل ساعات من النهائيات ، لكن استراتيجيتي كانت أفضل بشكل واضح. يبدو أن كل شيء قد تم بالفعل ، لم أنم لأكثر من يوم ، ولم يكن هناك شيء يعتمد علي. بقي لمشاهدة. قبل ساعتين من المباراة النهائية ، أرسل أندريه كعكه الطازج وفاز بنجاح بالمركز الأول. يمكن الاطلاع على تاريخ مشاركته هنا: habr.com/en/post/440398 .

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

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

الكود المصدري للاستراتيجية سيكون متاحًا هنا .

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


All Articles