| Crates.io | evolutionary |
| lib.rs | evolutionary |
| version | 0.1.1 |
| created_at | 2023-10-13 02:10:45.95963+00 |
| updated_at | 2024-01-18 23:10:44.844159+00 |
| 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