evolutionary

Crates.ioevolutionary
lib.rsevolutionary
version0.1.1
sourcesrc
created_at2023-10-13 02:10:45.95963
updated_at2024-01-18 23:10:44.844159
descriptionA fully extensible Rust framework for using paralyzed genetic algorithms to solve problems.
homepagehttps://github.com/IgorFroehner/evolutionary-computing
repositoryhttps://github.com/IgorFroehner/evolutionary-computing
max_upload_size
id1001876
size127,218
Igor S. Froehner (IgorFroehner)

documentation

README

Evolutionary

Crates.io Documentation

A fully extensible Rust framework for using paralyzed genetic algorithms to solve problems.

Currently, it supports coding in Binary, Real, Permuted Integers, Integers and any other coding you may want to implement. Check out the built-in implementation for the genetic operators:

You can also code your own selection, crossover or mutation implementing the traits and passing them to the EvolutionBuilder.

Getting Started:

First you'll need to code your Fitness function:

use evolutionary::prelude::*;

#[derive(Clone)]
pub struct MaxFitness;

impl Fitness<Bin> for MaxFitness {
    fn calculate_fitness(&self, individual: &Bin) -> f64 {
        let mut sum = 0.;
  
        for i in 0..individual.get_chromosome().len() {
            if individual.get_gene(i) {
                sum += 1.;
            }
        }
  
        sum
    }
}

Then you will be able to build an evolution object using the EvolutionBuiler and setting all the required parameters:

fn main() {
    let mut evolution = EvolutionBuilder::new(30, 10, GeneCod::Bin, ())
        .with_fitness(MaxFitness)
        .with_selection(TournamentSelection::default())
        .with_crossover(NPointsCrossover::default())
        .with_mutation(BitSwapMutation::default())
        .with_stop_condition(move |_, iterations, _| iterations >= 1000)
        .build().unwrap();

    evolution.run();

    println!("Best individual: {:?}", evolution.current_best());
    println!("Best fitness: {}", evolution.current_best_fitness());
}

There is an extended getting started here.

Examples and Projects:

There are some examples in the examples folder:

TODO:

  • Individuals:
    • Tree-based chromosomes
  • Selection:
    • Rank Selection
    • Stochastic Universal Sampling
      • Parallelize the SUS Selection
    • N Individuals Elitism
  • Crossover:
    • Real:
      • Linear Crossover (LX)
      • Arithmetic Crossover (AX)
      • Simulated Binary Crossover (SBX)
  • Mutation:
    • Real:
      • Gaussian Mutation (GM)
    • Permutation:
      • Insertion Mutation (IM)
      • Scramble Mutation (SM)
  • Usability and Performance:
    • Create macro for implementing the Individual trait
    • Allow fitness to be a function and not a struct that must be implemented
  • Examples and Benchmark
    • Implement and Optimize the Salesman problem
Commit count: 15

cargo fmt