Crate rsgenetic [−] [src]
RsGenetic
RsGenetic provides a simple framework for genetic algorithms. You need to provide the definition of a Phenotype (also known as an Individual), define how crossover and mutation work, present a fitness function, choose some settings and this library takes care of the rest.
Example usage:
use std::cmp; extern crate rsgenetic; use rsgenetic::{pheno, sim}; // Define the structure of your Phenotype struct Test { i: i32, } // Implement the Phenotype trait. impl pheno::Phenotype for Test { fn fitness(&self) -> f64 { (self.i - 0).abs() as f64 } fn crossover(&self, t: &Test) -> Test { Test { i: cmp::min(self.i, t.i) } } fn mutate(&self) -> Self { if self.i < 0 { Test { i: self.i + 1 } } else { Test { i: self.i - 1} } } } // Implement the Clone trait. impl Clone for Test { fn clone(&self) -> Self { Test { i: self.i } } } // Generate a random population. let mut tests: Vec<Box<Test>> = Vec::new(); for i in 0..100 { tests.push(Box::new(Test { i: i + 10 })); } // Create a simulator. let mut s = sim::seq::Simulator::new(tests, // Population 1000, // Iterations sim::seq::SelectionType::Tournament{ count: 3, num: 5 }, // Tournament Selection sim::seq::FitnessType::Minimize); // Minimize the fitness s.run(); assert!((*s.get()).i == 0); // For this simple example, we should always get 0.
Modules
pheno |
Contains the definition of a Phenotype. |
sim |
Contains implementations of Simulators, which can run genetic algorithms. |