use { criterion::{criterion_group, criterion_main, Criterion}, mop::{ genetic_algorithm::spea2::Spea2Builder, genetic_algorithm::{ operators::{ crossover::MultiPoint, mating_selection::RouletteWheel, mutation::Swap, survivor_selection::Generational, }, GeneticAlgorithmParamsBuilder, }, initial_solutions::RandomInitialSolutions, OptFacadeBuilder, }, mop_problems::{constr::Constr, prelude::*}, }; fn sch(c: &mut Criterion) { c.bench_function("sch_f64", |b| { b.iter(|| { let mut sch = Constr {}; for defs in sch.instances_definitions() { OptFacadeBuilder::<'_, _, f64, _, f64>::new() .definitions(defs.build()) .include_obj_to_min_infringements(false) .initial_solutions(RandomInitialSolutions::new()) .max_duration(30) .max_iterations(200) .push_solver_builder(Spea2Builder::new( 2.0, GeneticAlgorithmParamsBuilder::new() .crossover(MultiPoint::new(1, 90.0)) .mating_selection(RouletteWheel::new()) .mutation(Swap::new(1, 2.0)) .survivor_selection(Generational::new()) .build(), )).stagnation_percentage(2.0) .stagnation_threshold(20) .validate_cstrs(false) .build() .solve(); } }) }); } criterion_group!(benches, sch); criterion_main!(benches);