1use rs_genetics::plot::draw_fitness;
2use rs_genetics::population::{Config, GA, InitializationStrategy, TSPInitialization, GetPopulation, Population};
3fn main() {
4 fn calculate_fitness(weights: Population) -> f64 {
5 match weights {
6 Population::Usize(vec)=>{
7 if let Some(individual) = vec.get(0) {
8 let mut fitness = 0;
9 for i in 0..individual.len() {
10 for j in i + 1..individual.len() {
11 if individual[i] != individual[j] &&
12 individual[i] + i != individual[j] + j &&
13 individual[i] as isize - i as isize != individual[j] as isize - j as isize {
14 fitness += 1;
15 }
16 }
17 }
18 fitness as f64
19 } else {
20 0.0
21 }
22 }
23 _ => panic!("Expected Population::usize")
24 }
25 }
26 let num_queens = 9;
27 let init_strategy = InitializationStrategy::Usize(Box::new(TSPInitialization));
28 let mut config = Config::default();
29 config.num_individuals=100;
30 config.num_genes = num_queens;
31 let mut ga = GA::new(init_strategy, calculate_fitness, config);
32 let hist = ga.evolve(100);
33 let solution:Vec<usize> = ga.population.get_individual(0).unwrap();
34 println!("Solution = {:?}",solution);
35 draw_fitness(hist, "fitness_curve.png");
36}