rs-genetics

Crates.iors-genetics
lib.rsrs-genetics
version0.1.1
created_at2025-04-23 15:18:31.736568+00
updated_at2025-04-27 19:41:49.242458+00
descriptionGenetic algorithms library
homepage
repositoryhttps://github.com/nicferrari/rs-genetics
max_upload_size
id1645730
size107,154
(nicferrari)

documentation

README

rs-genetics

Latest version License

rs-genetics is a genetic algorithm library written entirely in Rust.

Get started

  • define a fitness function which inputs a Population and outputs an f64 (F:Fn(Population)->f64)
    fn fitness(weights: Population) -> f64 {
        let inputs = vec![4.0, -2.0, 3.5, 5.0, -11.0, -4.7];
        let target = 44.0;
        match weights {
            Population::F64(vec) => {
                let distance: f64 = inputs.iter()
                    .zip(&vec[0])
                    .map(|(x, y)| x * y)
                    .sum();
                let result = 1.0 / ((target - distance).abs()+0.000000001);
                result
            }
            _ => panic!("Expected Population::F64"),
        }
    }
  • choose an InitializationStrategy
  • use the default configuration or change it
    let init_strategy = InitializationStrategy::F64(Box::new(RandomInitialization));
    let mut config = Config::default();
        config.num_individuals = 1000;
  • define your Genetic Algorithm and evolve it
  let mut ga = GA::new(init_strategy,fitness, config)
  let hist = ga.evolve(100);
  • print the solution
    let hist = ga.evolve(100);
    let inputs = vec![4.0, -2.0, 3.5, 5.0, -11.0, -4.7];
    let distance: f64 = inputs.iter()
        .zip(&ga.population.get_individual(0).unwrap())
        .map(|(x, y)| x * y)
        .sum();
    println!("Solution = {}",distance);
  • plot the fitness curve
    draw_fitness(hist, "fitness_curve.png");
Commit count: 31

cargo fmt