use eyre::Result;
use memega::cfg::Cfg;
use memega::eval::Evaluator;
use memega::examples::all_cfg;
use memega::run::result::Stats;
use memega::run::runner::CreateRunnerFn;
use memestat::Grapher;
#[allow(unused)]
fn eval_run<E: Evaluator>(
g: &mut Grapher,
name: &str,
run_id: &str,
base_cfg: Cfg,
runner_fn: &impl CreateRunnerFn<E>,
) -> Result<()> {
const SAMPLES: usize = 100;
let cfgs = [("100 pop", base_cfg)];
for _ in 0..SAMPLES {
for (cfg_name, cfg) in cfgs.iter() {
let mut runner = runner_fn(cfg.clone());
for _ in 0..100 {
runner.run_iter()?;
}
let r = Stats::from_run(&mut runner.run_iter()?);
g.add(&format!("{}:{}:best fitness", name, cfg_name), run_id, r.best_fitness);
g.add(&format!("{}:{}:mean fitness", name, cfg_name), run_id, r.mean_fitness);
g.add(&format!("{}:{}:dupes", name, cfg_name), run_id, r.num_dup as f64);
g.add(&format!("{}:{}:mean dist", name, cfg_name), run_id, r.mean_distance);
g.add(&format!("{}:{}:species", name, cfg_name), run_id, r.species.num as f64);
}
}
Ok(())
}
#[allow(unused)]
fn run_grapher<E: Evaluator>(
name: &str,
base_cfg: Cfg,
runner_fn: &impl CreateRunnerFn<E>,
) -> Result<()> {
let mut g = Grapher::new();
let mod_cfg = all_cfg();
eval_run(&mut g, name, "def", base_cfg, runner_fn)?;
eval_run(&mut g, name, "mod", mod_cfg, runner_fn)?;
g.analyse();
Ok(())
}
fn main() -> Result<()> {
pretty_env_logger::init_timed();
color_eyre::install()?;
Ok(())
}