سن الحرب
Age of War AI ، وهو مشروع قضيته وقتًا طويلاً من الوقت ، والذي تحول إلى رمز Spagheti الضخم. كان أول مشروع لي الكبير وأظهر لي مدى ما كان علي أن أتعلمه لأنني كنت أفتقر (وما زلت على الأرجح) في جميع المجالات. في سياق هذا المشروع فعلت ما يلي:
كيف لا تفعل المشروع
- احصل على لعبة Vanilla Age of War ، وصنع وحدة نمطية تستخرج البيانات عبر مكتبة OpenCV مع استمرار اللعبة وتغذيها في الخوارزمية الأنيقة. ما لم أكن أدركه هو أن تقييم 30 إلى 50 وكيلًا في لعبة لا تتسارع مع متوسط وقت اللعب من 10 دقائق لكل جلسة يستغرق الكثير من الوقت للتدريب ولم يحقق أي نتائج مهمة
- احصل على محرك الغش ، أدرك أنه لا يعمل مع هذه اللعبة المحددة لمن يعرف السبب ، ثم ابحث عن decompiler لألعاب الفلاش وحقن البرنامج النصي في اللعبة التي تولد الملفات النصية من أجل التحايل على كل شيء OpenCV للحصول على القيم. حصلت على نتائج أفضل قليلاً منذ أن تمكنت من تسريع اللعبة X2 مع محرك الغش ولكن لا يزال يفتقر إلى الكثير.
- احصل على الوحدة. نظرًا لأنني وجدت بالفعل طريقًا إلى رمز اللعبة ، فقد قمت بتعديل كل ميكانيكا تكنولوجيا المعلومات وقمت بمحاكاة مخلصة للغاية في الوحدة التي لديها نفس المعلمات تمامًا مثل اللعبة الأصلية.
- محاكاة 50 بيئة في الوحدة بسرعة 10x وجعلها التواصل عبر TCP مع نص Python الخاص بي الذي أصبح الآن مديرًا أنيقًا لجميع تلك البيئات وأفعالها. لقد بدأت هنا بالفعل في رؤية بعض النتائج والاستراتيجيات المهمة التي تتطور وتمكن من الفوز في الوضع العادي Yay. لكني أردت مو
- قم بالتبديل تمامًا على وكلاء الوحدة ML الذين يتخلون بشكل أساسي عن البرنامج النصي للبيثون والقطار والوكيل مع PPO والحصول عليه بعد الكثير
- اختبرها على اللعبة الأصلية وتسجيلها للفوز وأدرك أنك خسرت شهرين في مشروع كان يمكن أن ينتهي في أقل من 3 أسابيع
- لا تزال تصنع مكتبة تصور لـ Neat باستخدام محرك مانيم الرياضي لأنني وجدت بعض مقاطع فيديو YouTube رائعة حول الموضوع الذي لم ينشر مستودعاتهم
يمكنك أن ترى نظرة عامة على هذا الألم هنا - سأعود 100 ٪ إلى هذه القناة للحصول على ما لا يقل عن مليون متر ولكن في الوقت الحالي لدي أهداف أخرى للمتابعة.
الجري على Python 3.7.9
المدخلات:
- عدد القوات في التدريب (1 إدخال)
- العدو HP - في المئة من إجمالي الصحة (1 إدخال)
- HP الخاص بي - في المئة من إجمالي الصحة (1 إدخال)
- المال - تطبيعها بتكلفة الوحدة الأساسية (المال/cost_of_basic_unit) (1 إدخال)
- XP - يمكن ترقية العمر أم لا (إدخال واحد)
- يمكن تنشيط القدرة - من 0 إلى 1 cooldown (1 إدخال)
- قواتي على الأرض 1 ، 2 ، 3 ، 4 (4 مدخلات)
- قوات العدو على الأرض 1 ، 2 ، 3 ، 4 (4 مدخلات)
- عدد فتحات المدفع المتاحة (1 إدخال)
- عصر اللاعب - واحد مشفر (5 مدخلات)
- عصر العدو - واحد مشفر (5 مدخلات)
- صفيف مع الأبراج والأبراج العمر (الحد الأقصى 4) (1 إدخال للنوع لأنها تصبح أقوى بشكل تدريجي وإدخال واحد لإهمال العمر) (2 لكل فتحة) (8 مدخلات)
- أين تجري المعركة الحالية (0-1 قاعدتك لقاعدة العدو) (إدخال واحد)
المخرجات:
- إنشاء قوات المستوى 1 ، 2 ، 3 (3 إجراءات)
- إنشاء القوات من المستوى 4 لعمر الفضاء (عمل واحد)
- شراء Cannon Slot (عمل واحد)
- شراء المدفع المستوى 1 ، 2 ، 3 ، أول فتحة متاحة (3 إجراءات)
- بيع المدفع على فتحة معينة (4 إجراءات)
- انتظر (1 إجراءات)
- استخدام القدرة
التبعيات:
- numpy
- مجداف OCR
- المفتوح
- سكيبي
- أنيقة بايثون
pip install numpy paddlepaddle paddleocr opencv-python scipy neat-python
تعمل الأصول فقط من أجل هذا القرار المحدد إذا كنت ترغب في تعديل حل اللعبة ، فسيتعين عليك تغيير حجم الأصول وفقًا لذلك (على سبيل المثال: اجعل اللعبة والأصول x ٪ أصغر)
يمكنك تنزيل الأرشيف الذي استخدمته للعبة من هنا