n_queens/
n_queens.rs

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}