À propos du projet

Generals.io Bots est un simulateur haute performance du jeu de stratégie generals.io, écrit en Python sur JAX et destiné à la recherche en apprentissage par renforcement. Il fournit un environnement fonctionnel rapide où les agents peuvent être entraînés et évalués, ainsi que des outils pour déployer des agents sur les serveurs live de generals.io. Caractéristiques clés décrites par le projet : - Un simulateur JAX entièrement compilé JIT avec support vectorisé vmap pour un parallélisme à grande échelle. - Conception fonctionnelle pure avec état immuable et trajectoires reproductibles. - Support de déploiement en direct sur les serveurs generals.io. - Une interface graphique intégrée pour visualiser les parties et déboguer le comportement des agents. L'installation se fait en clonant le dépôt et en exécutant pip install -e . Le README indique que le simulateur suit les règles actuelles du jeu, avec une affirmation selon laquelle 10 000 parties classées rejouées à travers lui correspondaient au moteur de generals.io après chaque tour. Pour commencer : la classe GeneralsEnv prend les dimensions de la grille et une limite de troncature. Un appel reset renvoie un pool de réinitialisation automatique plus un état initial. Les agents implémentent une interface act(observation, key) ; le README montre RandomAgent et ExpanderAgent comme exemples. La boucle de jeu obtient les observations par joueur, empile les actions et fait avancer l'environnement, qui se réinitialise automatiquement à partir du pool prégénéré. Un exemple vectorisé montre l'exécution de nombreux environnements en parallèle avec jax.vmap, en utilisant un pool partagé et des états par lots. L'environnement prend en charge les parties 1v1, les parties libres à N joueurs et les parties en équipe. Pour les équipes, se déplacer sur la cellule d'un coéquipier regroupe les armées et transfère la cellule ; capturer un général transfère les cellules de la victime avec des armées réduites de moitié et élimine ce joueur ; une équipe ne perd que lorsque tous ses généraux tombent, et la dernière équipe en lice gagne. La vision est partagée au sein d'une équipe, et les observations incluent les cellules alliées, le nombre de terres alliées et le nombre d'armées alliées, les champs adverses couvrant toutes les équipes ennemies ensemble. Les observations exposent des champs tels que armées, généraux, châteaux, montagnes, cellules possédées/adverses/neutres/brouillard, structures dans le brouillard, comptes de terres et d'armées, pas de temps et champs alliés. L'assistant as_tensor() empile les 14 premiers champs dans un tenseur (14, H, W), en ajoutant éventuellement des canaux alliés. Les actions sont des tableaux de cinq entiers : passer, ligne, colonne, direction et division. Un assistant compute_valid_move_mask renvoie les coups légaux sous forme de masque (H, W, 4). Le déploiement utilise generals.remote.autopilot avec un agent, un user_id et un lobby_id pour se connecter aux serveurs live de generals.io. Le README inclut une citation BibTeX pour un article arXiv de 2025 intitulé « Artificial Generals Intelligence: Mastering Generals.io with Reinforcement Learning » par Matej Straka et Martin Schmid.