2025-08-21 17:39:45 +02:00
|
|
|
use bot::burnrl::algos::{
|
|
|
|
|
dqn, dqn_big, dqn_valid, ppo, ppo_big, ppo_valid, sac, sac_big, sac_valid,
|
|
|
|
|
};
|
2025-08-20 13:09:57 +02:00
|
|
|
use bot::burnrl::environment::TrictracEnvironment;
|
2025-08-21 11:30:25 +02:00
|
|
|
use bot::burnrl::environment_big::TrictracEnvironment as TrictracEnvironmentBig;
|
|
|
|
|
use bot::burnrl::environment_valid::TrictracEnvironment as TrictracEnvironmentValid;
|
2025-08-20 13:09:57 +02:00
|
|
|
use bot::burnrl::utils::{demo_model, Config};
|
|
|
|
|
use burn::backend::{Autodiff, NdArray};
|
|
|
|
|
use burn_rl::base::ElemType;
|
2025-08-21 11:30:25 +02:00
|
|
|
use std::env;
|
2025-08-20 13:09:57 +02:00
|
|
|
|
|
|
|
|
type Backend = Autodiff<NdArray<ElemType>>;
|
|
|
|
|
|
|
|
|
|
fn main() {
|
2025-08-21 11:30:25 +02:00
|
|
|
let args: Vec<String> = env::args().collect();
|
|
|
|
|
let algo = &args[1];
|
|
|
|
|
// let dir_path = &args[2];
|
|
|
|
|
|
|
|
|
|
let path = format!("bot/models/burnrl_{algo}");
|
2025-08-22 09:24:01 +02:00
|
|
|
println!(
|
|
|
|
|
"info: loading configuration from file {:?}",
|
|
|
|
|
confy::get_configuration_file_path("trictrac_bot", None).unwrap()
|
|
|
|
|
);
|
|
|
|
|
let mut conf: Config = confy::load("trictrac_bot", None).expect("Could not load config");
|
|
|
|
|
conf.save_path = Some(path.clone());
|
2025-08-20 13:09:57 +02:00
|
|
|
println!("{conf}----------");
|
|
|
|
|
|
2025-08-21 11:30:25 +02:00
|
|
|
match algo.as_str() {
|
|
|
|
|
"dqn" => {
|
2025-08-21 17:39:45 +02:00
|
|
|
let _agent = dqn::run::<TrictracEnvironment, Backend>(&conf, false);
|
2025-08-21 11:30:25 +02:00
|
|
|
println!("> Chargement du modèle pour test");
|
2025-08-21 17:39:45 +02:00
|
|
|
let loaded_model = dqn::load_model(conf.dense_size, &path);
|
2025-08-21 11:30:25 +02:00
|
|
|
let loaded_agent: burn_rl::agent::DQN<TrictracEnvironment, _, _> =
|
|
|
|
|
burn_rl::agent::DQN::new(loaded_model.unwrap());
|
2025-08-20 13:09:57 +02:00
|
|
|
|
2025-08-21 11:30:25 +02:00
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
|
|
|
|
}
|
|
|
|
|
"dqn_big" => {
|
2025-08-21 17:39:45 +02:00
|
|
|
let _agent = dqn_big::run::<TrictracEnvironmentBig, Backend>(&conf, false);
|
|
|
|
|
println!("> Chargement du modèle pour test");
|
|
|
|
|
let loaded_model = dqn_big::load_model(conf.dense_size, &path);
|
|
|
|
|
let loaded_agent: burn_rl::agent::DQN<TrictracEnvironmentBig, _, _> =
|
|
|
|
|
burn_rl::agent::DQN::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
2025-08-21 11:30:25 +02:00
|
|
|
}
|
|
|
|
|
"dqn_valid" => {
|
2025-08-21 17:39:45 +02:00
|
|
|
let _agent = dqn_valid::run::<TrictracEnvironmentValid, Backend>(&conf, false);
|
|
|
|
|
println!("> Chargement du modèle pour test");
|
|
|
|
|
let loaded_model = dqn_valid::load_model(conf.dense_size, &path);
|
|
|
|
|
let loaded_agent: burn_rl::agent::DQN<TrictracEnvironmentValid, _, _> =
|
|
|
|
|
burn_rl::agent::DQN::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
2025-08-21 11:30:25 +02:00
|
|
|
}
|
|
|
|
|
"sac" => {
|
2025-08-21 17:39:45 +02:00
|
|
|
let _agent = sac::run::<TrictracEnvironment, Backend>(&conf, false);
|
2025-08-21 14:35:25 +02:00
|
|
|
println!("> Chargement du modèle pour test");
|
2025-08-21 17:39:45 +02:00
|
|
|
let loaded_model = sac::load_model(conf.dense_size, &path);
|
2025-08-21 14:35:25 +02:00
|
|
|
let loaded_agent: burn_rl::agent::SAC<TrictracEnvironment, _, _> =
|
|
|
|
|
burn_rl::agent::SAC::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
2025-08-21 11:30:25 +02:00
|
|
|
}
|
2025-08-21 17:39:45 +02:00
|
|
|
"sac_big" => {
|
|
|
|
|
let _agent = sac_big::run::<TrictracEnvironmentBig, Backend>(&conf, false);
|
|
|
|
|
println!("> Chargement du modèle pour test");
|
|
|
|
|
let loaded_model = sac_big::load_model(conf.dense_size, &path);
|
|
|
|
|
let loaded_agent: burn_rl::agent::SAC<TrictracEnvironmentBig, _, _> =
|
|
|
|
|
burn_rl::agent::SAC::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
|
|
|
|
}
|
|
|
|
|
"sac_valid" => {
|
|
|
|
|
let _agent = sac_valid::run::<TrictracEnvironmentValid, Backend>(&conf, false);
|
|
|
|
|
println!("> Chargement du modèle pour test");
|
|
|
|
|
let loaded_model = sac_valid::load_model(conf.dense_size, &path);
|
|
|
|
|
let loaded_agent: burn_rl::agent::SAC<TrictracEnvironmentValid, _, _> =
|
|
|
|
|
burn_rl::agent::SAC::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
|
|
|
|
}
|
2025-08-21 11:30:25 +02:00
|
|
|
"ppo" => {
|
2025-08-21 17:39:45 +02:00
|
|
|
let _agent = ppo::run::<TrictracEnvironment, Backend>(&conf, false);
|
2025-08-21 14:35:25 +02:00
|
|
|
println!("> Chargement du modèle pour test");
|
2025-08-21 17:39:45 +02:00
|
|
|
let loaded_model = ppo::load_model(conf.dense_size, &path);
|
2025-08-21 14:35:25 +02:00
|
|
|
let loaded_agent: burn_rl::agent::PPO<TrictracEnvironment, _, _> =
|
|
|
|
|
burn_rl::agent::PPO::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
2025-08-21 11:30:25 +02:00
|
|
|
}
|
2025-08-21 17:39:45 +02:00
|
|
|
"ppo_big" => {
|
|
|
|
|
let _agent = ppo_big::run::<TrictracEnvironmentBig, Backend>(&conf, false);
|
|
|
|
|
println!("> Chargement du modèle pour test");
|
|
|
|
|
let loaded_model = ppo_big::load_model(conf.dense_size, &path);
|
|
|
|
|
let loaded_agent: burn_rl::agent::PPO<TrictracEnvironmentBig, _, _> =
|
|
|
|
|
burn_rl::agent::PPO::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
|
|
|
|
}
|
|
|
|
|
"ppo_valid" => {
|
|
|
|
|
let _agent = ppo_valid::run::<TrictracEnvironmentValid, Backend>(&conf, false);
|
|
|
|
|
println!("> Chargement du modèle pour test");
|
|
|
|
|
let loaded_model = ppo_valid::load_model(conf.dense_size, &path);
|
|
|
|
|
let loaded_agent: burn_rl::agent::PPO<TrictracEnvironmentValid, _, _> =
|
|
|
|
|
burn_rl::agent::PPO::new(loaded_model.unwrap());
|
|
|
|
|
|
|
|
|
|
println!("> Test avec le modèle chargé");
|
|
|
|
|
demo_model(loaded_agent);
|
|
|
|
|
}
|
2025-08-21 11:30:25 +02:00
|
|
|
&_ => {
|
2025-08-21 17:39:45 +02:00
|
|
|
println!("unknown algo {algo}");
|
2025-08-21 11:30:25 +02:00
|
|
|
}
|
|
|
|
|
}
|
2025-08-20 13:09:57 +02:00
|
|
|
}
|