27 lines
2.6 KiB
Markdown
27 lines
2.6 KiB
Markdown
# 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 <E as Environment>::StateType et à celles s'appliquant au type plus spécifique GameState par exemple ?
|