Docs Outils

Schémas d’IA

Un schéma est une IA complète. Changez-en en un clic dans Farsight, y compris pour reprendre sur-le-champ la partie en cours ; exportez-le en zip pour le partager, importez celui d’un autre pour le tester ; le bilan de chaque schéma est compilé automatiquement.

Un schéma = une IA complète : un dossier + un manifeste scheme.json + du code. Chaque instance du jeu utilise un schéma ; dans Farsight, on en change en un clic, et la partie en cours peut être reprise immédiatement par le nouveau schéma.

Les schémas partagés par d’autres sont importés dans un espace à part, sans interférer avec les vôtres ; pour en modifier un, utilisez « Copier dans mes schémas ».

schemes/
  mine/<id>/          Mes schémas : écrits par vous, ou copiés d'un autre schéma pour être modifiés (modifiables à volonté, effet à la partie suivante)
  installed/<id>/     Installés : les zip partagés par d'autres sont décompressés ici (confiance à confirmer avant la première exécution)
brains/xwar3/         Intégré : cerveau de référence (IA complète)
brains/examples/      Intégrés : quatre exemples pédagogiques hello / rush / macro / micro, l'exemple de compagnon buddy, deux mods de jeu (Roguelike de héros, Défense sans fin)

Un schéma n’est pas forcément une IA qui joue à votre place : un schéma kind: mod est un ensemble de règles de jeu — vous jouez vous-même, il vous lance les défis. Voir Mods de jeu.

Dans Farsight

Page « Schémas d’IA » (barre latérale « Système → Schémas d’IA ») :

ActionEffet
Importer un schéma (zip)L’installe dans installed/ ; si le même id est déjà installé, demande s’il faut le remplacer (après remplacement, la confiance doit être redonnée)
Appliquer à une instance…Choisir l’instance + « Effet immédiat » (arrête l’IA actuelle, le nouveau schéma reprend la partie en cours) ou « Effet au prochain lancement du test »
Copier dans mes schémasEn fait une copie dans mine/, avec « moi » pour auteur et la version 0.1.0, en notant de quel schéma et de quelle version elle provient
Exporter en zipCrée <id>-<version>.zip : l’envoyer à quelqu’un, c’est le partager
Ouvrir le dossierOuvre le dossier du schéma dans l’Explorateur de fichiers, pour modifier directement le code
Faire confianceObligatoire avant la première exécution d’un schéma d’autrui (voir « Confiance et sécurité » plus bas)
Bilan récentVictoire ou défaite, durée et cause de fin de chaque partie de ce schéma
SupprimerUniquement pour « Mes schémas » et « Installés » ; impossible si une instance l’utilise

La fiche de chaque instance comporte aussi une ligne « Schéma d’IA » : choisissez le schéma dans la liste → « Changer (effet immédiat) ». Quand l’instance ne tourne pas, le bouton s’appelle « Sélectionner », et le prochain « Lancer le test » démarrera l’IA avec ce schéma.

Le manifeste scheme.json

{
  "format": 1,
  "id": "fast-rush",
  "name": "Rush en trois minutes",
  "version": "1.2.0",
  "author": "Untel",
  "description": "Une phrase qui résume le style de jeu de cette IA",
  "entry": "rush_bot.py",
  "class": "RushBot",
  "fair": true,
  "hz": 5,
  "races": ["human", "orc"],
  "license": "MIT"
}
ChampObligatoireDescription
id✔Lettres minuscules, chiffres, -, _, de 2 à 41 caractères
entry✔Un fichier .py du dossier du schéma (pas de chemin absolu, pas de ..)
kindbot par défaut (sous-classe de openwar3.Bot, joue à votre place) ; mod = mod de jeu (sous-classe de openwar3.Mod, jamais en mode équitable, issue jamais jugée selon les règles de mêlée)
classNom de la sous-classe de Bot (ou de Mod) dans le fichier d’entrée ; à défaut, la dernière sous-classe de openwar3.Bot du fichier d’entrée est utilisée
fairtrue par défaut : ne voit que ce qui est dans le champ de vision, même règle que sur l’Arène. false = toute la carte visible, et c’est aussi la seule façon d’utiliser le canal JASS (nécessaire aux compagnons)
judgetrue par défaut : la partie est jugée selon les règles de mêlée. Les schémas RPG / compagnon mettent false
hzNombre d’appels à on_tick par seconde, 5 par défaut
formatVersion du format du manifeste, actuellement 1 ; un format plus récent que votre OpenWar3 est refusé, avec une invitation à mettre à jour
Autresname, version, author, description, races, license, homepage, forked_from ne servent qu’à l’affichage

Le dossier du schéma est ajouté au chemin de recherche des modules Python : le fichier d’entrée peut importer (import) les autres fichiers du même dossier. Les paquets tiers (numpy, torch…) ne sont pas installés automatiquement — indiquez clairement dans description ce qui est nécessaire.

Le plus petit schéma tient en deux fichiers :

# my_bot.py
from openwar3 import Bot

class MyBot(Bot):
    def on_tick(self, g):
        for w in g.idle_workers():
            mine = g.nearest(g.gold_mines(), w)
            if mine:
                g.gather(w, mine)
{"id": "my-first", "name": "Ma première IA", "entry": "my_bot.py"}

Placez-les dans schemes/mine/my-first/, rafraîchissez Farsight et le schéma apparaît. Point de départ encore plus simple : choisissez un exemple dans « Intégrés » et cliquez sur « Copier dans mes schémas ».

Exécution et bilan

Les schémas sont exécutés par l’exécuteur de schémas (c’est lui que démarrent « Lancer le test / Changer » dans Farsight) :

python tools/run_scheme.py --inst 20 --scheme builtin/micro --hours 6
  • Chaque instance a un processus superviseur permanent, qui lance un sous-processus à chaque partie pour exécuter le schéma : si le code du schéma plante, le superviseur n’est pas entraîné dans sa chute ; si vous modifiez le code d’un de « Mes schémas », la partie suivante utilise automatiquement la nouvelle version.
  • À la fin de chaque partie, une ligne de bilan est enregistrée : schéma, version, auteur, issue, cause, durée de jeu, nombre d’erreurs. Les taux de victoire affichés dans Farsight sont calculés à partir de là.

Comment l’issue est déterminée :

SituationRésultat enregistré
Tous les bâtiments adverses sont détruitsVictoire
Tous nos bâtiments sont détruits (même s’il reste des troupes — c’est ainsi qu’une partie de mêlée juge la défaite)Défaite
Toutes nos unités sont détruitesDéfaite
Fin / arrêt manuel depuis FarsightIndéterminé
Lors du changement, la partie durait déjà depuis plus de 60 secondes de jeu (reprise en cours de route)Compté à part, exclu du taux de victoire
L’horloge du jeu reste longtemps bloquéeIndéterminé

Une fois l’issue connue, l’exécuteur ferme l’écran des scores, lance la partie suivante selon les « Réglages de la partie suivante », et le schéma reprend la main — vous pouvez le laisser tourner toute la nuit pour accumuler un bilan. Une pause n’est pas une fin : pendant la pause, le Bot continue de tourner normalement, seule l’horloge du jeu s’arrête.

Confiance et sécurité

Un schéma, c’est du code, qui s’exécute avec exactement les mêmes droits que vous (il peut lire et écrire des fichiers, accéder au réseau). Par conséquent :

  • les schémas de installed/ ne sont pas de confiance par défaut : Farsight et l’exécuteur refusent de les lancer tant que vous n’avez pas cliqué sur « Faire confiance » ;
  • remplacer l’installation d’un schéma de même id réinitialise la confiance (nouvelle version = nouveau code) ;
  • l’import vérifie : zip de 50 MB au plus, 2000 fichiers au plus ; ni chemin absolu ni .. (pour empêcher toute écriture hors du dossier du schéma) ; un manifeste invalide ou un fichier d’entrée absent entraîne un refus immédiat.

Avant de faire confiance, cliquez sur « Ouvrir le dossier » et lisez le code. Ne prenez de schémas qu’auprès de personnes en qui vous avez confiance.

API (pour les scripts)

InterfaceDescription
GET /api/schemesListe des schémas + bilans + schéma choisi et schéma en cours d’exécution pour chaque instance
GET /api/schemes/results?ref=Les 30 dernières parties d’un schéma
POST /api/schemes/importImporter un zip
GET /api/schemes/export?ref=Télécharger le zip
POST /api/schemes/forkCopier dans mes schémas
POST /api/schemes/trustFaire confiance
DELETE /api/schemes?ref=Supprimer (refusé si une instance l’utilise)
POST /api/instances/{n}/schemeChanger le schéma d’une instance : reprise immédiate de la partie en cours, ou effet au prochain lancement du test

En Python, utilisez directement la bibliothèque : from openwar3 import schemes (list_schemes, install_zip, export_zip, fork, trust, stats…).

À venir : le site de schémas

Le zip exporté est l’unité de partage ; le site n’a qu’à ajouter une couche autour : envoi en un clic depuis Farsight ; téléchargement depuis le site, avec exactement les mêmes vérifications que « Importer un schéma » et la même confirmation de confiance ; envoi facultatif des bilans, le site agrégeant les taux de victoire par version. Le bouton « Partager sur le site de schémas » a déjà sa place réservée dans Farsight. Avancement : voir la feuille de route.