evolutionary 0.1.1

A fully extensible Rust framework for using paralyzed genetic algorithms to solve problems.
Documentation
use rand::{thread_rng, Rng};

use super::Individual;

#[derive(Debug, Clone)]
pub struct Bin {
    chromosome: Vec<bool>,
    fitness: f64,
}

impl Bin {
    pub fn new(chromosome: Vec<bool>) -> Self {
        Self {
            chromosome,
            fitness: 0.0,
        }
    }
}

impl Individual for Bin {
    type Gene = bool;
    type RangeType = ();

    fn generate_member(dimension: u32, _: &Self::RangeType) -> Self {
        let mut rng = thread_rng();

        Self {
            chromosome: (0..dimension).map(|_| rng.gen()).collect::<Vec<bool>>(),
            fitness: 0.0,
        }
    }

    fn get_chromosome(&self) -> &Vec<Self::Gene> {
        &self.chromosome
    }

    fn get_mut_chromosome(&mut self) -> &mut Vec<Self::Gene> {
        &mut self.chromosome
    }

    fn set_gene(&mut self, index: usize, value: Self::Gene) {
        self.chromosome[index] = value;
    }

    fn get_gene(&self, index: usize) -> Self::Gene {
        self.chromosome[index]
    }

    fn set_fitness(&mut self, fitness: f64) {
        self.fitness = fitness;
    }

    fn get_fitness(&self) -> f64 {
        self.fitness
    }
}