lgp/utils/
benchmark_tools.rs1use std::{error::Error, iter::repeat_with, path::PathBuf};
4
5use itertools::Itertools;
6
7use crate::core::{
8 characteristics::Load,
9 engines::{core_engine::Core, generate_engine::Generate, status_engine::Status},
10};
11
12pub fn load_and_run_program<C>(
14 program_path: impl Into<PathBuf> + Clone,
15 n_trials: usize,
16 default_fitness: f64,
17) -> Result<(f64, f64), Box<dyn Error>>
18where
19 C: Core,
20{
21 let program = C::Individual::load(program_path);
22 let original_fitness = C::Status::get_fitness(&program);
23
24 let trials: Vec<C::State> = repeat_with(|| C::Generate::generate(()))
25 .take(n_trials)
26 .collect_vec();
27
28 let mut population = vec![program];
29 C::eval_fitness(&mut population, &trials, default_fitness);
30
31 let new_fitness = C::Status::get_fitness(population.first().unwrap());
32
33 Ok((original_fitness, new_fitness))
34}