Âge de guerre
Age of War Ai, un projet sur lequel j'ai passé un temps abhoriste, qui s'est transformé en code spagheti massif. C'était mon premier grand projet et cela m'a montré à quel point je devais apprendre de plus parce que je manquais (et je le fais encore le plus probablement) dans tous les domaines. Dans le contexte de ce projet, j'ai fait ce qui suit:
Comment ne pas faire de projet
- Obtenez le jeu Vanilla Age of War, créez un module qui extrait les données via la bibliothèque OpenCV au fur et à mesure que le jeu continue et le nourrit de l'algorithme soigné. Ce que je ne savais pas, c'est que l'évaluation de 30 à 50 agents sur un jeu qui ne s'accélère pas et le temps de jeu moyen de 10 minutes par session prend vraiment beaucoup de temps pour s'entraîner et il n'a donné aucun résultat significatif
- Obtenez du moteur de triche, réalisez qu'il ne fonctionne pas avec ce jeu spécifique pour qui sait quelle raison, puis trouvez un décompilateur pour les jeux Flash et injectez un script dans le jeu qui engendre des fichiers texte afin de contourner tout l'OpenCV pour obtenir des valeurs. J'ai obtenu des résultats un peu meilleurs depuis que j'ai réussi à accélérer le jeu X2 avec un moteur de triche, mais il manquait encore beaucoup.
- Lancez l'unité. Comme j'ai déjà trouvé un chemin dans le code de jeu, j'ai inversé toutes les mécanismes informatiques et fait une simulation assez fidèle dans l'unité qui avait exactement les mêmes paramètres que le jeu original.
- Simulez 50 environnements en unité avec 10x vitesse et faites-les communiquer via TCP avec mon script Python qui avait maintenant un manager soigné Dieu pour tous ces environnements et leurs actions respectives. Ici, j'ai commencé à voir des résultats et des stratégies significatifs en développant et en mantenant à gagner en mode normal Yay. Mais je voulais Moe
- Allumez complètement les agents d'Unity ML abandonnant essentiellement le script Python, le train et l'agent avec PPO et l'obtenir après des tonnes de paramètres de changement et ses fonctions obtiennent une assez bonne stratégie qui gagne le jeu en mode difficile
- Testez-le sur le jeu original et enregistrez-le et réalisez que vous avez perdu 2 mois sur un projet qui aurait pu être terminé en moins de 3 semaines
- Faites toujours une bibliothèque de visualisation pour soigner en utilisant le manim de moteur mathématique parce que j'ai trouvé des vidéos YouTube cool sur le sujet qui n'a pas publié leurs référentiels
Vous pouvez voir l'aperçu de cette douleur ici - je reviendrai à 100% sur cette chaîne pour le faire à au moins 1 m mais pour l'instant j'ai d'autres objectifs à poursuivre.
Courir sur Python 3.7.9
Entrées:
- Nombre de troupes en formation (1 contribution)
- HP ennemi - pour cent de la santé totale (1 contribution)
- Mon HP - pour cent de la santé totale (1 contribution)
- Argent - normalisé par le coût unitaire de base (argent / cost_of_basic_unit) (1 entrée)
- XP - peut mettre à niveau l'âge ou non (1 entrée)
- Peut activer la capacité - 0 à 1 recharge (1 entrée)
- Mes troupes sur le sol de type 1, 2, 3, 4 (4 entrées)
- Troupes ennemies sur le sol de type 1, 2, 3, 4 (4 entrées)
- Nombre de machines à sous disponibles (1 entrée)
- Âge du joueur - Un codé chaud (5 entrées)
- Âge ennemi - un chaud codé (5 entrées)
- Répose avec les tourelles et l'âge des tourelles (max 4) (1 entrée pour le type car elles deviennent progressivement plus fortes et 1 entrée pour la dépréciation de l'âge) (2 pour chaque emplacement) (8 entrées)
- Où se déroule la bataille actuelle (0-1 votre base à la base ennemie) (1 entrée)
Sorties:
- Créer des troupes de niveau 1, 2, 3 (3 actions)
- Créer des troupes de niveau 4 pour l'ère spatiale (1 action)
- Acheter des emplacements de canon (1 action)
- Acheter Cannon Tier 1, 2, 3, première créneau disponible (3 actions)
- Vendre du canon sur une certaine fente (4 actions)
- Attendez (1 actions)
- capacité d'utilisation
Dépendances:
- nombant
- paddle ocr
- cv ouvert
- cavalier
- python net
pip install numpy paddlepaddle paddleocr opencv-python scipy neat-python
Les actifs ne fonctionnent que pour cette résolution spécifique Si vous souhaitez modifier la résolution du jeu, vous devrez modifier la taille des actifs en conséquence (par exemple: faire le jeu et les actifs x% plus petits)
Vous pouvez télécharger les archives que j'ai utilisées pour le jeu à partir d'ici