Crates.io | evolutionary |
lib.rs | evolutionary |
version | 0.1.1 |
source | src |
created_at | 2023-10-13 02:10:45.95963 |
updated_at | 2024-01-18 23:10:44.844159 |
description | A fully extensible Rust framework for using paralyzed genetic algorithms to solve problems. |
homepage | https://github.com/IgorFroehner/evolutionary-computing |
repository | https://github.com/IgorFroehner/evolutionary-computing |
max_upload_size | |
id | 1001876 |
size | 127,218 |
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
.
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.
evolutionary
library use, implemented with the bevy game engine.There are some examples in the examples folder:
Individual
trait