Expand description
Multivariate optimization (through estimation of distribution).
§Example
use multivariate_optimization::optimize::*;
use multivariate_optimization::testfuncs::rastrigin;
use rand::{Rng, thread_rng};
let mut rng = thread_rng();
const DIM: usize = 3;
let search_space: Vec<SearchRange> = (0..DIM).map(|_| {
SearchRange::Finite {
low: rng.gen_range(-7.68..=-2.56),
high: rng.gen_range(2.56..=7.68),
}
}).collect();
const POPULATION: usize = 1000;
const MAX_ITERATIONS: usize = 1000;
let mut solver = Solver::new(search_space, |params| {
let cost = rastrigin(¶ms);
BasicSpecimen { params, cost }
});
solver.set_speed_factor(0.5);
let initial_specimens = solver.random_specimens(POPULATION);
solver.extend_specimens(initial_specimens);
for iter in 0..MAX_ITERATIONS {
let specimens = solver.specimens();
println!(
"{} {}",
specimens[0].cost,
specimens[specimens.len()-1].cost,
);
if solver.converged() {
break;
}
let new_specimens = solver.recombined_specimens(POPULATION, 0.0);
solver.replace_worst_specimens(new_specimens);
}
let specimen = solver.into_specimen();
assert_eq!(specimen.cost, 0.0);
See also Solver
.
Structs§
- Basic
Specimen - Most simple implementation of a
Specimen
. - Solver
- Parallel solver for multidimensional problems.
Enums§
- Search
Range - Search range for a single dimension.
Traits§
- Specimen
- Specimen in evolutionary process.