Module optimize

Source
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(&params);
    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§

BasicSpecimen
Most simple implementation of a Specimen.
Solver
Parallel solver for multidimensional problems.

Enums§

SearchRange
Search range for a single dimension.

Traits§

Specimen
Specimen in evolutionary process.