Skip to content

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

Notifications You must be signed in to change notification settings

IgorFroehner/evolutionary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:
    • Parallelize the SUS Selection
  • Crossover:
    • Real:
      • Linear Crossover (LX)
      • Simulated Binary Crossover (SBX)
  • Usability and Performance:
    • Logs System
    • Create macros to simplify the implementation of the traits where possible;
    • Allow fitness to be a function and not a struct that must be implemented
  • Examples and Benchmark
    • Implement and Optimize the Salesman problem

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages