
الجزء الأخير.
في الفصول السابقة ( الجزء 1 ، الجزء 2 ، جزء عن GPU ) ، تطرقنا إلى شروط المسابقة ، الشبكة العصبية ، الخوارزمية الجينية ، لذلك دعونا نستمر.
ولكن قبل المتابعة ، هناك رابط إلى GitHub مع شفرة المصدر لبرنامج c ++ ودعم عنوان المقالة - ملف قابل للتنفيذ ضمن Windows في مجلد bin ، وهو مشابه تمامًا لبرنامج screeen saver. في قبو المقال نظم "قاعة الشهرة" للبطولات السابقة.
لذلك ، استقرنا على بنية البرنامج ، التي تتكون من جزأين منفصلين (البرامج) ، الجزء الذي يحتوي فقط على الشبكة العصبية وبروتوكول الاتصال مع خادم اللعبة لمنظمي المنافسة (اللعبة بوت نفسها) والجزء الرئيسي ، ويتكون من الكتل التالية:

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

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


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

لقد حصلنا على عدد جديد من السكان ويستمر التطور إلى النتيجة المرجوة. هناك العديد من النقاط ، الأولى: كلما زاد عدد البوتات في السكان ، زادت سرعة إيجاد الخوارزمية الجينية للحل الأمثل أو التقارب مع الحل (النسبة المثلى للأوزان في الشبكة العصبية). على سبيل المثال ، إذا كان البوت يحتوي على 1000 جين ، فسيتم توسيع مساحة البحث بشكل كبير مع عدد من السكان يصل إلى 3000 روبوت ، مقارنة بعدد من 300 روبوت. ولكن تنشأ مشكلة أخرى ، إذا قمت بإطلاق جميع الروبوتات الـ 3000 في الساحة المصممة لـ 4-8 روبوتات ، فمن المرجح أن تكون الروبوتات عليها مزدحمة جسديًا وإذا تعلموا شيئًا ، فهي بالتأكيد ليست لعبة في Agario. لذلك ، هناك طريقتان رئيسيتان لتجنب الزيادة السكانية في الساحة: الأولى لاختيار العديد من الروبوتات من السكان بدورها والتنافس في الساحة ، ومرات عديدة حتى نجمع إحصاءات اللعبة لكل بوت. والثاني الذي ذهب إليه المؤلف هو إطلاق العديد من الساحات بالتوازي ، على سبيل المثال 50-300 ، كل هذا يعتمد على قوة جهاز كمبيوتر معين ، وبالتوازي مع مشاركة جميع برامج الروبوت في المسابقات. يمكن تقسيم السكان إلى مجموعات سكانية فرعية مع وظائف اللياقة البدنية والمعرفات الخاصة بهم (يتوافق مع عدد الساحات) ، ثم تبادل الأنماط الجينية بين المجموعات السكانية الفرعية. أو تخيل كل شيء على أنه مجموعة كبيرة من الروبوتات تلعب في ساحات مختلفة. جرب المؤلف كلا الخيارين ، ولكن في الإصدار المصدر مع مجموعة واحدة من الروبوتات. المعلمة في برنامج Depth
هي رقم الساحة.
لذا قال المبادئ الأساسية لبناء برنامج. من يريد مشاهدة البث المباشر ، مرحبًا بك في رابط github .

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

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

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

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


الأصعب:

التطبيقان الرئيسيان هما طريقة Brute Force أو طريقة Monte Carlo . كل واحد منهم هو موضوع مقال منفصل ، ولكن وفقًا للإحساس ، فإن هذه الأساليب هي التي ستقودك إلى النهائي. إذا كانت هذه هي الأطروحة ، فيمكن للبوت أن ينظر ليس فقط في الوقت الحالي أو الماضي ، ولكن إذا أراد ذلك ، يمكنه أن ينظر إلى المستقبل ، يظهر قمع (مخروط) للنتائج المحتملة هنا وكلما أراد البوت أن يرى المزيد من الخيارات تظهر. على سبيل المثال ، في النقطة الزمنية Tick Zero ، يقرر البوت الذهاب في أحد الاتجاهات الثمانية ، في الخطوة Tick + 1 في كل من الإحداثيات الثمانية الجديدة ، لديه الفرصة للذهاب مرة أخرى في ثمانية اتجاهات ، إلخ. من الضروري مراعاة حركات العدو المحتملة خلال هذا الوقت. كل نتيجة محتملة للحسابات لها فائدة أو ضرر محتمل. بناءً على ذلك يقوم البوت بحركة في أحد الاتجاهات. وكذلك مثل هذا الحساب في عمق زمن المستقبل يذهب كل علامة. يتم تحديد عمق طرق عرض الحركات من خلال الموارد المحتملة للكمبيوتر. لذلك ، بالنسبة لموارد الكمبيوتر الصغيرة ، تنشأ المشكلة لتحسين هذه الحسابات.
حول المصدر ، إذا كان هناك اهتمام ، فسأقوم بتحرير التعليقات على الكود ، بينما أوضحته كما هي.
في المصدر ، يتم إرسال إشارات القراد الحالي والقراد السابق إلى مدخلات الخلايا العصبية ، أصبح الأمر أكثر إثارة للاهتمام ، وذلك بفضل القارئ: تونغوهيتي للفكرة.
بالنسبة لأولئك الذين يتذكرون الأطروحة حول التوزيع الأولي للأوزان في الشبكة العصبية ، فإن الموضوع المثير للاهتمام هو Xavire Initialization.
شكرا لكم على اهتمامكم. قابلني في مسابقات الذكاء الاصطناعي.
مقالات ذات صلة من المشاركين ، ولكن الاستطراد الأول:
كانت تجلس على الأرض
وفرز كومة الحروف
ومثل الرماد المبرد
أمسكت بهم بين يدي وألقيت بهم.
تولى أوراق مألوفة
وكان من الرائع أن تنظر إليهم ،
كيف تبدو النفوس من فوق
عليهم جثة مهجورة ...
كم من الحياة هنا
من ذوي الخبرة لا رجعة فيه!
يا كم دقيقة محزنة
قتل الحب والفرح! ..
استراتيجيتي في كأس منظمة العفو الدولية الروسية 2017
تاريخ المشاركة (وكاد النصر) في المسابقة السنوية لكأس AI الروسية 2016
تاريخ النصر في كأس منظمة العفو الدولية الروسية لعام 2015
كأس منظمة العفو الدولية الروسية 2014: استراتيجية الفائز
الميدالية الذهبية في كأس منظمة العفو الدولية الروسية 2013 - كيف كان كل شيء
الطريق إلى الميدالية الفضية في كأس منظمة العفو الدولية الروسية 2012