اذن
اسمي ، مثل العام الماضي ، هو Andrei Rybalka ، فقط هذه المرة أنا 33. وبما أنني كنت في المراكز العشرة الأولى ، فقد قررت مشاركة مقاربتي لكتابة روبوت لعبة لكأس روسيا AI 2018 مرة أخرى.
هذه المرة كانت المهمة هي كرة القدم. كانت المهمة نفسها تذكرنا إلى حد ما بـ 2014 RAIC ، عندما كان هوكي ، لكن الحل كان مختلفًا تمامًا.
هذه المرة كان العالم ثلاثي الأبعاد ، وقد استخدمت هذه الأبعاد الثلاثة بالكامل. كانت اللعبة نفسها أشبه برابطة الصواريخ .
لن أتحمل الجزء التمهيدي ، فمن السهل إظهار كيف بدا الأمر. يمكنك مشاهدة الألعاب على الموقع الإلكتروني أو على الفيديو:

لكي لا تبدو الحياة حلوة جدًا بالنسبة لنا ، فإن المطورين ، بالإضافة إلى عدم الحتمية في عالم اللعبة ، يقسمون أيضًا علامة اللعبة إلى 100 مضخم صوت ، الأمر الذي وضع في البداية حداً لمحاكاة دقيقة لمعظم المشاركين ، وأكثر من ذلك بالنسبة لي ، يعتزمون كتابة روبوت في جافا بطيئة.
أيضا ، يجب أن أقول أن البطولة مقسمة إلى جولات ، والتي من المحتمل أن تكون أكثر صحة لدعوة جولات.
باختصار عن نظام البطولة
بالنسبة للمبتدئين ، يتم إعطاء 2 أسابيع للتنمية. ثم تمر الجولة الأولى. 300 أفضل منه يذهب أبعد من ذلك.
بعد الجولة ، تتغير قواعد اللعبة (على وجه التحديد ، تتم إضافة nitro إلى اللعبة) ويتم إعطاء أسبوعين آخرين ، وبعدها تمر الجولة الثانية.
ثم القواعد معقدة مرة أخرى (يتم إضافة اللاعب الثالث) ، يتم إعطاء أسبوع آخر ولعبنا النهائي.
لكن هذه ليست النهاية. بعد نهائيات كأس العالم ، هناك أسبوع آخر ، في نهاية المطاف يتوقف الصندوق الرملي ببساطة ، ويتم أيضًا منح أفضل 6 نجوم ، باستثناء الفائزين في النهائيات. الفرق الأساسي بين خاتمة صندوق الرمل ونهاية البطولة هو أنه في صندوق الرمل ، يتم إنشاء الألعاب بتنسيق عشوائي ، وليس فقط بتنسيق الجولة الحالية.
قصص المشاركة
الجزء الفني سيكون أقل. إلى من يهمه الأمر التاريخ ، يمكنك التمرير لأسفل حتى يصبح جيدًا.
الجولة الأولى
بدأ ، مثل معظم ، بأسبوع تجريبي. قضيت الكثير من الوقت ، 4 ساعات + كل مساء.
قبل ملء الإصدار الأول ، استغرق الأمر عدة تكرارات
نحن نرمز حتى نبدأ في التغلب على الإصدار السابق - نجمعه - نعتبر الإصدار الحالي من الإصدار السابق - نكرره .
لم أستعجل بالملء الأول وحدث ذلك قبل أيام قليلة من الجولة. ومنذ ذلك الحين ، حتى الآن ، لم يلعب روبوتي مع أي شخص ، ولم يكن لدي أي فكرة عن نوع العالم الذي كنت فيه وما هي المراكز في التصنيف التي يمكنني المطالبة بها. عندما رأيت أنني ربحت بالفعل أكثر من 100 مباراة على التوالي دون خسارة واحدة ، هدأت.
بشكل عام ، كانت الخسارة الأولى التي حصلت عليها ، في المركز الثاني عشر ، في الوقت المحدد ، وكانت اللعبة الأولى التي خسرتها على التوالي في المراكز العشرة الأولى.
باختصار ، أدركت أن لدي فرص للدخول في الجولة الثانية ، حيث يذهب أفضل 300 فريق.
لذلك ، لم أطارد الموضع فيه ولم أغرق أي شيء آخر للجولة ، لكنني ببساطة واصلت العمل.
في ذلك الوقت ، رأيت أنه لا يزال هناك مساحة كبيرة للتحسين دون ربط النيترو (الذي ظهر بعد الجولة الأولى) ، لذلك ركزت على الجزء الرئيسي من الاستراتيجية ، وأدركت أنه قبل الجولة الثانية سيكون هناك أكثر من أسبوعين أو أكثر وسيكون لدي وقت لربط النيترو.
الجولة الثانية
في الأسبوع الأول كنت أبرمج بنشاط ، لكنني ما زلت لم أقوم بتوصيل نيترو. أردت أن أفعل هذا في الأسبوع الثاني. لكن كل شيء تغير بشكل مختلف ، لأنني كنت قد أصبت بالتهاب رئوي بنهاية الأسبوع الأول. لم أتمكن من البرمجة ، لذلك قمت للتو بتحميل ما كان عليه ، ويمكن القول أن المشاركة النشطة في البطولة بالنسبة لي في هذا المكان قد انتهت.
خلال الأسابيع الثلاثة التالية قبل نهاية البطولة ، عملت على وضع استراتيجية قد تصل إلى 20 ساعة.
كنتيجة لذلك ، في الجولة الثانية ، لم يكن روبوتي ، من حيث المبدأ ، على علم بوجود نيترو في اللعبة ، لكن بطريقة ما احتلت المركز السادس عشر.
النهائي
في المباراة النهائية ، تمت إضافة لاعب ثالث.
كتبت بلغة جافا بطيئة ، وليس في لغة C ++ ، حيث أن 7 من كل 8 أشخاص أعلى مني في التصنيف ، وقبل ذلك سقط روبوتي في مهلة ، لذلك مع ظهور اللاعب الثالث ، بدأ في الانخفاض في 100٪ من الألعاب. لحسن الحظ ، يتم إنشاء الألعاب في الصندوق الرمل في شكل عشوائي ، لذلك أنا تلقائيا
خسر فقط كل مباراة ثالثة ، وبالتالي طار ليس كثيرا. يبدو أنه انخفض إلى المركز الثامن عشر.
باستثناء البرمجة ، وتحرير المعاملات في وظيفة التقييم وإجراء الاختبارات ، ثم لأول مرة ، بعد ظهور المرض ، جلست عند الروبوت مساء اليوم السابق للنهائي. أضاف نيترو بسيطًا جدًا موجهًا للأعلى تمامًا بحيث يتوقف المهاجمان عن الركض في نفس النقطة ويتصادمان مع بعضهما البعض ، ويقللان كل ما بوسعهما في لعبة 3 × 3 ، بدءًا من عمق التقديم وينتهيان بدقة المحاكاة ، بحيث فقط الروبوت لم يمت بسبب المهلة.
في هذا النموذج ، لعبت النهاية.
في الفترة الفاصلة بين نصفي النهائيات ، جلست مرة أخرى عند الروبوت وأمضيت ساعات قليلة جيدة ، في الغالب ، كانت التغييرات تتعلق بالانتقاء الديناميكي للمعاملات ، والانقطاع المبكر للوراثة ، إلخ. بشكل عام ، كنت أبحث عن توازن بين الدقة وعمق الخطأ والسرعة.
بالإضافة إلى الحرب ضد السرعة ، قام بإجراء تغييرات إضافية:
- أرسل مهاجم بعيد (نسبة إلى الكرة) إلى نقطة في المنتصف بين الكرة وهدف الخصم
- أنا ثابت نيترو قليلا (الوصف سيكون في الجزء الفني). كان لا يزال بسيطًا للغاية ، لكنه أصبح أكثر فاعلية.
إجمالي ، بعد إجراء الاختبارات ورؤية النتيجة 395: 254 مقابل الإصدار السابق ، هدأت في هذا. هذا سمح لي بأخذ المركز التاسع في النهائي.
رمل خاتمة
واصلت الأذى ولم أكن أعمل على الروبوت لمعظم أيام الأسبوع. في اليوم السابق للنهاية ، رأيت أن العديد من الأشخاص قاموا بتحميل إصدارات جديدة ، والتي غالبًا ما تربح ضدي ويمكن أن تلقي الصناديق من الجوائز. لذلك قضيت بضع ساعات.
التغيير الرئيسي الوحيد هو أنني حفرت غصنياً في Git قبل ثلاثة أسابيع ، حيث أجريت محاكاة لحركة العدو باستخدام خوارزمية مبسطة. في ذلك الوقت كان يعمل بشكل سيء ، لكنني أحضرت إلى الذهن ، أجريت اختبارات ، ورأى
الذي يتفوق على الإصدار السابق تضاعف تقريبا وغمرت المياه. توتال ، في وقت التوقف ، كنت في المركز العاشر في الجدول الكلي ، والذي يتوافق مع المركز الرابع في نهائيات صندوق الرمل.
كيف يعمل كل شيء (الجزء الفني)
أعتذر مقدمًا في حالة وجود أخطاء في المصطلحات. أيضًا ، أكتب من الذاكرة ، لذلك من المحتمل أنني لن أصف النسخة النهائية في مكان ما.
لذلك ، الخوارزميات الجينية هي في صميمها. يتكون الكروموسوم من عدة جينات:
- الرقم الكسري في النطاق -PI..PI ، مع تحديد اتجاه الحركة
- عدد صحيح في النطاق 0..10 يحدد عدد مرات تكرار هذا الإجراء
- الرقم الكسري من 0 إلى 1. إذا كانت القيمة أعلى من بعض العتبة ، فقفز
يمكن أن يشتمل النمط الوراثي على عدد مختلف من الكروموسومات ، ولكن بهذه الطريقة يكون إجمالي عدد الإجراءات (بما في ذلك التكرار) هو 40.
في البداية ، أقوم بإنشاء عدة أنماط جينية عشوائية. بالنسبة لهم أضيف:
- المسار الصحيح على الكرة
- مسارات مباشرة في جميع الاتجاهات ، فقط 10 قطع مع إزاحة 36 درجة
- النمط الوراثي الذي لا يفعل شيئًا (بدونه ، يعمل الروبوت دائمًا في مكان ما ، حتى إذا كان موجودًا بالفعل عند النقطة المثلى)
- أفضل النمط الجيني من القراد السابق
ثم يتم محاكاة كل ذلك وتشغيله من خلال وظيفة التقييم. N أفضل الأنماط الجينية "البقاء على قيد الحياة" ويتم استنساخها M مرات مع الطفرات. عند حدوث طفرة ، يتغير كل جين في نطاق معين مع احتمال 10 ٪. حسنًا ، لقد تكرر هذا لعدة أجيال.
لا يوجد معبر ، في هذه المشكلة لا أرى أي معنى في ذلك.
في المجموع ، كان أقصى عدد ممكن من المسارات لكل علامة لكل لاعب كرة قدم حوالي 800 ، ولكن في الواقع ، كان في معظم الحالات أقل بكثير ، لأنه في بعض الحالات (على سبيل المثال ، عندما لا نتمكن من لمس الكرة في المستقبل القريب) ، تم استبدال حركة اللاعبين بالاستدلال البسيط. بالإضافة إلى ذلك ، N ، M وعدد الأجيال يعتمد على الوضع في الميدان. بادئ ذي بدء ، من المسافة إلى الكرة. أيضًا ، يتم مقاطعة الحساب الخاطئ قبل الموعد المحدد (ولكن ليس قبل الجيل الخامس) إذا تم العثور على مسار مع تقدير مقبول.
ماكرو
يمتد حارس المرمى إلى نقطة أمام مركز الهدف. أظهرت اختباراتي أنه من الأفضل بالنسبة لي أن ألعب أثناء الوقوف أمام المرمى وليس بداخله ، مثل معظم اللاعبين في القمة.
انحرف موقع النقطة عن الوسط بناءً على عدة عوامل: موضع واتجاه رحلة الكرة ، ونقطة ضربت هدفي ، إذا تم التخطيط لهدف ، وموقع أقرب خصم للهجوم ، إلخ.
إذا كانت الكرة على جانب الخصم وتطير نحو هدفه ، فيمكننا الذهاب للنيترو.
إذا تمكن حارس المرمى من ضرب الكرة في وقت أبكر من المهاجم (بالإضافة إلى عدد قليل من الشروط) ، فإن المهاجم يتجاهل الكرة ويمرر إلى نقطة في الوسط بين الكرة وهدف الخصم. ذهبت من خلال الكثير من الخيارات ، حيث بالضبط له لتشغيل. في حالتي ، هذا واحد يعمل بشكل أفضل.
وإلا ، إذا كانت الكرة بعيدة جدًا ، فإن المهاجم يركض في خط مستقيم إلى أقرب نقطة تلامس للكرة مع الأرض ، حيث يمكنه اعتراض الكرة (إذا لم يكن لدينا وقت لنقطة الاتصال الأولى - تحقق من النقطة التالية ، إلخ.)
بخلاف ذلك (عندما تصل الكرة) ، يركض المهاجم إلى حيث تخبره وظيفة التقييم. نعم ، وكذلك ، إذا كانت نيترو تقع في مكان قريب ويمكننا استلامها ، فإننا نختارها.
في لعبة 3 × 3 ، من المرجح أن يكون الهدف من المهاجم الثاني هو الحصول على الكرة وبقدر أقل من الركض إلى الأمام ، حيث يتوقع تمريرة من حارس المرمى. ولكن إذا استمرت المشكلة ، يتم اختيار نقطة أخرى - أقرب إلى خط الوسط.
أيضًا ، قام كل قراد مرة واحدة بمحاكاة الكرة 100 قرادًا للأمام مع 100 microtics (مع التخزين المؤقت).
تم استخدام هذا المسار في العديد من الأماكن. على سبيل المثال:
- لتحديد نقاط لمس الكرة مع الكلمة
- لمعرفة ما إذا كانت الكرة تهدد هدفي وما إذا كان يجب تبديل حارس المرمى إلى وضع المحاكاة
تم استخدام نفس المسار الدقيق في محاكاة مسارات اللاعبين ، حتى لا يتم احتساب الكرة في كل مرة. ولكن فقط حتى الاصطدام الأول للكرة مع أي لاعب كرة قدم.
بالمناسبة ، كانت كتابة كرة القدم كسولاً ، وكانت كلمات اللاعب ، روبوت محفوظة عن طريق الإستراتيجية ،
لذلك كان يسمى صفي المجمع ببساطة يا صديق :)
المحاكاة
في معظم الحالات ، تم ذلك باستخدام مجهرية واحدة ، ولكن في بعض الحالات ، تحولت إلى وضع دقيق مع عدد كبير من microtics (في البداية كانت 100 ، ثم تم تخفيضها إلى 50 في لعبة 2x2 ، لأن الاختبارات أظهرت أن الفرق في النتائج كان ضمن هامش الخطأ ، وإلى 10 في 3X3 ، لأنه طار خلاف ذلك إلى مهلات).
في الوضع الدقيق ، قمت بالتبديل إما في وقت الارتداد ، أو أن أكون قريبًا جدًا من الكرة بحيث يكون هناك تصادم في القراد التالي. علاوة على ذلك ، كان هناك أيضًا كتلة من العكازات الصغيرة والخارقة والتحسينات التي لن أفهمها أنا شخصياً.
على سبيل المثال ، كان لا يزال يتم محاكاة الكرة الطائرة مع 1 Mikrotik ، لكن إذا رأيت بعد Mikrotik أن هناك تصادمًا ، فقد عاد إلى الموضع السابق وحاكيها مرة أخرى بدقة أكبر.
بالإضافة إلى ذلك ، تظاهرت أيضًا بأنني لاعبون آخرون (سواء في بلدي أو لاعبين آخرين) إذا كانوا في الهواء (وبالتالي من السهل التنبؤ بمسارهم) أو كانوا على مقربة من الكرة. بالنسبة للمعارضين ، استخدمت النسخة النهائية نسخة مبسطة من إستراتيجية صنع القرار الخاصة بي ، والتي تم إطلاقها كل 5 علامات (في كثير من الأحيان لم تسمح بالسرعة).
عند محاكاة كل شخصية ، حسبت نفسي ، الكرة وغيرها من لاعبي كرة القدم 40 علامة قبل (الحد الأقصى لعدد الإجراءات في التركيب الوراثي) ثم محاكاة نفس العدد من القراد كرة واحدة فقط.
نيترو
بسيطة غير لائقة.
في الإصدار النهائي ، يتم تشغيل nitro دائمًا إذا كان كذلك ، وإذا كان اللاعب في الهواء ، وإذا لم يكن قد ضرب الكرة في آخر علامة.
في البداية ، قمت دائمًا بتوجيه nitro للأعلى بشكل مباشر ، لكنني حاولت بعد ذلك أن يكون الخيار الأفضل في الذهاب إلى مركز الكرة هو الأفضل. جربت أيضًا خيارات حتى تم اختيار اتجاه نيترو بواسطة علم الوراثة.
عملت أسوأ بكثير. ربما بسبب نقص عمق البحث.
وظيفة التقييم
مجموع الدرجات لكل علامة مع توهين 2٪ لكل علامة.
أكبر وزن ، بالطبع ، كان له هدف. العديد من الأشياء أثرت على وزنه:
- المسافة من الكرة إلى حارس مرمى العدو في وقت الهدف (كلما كان ذلك أفضل)
- Y تنسيق الكرة (لأنه في الجزء العلوي من الهدف يصعب ضرب)
- سرعة الكرة على طول المحور Z (الموجه نحو هدف العدو)
عند مهاجمة لي ، كل شيء هو نفسه تمامًا ، فقط مع الإشارة المعاكسة.
علاوة على ذلك ، للمهاجم ، النتيجة الإجمالية تعتمد على:
- المسافات من اللاعب إلى الكرة (حتى يركض إلى الكرة حتى لو لم يستطع ضربها)
- عقوبة للقفز (للقفز فقط إذا كانت تجلب الكثير من النقاط بحيث تتجاوز هذه العقوبة)
- مسافات في القراد التالي من المحاكاة من الكرة إلى الخصوم
- إحداثيات الكرة Y (كلما ارتفعت ، قل احتمال اعتراض العدو عليها)
- جيب تمام الزاوية بين اتجاه الكرة ومركز هدف العدو
- العلم إذا لمست الكرة
- العلم ، ما إذا كان العدو لمست الكرة
- مكافأة لاختيار نيترو
أيضا ، كان هناك مكافأة صغيرة لضرب لاعب العدو. على الرغم من أنه قد حدث بالفعل ، ولكن نادرًا ما حدث.
لحارس المرمى:
- مكافأة للمسافة إلى الكرة ، وسرعة الكرة في Z ، وموقف الكرة في Y
- عقوبة للقفز
- عقوبة لإيجاد الكرة في المنطقة أمام هدفي
- تم أخذ المسافة بين الأعداء والمهاجمين في الاعتبار (بحيث تطير الكرة بعيدًا عن الأعداء ، ولكن إذا أمكن ، تطير بالقرب من المهاجمين)
- وعدد قليل من الأشياء الصغيرة.
تعلم الآلة
لقد كان قليلاً في أحد فروع البوابة كتجربة. ولكن يبدو لي أن أذكر على أي حال. لم أتمكن من إيصالها إلى ذهني (ولست متأكدًا من معنى ذلك).
بشكل عام ، حاولت أن أتوقع بمساعدته ما إذا كان بإمكان العدو اعتراض الكرة بناءً على مواقع وسرعات العدو والكرة. خططت لاستخدام هذا في وظيفة التقييم. معاقبة المسارات التي يمكن اعتراضها.
لكنني فهمت على الفور أنه لا يمكنني تحمل تكلفة الشبكة العصبية فحسب ، ولكن لا شيء خطير على الإطلاق ، لأن هذا يجب أن يتم 80 مرة لكل مسار. حسنًا ، حتى إذا كان 40 أو 20 ، إن لم يكن يتم حساب كل علامة ، ولكن على أي حال ، لم يكن لدي أي احتياطيات زمنية على الإطلاق ، لذلك لم أفكر في هذه الخيارات.
إليكم ما فعلت:
ركضت العديد من الألعاب باستخدام روبوت معدّل ، حيث قمت عند البحث عن مسار بحفظ بيانات عن نفسي وعن الكرة ، بالإضافة إلى علم ، سواء تم العثور على مسار اعترضت فيه الكرة.
فكرت في جميع الإحداثيات بالنسبة إلى لاعب كرة القدم. أي كنت دائماً أضعها في الإحداثيات [0،0،0] ، لذا احتفظت بعشرة حقول فقط: الموقع النسبي للكرة ، ناقل السرعة للكرة ، ناقل السرعة للاعب كرة القدم ، علم الاعتراض الثنائي. حفظت مجموعة البيانات فقط للجزء المركزي من الحقل ، لأن أدركت أن الخوارزميات البسيطة لن تسحب بعد وتمثل المجالس.
بعد ذلك ، قمت بتغذية مجموعة DecisionTreeClassifier لمجموعة البيانات هذه مع max_depth = 7. أعطت الشجرة المدربة الدقة ، بقدر ما أتذكر ، بنسبة 90٪.
بعد ذلك ، قمت بتصدير الشجرة إلى مجموعة من ifs (والتي DecisionTree هي في الأساس).
بدا الأمر مثل هذا:
public static boolean predict(double dude_vel_x, double dude_vel_y, double dude_vel_z, double ball_rel_pos_x, double ball_rel_pos_y, double ball_rel_pos_z, double ball_vel_x, double ball_vel_y, double ball_vel_z) { if (ball_vel_z <= 6.4765448570251465) { if (dude_vel_y <= -6.087389945983887) { if (ball_vel_z <= -20.188323974609375) { if (dude_vel_x <= 13.032730102539062) { if (ball_rel_pos_y <= -1.1829500198364258) { return ball_vel_y <= 18.906089782714844; } else { return false; } } else { return true; } } else {
في هذه المرحلة ، قمت بإجراء الاختبارات ، ولم أشاهد أي تحسن ، وأجلت المحاكمة إلى وقت لاحق ، والتي بسبب مغامراتي لم تصل أبدًا.
شرودناباغ
في مكان ما بعد الجولة الأولى ، قبضت على هذا الحيوان النادر في منزلي.
من لا يعرف ، هذا خطأ لا يجدوه إلا من خلال قراءة الكود ، وبعد العثور عليه ، يتساءل المطور عن كيفية عمل البرنامج على الإطلاق. وفي حالتي ، بقيت أيضًا في المراكز العشرة الأولى.
بشكل عام ، كان الخلل هو أنه تم استدعاء المنشئ في وظيفة النسخ الخاصة بالجينة ، حيث تم حذف وسيطة اختيارية تحتوي على قيمة هذا الجين. في حالة عدم وجود هذه الوسيطة ، تم تحديد القيمة بشكل عشوائي. وهكذا ، عند محاولة نسخ الجين ، بدلاً من نسخة ، أنشأ نسخة عشوائية جديدة.
في الواقع ، بدلاً من علم الوراثة ، أجريت بحثًا عشوائيًا ، لأن كل علامة تم إنشاؤها ببساطة عدة مئات من المسارات العشوائية واخترت أفضل مسار.
بعد التصحيح (الذي يتكون من إضافة حرفين إلى الكود) ، أصبحت اللعبة أفضل بنحو 3 مرات.
طقوس الرقص
في وقت ما ، لاحظت أن اللاعبين يرتدون أحيانًا دون سبب ، كونهم بعيدًا عن الكرة ، رغم العقوبة.
لقد تبيّن أن التفسير جعلني أحسب لحظة القفزة بدقة 100 ميكروتكس. وفي بعض الأحيان اتضح أنه في وقت القفزة كان هناك تصادم في الكرة مع الحديد. واعتمادًا على دقة الحساب بدقة في هذه العلامة ، فإن المسار المقترح إما أدى إلى هدف أم لا.
وبصورة تقريبية ، تطير الكرة إلى هدف الخصم وتصل إلى المركز. يقوم لاعب كرة القدم ، الذي يعمل في الطرف الآخر من الملعب ، بمحاكاة مسار بدون قفزة (مع 1 mikrotik) ويرى أن الكرة لا تصل إلى الهدف.
ثم يأتي مسار آخر ، مع قفزة بالضبط في اللحظة التي تضرب فيها الكرة العارضة. ولأنني أحسب علامة مع قفزة 100 Mikrotiks ليس فقط لاعب كرة قدم ، ولكن أيضًا للكرة ، تختلف زاوية الارتداد المحسوبة للكرة عن الزاوية التي تم الحصول عليها في المسار بواحد microtik ، وقد يحدث أن الكرة في هذا المسار الأكثر دقة تقع في البوابة.
وبالتالي ، فإن هذا المسار هو الذي سيتم اختياره وسوف يقفز الروبوت.
بشكل عام ، من خلال أداء طقوس الرقص مع كذاب ، حيا اللاعبين هدف :)
ميزة القاتل
هي ليست كذلك
اختبار
قادت ألعاب لا نهاية لها في 8 خيوط (4 على كل كمبيوتر وكمبيوتر محمول). لقد اخترت عدد الألعاب بحيث كانت ذات دلالة إحصائية.
مع تحسن كبير في الاستراتيجية يمكن أن يكون راضيا عن نصف ألف هدف في المجموع ،
مع تصحيحات أصغر ، غادر الليل ثم ذهب مشروع القانون إلى الآلاف.
الانتقاء الوراثي للثوابت
حاولت ذلك قبل الجولة الأولى. لم يقدم أي شيء لسبب أنك بحاجة إلى لعب دور في علم الوراثة من عدد كبير من الألعاب.
حاولت أن ألعب 100000 علامة ، لكن هذا لم يكن كافيًا. مع وجود اختلاف بسيط في القوة (وعادةً ما يكون هذا هو الحال تمامًا عند اختيار الثوابت) ، يعتمد الفائز في كل 100 قراد على الحالة. عليك أن تلعب أكثر من ذلك بكثير للتأكد من الفائز. ولم أتمكن من تحمل مغادرة الاختيار لمدة يوم أو أكثر ، لذلك رفضت هذا المشروع.
في الختام
بفضل التقليدية للمنظمين. كانت المهمة مثيرة للاهتمام. إنه لأمر مؤسف أنني أجبرت للتو على تفويت نصف البطولة تقريبًا ولم أفعل شيئًا حقيقيًا لنيترو أو ثلاثة لاعبين.
كنتيجة لذلك ، حتى النهاية ، شاهدت في صندوق الرمال كيف استراتيجيتي تفوز في وضع 2x2 دون نيترو برصيد 13: 2 ضد أي Mr.Smile ، الذي احتل المركز الثالث في المباراة النهائية ، وبعد عدة مباريات خسرته بنفسه 12: 2 في وضع 3X3 مع نيترو :)
وبالطبع ، الفيديو من متخيل الملكية الخاص بي:

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

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