optimization/
optimization.rs1use rs_genetics::plot;
2use rs_genetics::population::{Config, GA, InitializationStrategy, RandomInitialization, GetPopulation};
3use rs_genetics::population::Population;
4use plot::draw_fitness;
5
6fn main() {
7 fn fitness(weights: Population) -> f64 {
8 let inputs = vec![4.0, -2.0, 3.5, 5.0, -11.0, -4.7];
9 let target = 44.0;
10 match weights {
11 Population::F64(vec) => {
12 let distance: f64 = inputs.iter()
13 .zip(&vec[0])
14 .map(|(x, y)| x * y)
15 .sum();
16 let result = 1.0 / ((target - distance).abs()+0.000000001);
17 result
18 }
19 _ => panic!("Expected Population::F64"),
20 }
21 }
22
23 let init_strategy = InitializationStrategy::F64(Box::new(RandomInitialization));
24 let mut config = Config::default();
25 config.num_individuals = 1000;
26 let mut ga = GA::new(init_strategy,fitness, config);
27
28 let hist = ga.evolve(100);
29 let inputs = vec![4.0, -2.0, 3.5, 5.0, -11.0, -4.7];
30 let distance: f64 = inputs.iter()
31 .zip(&ga.population.get_individual(0).unwrap())
32 .map(|(x, y)| x * y)
33 .sum();
34 println!("Solution = {}",distance);
35 draw_fitness(hist, "fitness_curve.png");
36}