extern crate multi_skill;
use multi_skill::data_processing::{get_dataset_by_name, write_slice_to_file};
use multi_skill::systems::{get_rating_system_by_name, simulate_contest, PlayersByName};
fn main() {
let args: Vec<String> = std::env::args().collect();
let sys_name = args.get(1).map(|s| s.as_str()).unwrap_or("mmr");
let dataset = get_dataset_by_name("codeforces").unwrap();
let seq_types = vec!["adversarial", "normal"];
let (mu_noob, sig_noob) = (1500., 350.);
let initial_phase = 128; let win_time = 346; let max_contests = 462; let tcoder_system = get_rating_system_by_name("tc").unwrap();
let custom_system = get_rating_system_by_name(sys_name).unwrap();
for seq_type in seq_types {
let is_adversarial = seq_type == "adversarial";
let mut tcoder_players = PlayersByName::new();
let mut custom_players = PlayersByName::new();
for (index, mut contest) in dataset.iter().enumerate().take(max_contests) {
println!(
"Processing{:6} contestants in{:5}th contest with wt={}: {}",
contest.standings.len(),
index,
contest.weight,
contest.name
);
if is_adversarial && initial_phase <= index && index < win_time {
let player = tcoder_players["tourist"].borrow();
if player.approx_posterior.mu > 2975.0 {
if contest.remove_contestant("tourist").is_some() {
contest.push_contestant("tourist");
}
}
}
simulate_contest(
&mut tcoder_players,
&contest,
&*tcoder_system,
mu_noob,
sig_noob,
index,
);
simulate_contest(
&mut custom_players,
&contest,
&*custom_system,
mu_noob,
sig_noob,
index,
);
}
let dir = std::path::PathBuf::from("../data/output/adversarial");
std::fs::create_dir_all(&dir).expect("Could not create directory");
let player = tcoder_players["tourist"].borrow();
let player_file = dir.join(format!("tourist_tc_{}.json", seq_type));
write_slice_to_file(&player.event_history, &player_file);
let player = custom_players["tourist"].borrow();
let player_file = dir.join(format!("tourist_{}_{}.json", sys_name, seq_type));
write_slice_to_file(&player.event_history, &player_file);
}
}