Skip to main content

Bots et simulations asynchrones By Year

Quand les bots sont utilisés

Dans generateResultsJob(), si actData.isAsync est vrai, takeBotsDecision(actData) est appelé avant la génération des events et résultats.

Jeux avec bots explicites

Le routeur commun instancie actuellement BotsEnt1, BotsMk1 ou BotsMk2. Les équipes marquées isBot reçoivent alors des décisions générées avant le calcul des résultats.

flowchart LR
JOB[generateResultsJob] --> ASYNC{isAsync?}
ASYNC -->|oui| B[takeBotsDecision]
B --> BOT[Bot game-specific]
BOT --> TD[Team decisions]
ASYNC -->|non| EV[Events]
TD --> EV[Events]
EV --> RES[Generate Results]

ENT1

BotsEnt1 gère notamment prêts, capacité de production, construction d'usines, employés, matières premières, choix de pays et création/lancement de produit.

MK1/MK2

Les bots Marketing construisent des décisions de produit/marché selon un niveau et des heuristiques game-specific.

Attention

Le code désactive temporairement l'envoi de messages pendant la boucle bots afin d'éviter de spammer les clients avec chaque décision artificielle. Les documents équipes sont ensuite sauvegardés.

Ajouter ou modifier une décision de bot

Les bots sont exécutés par takeBotsDecision(actData) avant la génération de résultats des activités async. Une nouvelle décision métier qui est obligatoire doit être supportée par le bot du jeu.

Procédure

  1. Ajouter la logique dans Bots<Game>.takeDecisions() ou un helper spécialisé.
  2. Réutiliser les mêmes fonctions de coût/validation que les humains lorsque possible.
  3. Éviter de modifier directement les résultats : le bot doit produire des décisions, puis passer dans le même moteur de génération.
  4. Respecter le botLevel si le jeu simule plusieurs niveaux.
  5. Vérifier cash/stock/capacité après chaque décision en chaîne.
  6. Ajouter une garde si une static data attendue manque.

Jeux actuellement supportés

Le socle crée explicitement des bots pour ENT1, MK1 et MK2. HR1/MGT1 ne doivent pas être supposés bot-compatible sans implémentation dédiée.

Messages pendant les bots

Le framework peut désactiver temporairement certains messages pendant la boucle bot. C'est voulu : on ne veut pas envoyer à chaque client un RTT pour chaque micro-décision artificielle. Vérifier la synchronisation finale après sauvegarde/génération.

Tester un bot

  • cash très bas;
  • année 1 et année suivante;
  • marché/segment déjà utilisé;
  • static data manquante ou vide;
  • plusieurs bots ensemble;
  • mêmes inputs avec seed/config stable;
  • génération complète après décisions.