use anyhow::Result;
use haru_cmaes::fitness::{FitnessEvaluator, MinOrMax, UserFitness};
use haru_cmaes::params::{CmaesParams, CmaesParamsValidator};
use haru_cmaes::state::{CmaesState, CmaesStateLogic};
use haru_cmaes::strategy::{CmaesAlgo, CmaesAlgoOptimizer};
use pprof::ProfilerGuard;
use std::fs::File;
#[allow(unused_imports)]
use std::io::{self, Write};
fn profile_fold() {
let objective_dim = 10;
let obj_func = UserFitness::new(
|individual: &nalgebra::DVector<f32>| individual.iter().map(|x| x.powi(2)).sum(),
objective_dim,
MinOrMax::Min,
);
let popsize = 15;
let params = CmaesParams::new()
.unwrap()
.set_popsize(popsize)
.unwrap()
.set_xstart(obj_func.evaluator_dim().unwrap(), 0.5)
.unwrap()
.set_sigma(0.5)
.unwrap()
.set_only_diag(true)
.unwrap()
.set_num_gens(150)
.unwrap();
let cmaes = CmaesAlgo::new(params).unwrap();
let state = CmaesState::init_state(&cmaes.params).unwrap();
let _state = cmaes.rollout_fold(state, obj_func).unwrap();
}
fn main() -> Result<()> {
let guard = ProfilerGuard::new(1000)?;
for _i in 0..25 {
profile_fold();
}
if let Ok(report) = guard.report().build() {
let mut file = File::create("examples/flamegraph.svg")?;
report.flamegraph(&mut file)?;
let mut txt_file = File::create("examples/flamegraph.txt")?;
writeln!(txt_file, "{:?}", report)?;
}
println!("Flamegraph generated: examples/flamegraph.svg");
Ok(())
}