trictrac/doc/refs/geminiQuestions.md
2025-07-26 21:35:56 +02:00

2.6 KiB

Description du projet et question

Je développe un jeu de TricTrac (https://fr.wikipedia.org/wiki/Trictrac) dans le langage rust. Pour le moment je me concentre sur l'application en ligne de commande simple, donc ne t'occupe pas des dossiers 'client_bevy', 'client_tui', et 'server' qui ne seront utilisés que pour de prochaines évolutions.

Les règles du jeu et l'état d'une partie sont implémentées dans 'store', l'application ligne de commande est implémentée dans 'client_cli', elle permet déjà de jouer contre un bot, ou de faire jouer deux bots l'un contre l'autre. Les stratégies de bots sont implémentées dans le dossier 'bot'.

Plus précisément, l'état du jeu est défini par le struct GameState dans store/src/game.rs, la méthode to_string_id() permet de coder cet état de manière compacte dans une chaîne de caractères, mais il n'y a pas l'historique des coups joués. Il y a aussi fmt::Display d'implémenté pour une representation textuelle plus lisible.

'client_cli/src/game_runner.rs' contient la logique permettant de faire jouer deux bots l'un contre l'autre. 'bot/src/strategy/default.rs' contient le code d'une stratégie de bot basique : il détermine la liste des mouvements valides (avec la méthode get_possible_moves_sequences de store::MoveRules) et joue simplement le premier de la liste.

Je cherche maintenant à ajouter des stratégies de bot plus fortes en entrainant un agent/bot par reinforcement learning.

Une première version avec DQN fonctionne (entraînement avec cargo run -bin=train_dqn) Il gagne systématiquement contre le bot par défaut 'dummy' : cargo run --bin=client_cli -- --bot dqn:./models/dqn_model_final.json,dummy.

Une version, toujours DQN, mais en utilisant la bibliothèque burn (https://burn.dev/) est en cours de développement.

L'entraînement du modèle est opérationnel, je veux maintenant utiliser le modèle d'inférence, cela se passe dans la fonction "demo_model" du fichier bot/src/burnrl/utils.rs. On peut lancer l'exécution avec 'just trainbot'.

Il y a deux erreurs de compilation . Tu peux les voir en lançant 'just trainbot'. J'ai essayé de les corriger en ajoutant des contraintes sur les types (remplacement de E: Environment, par E: Environment<StateType = GameState, ActionType = TrictracAction>, dans la signature de la fonction), mais cela génère d'autres erreurs du fait que je n'ai plus accès aux fonctions s'appliquant au type générique.

Y a-t-il moyen de bénéficier des fonctions s'appliquant au type générique ::StateType et à celles s'appliquant au type plus spécifique GameState par exemple ?