radiate-rust 0.3.0

A Rust library for genetic algorithms and artificial evolution.
Documentation
use crate::engines::genome::chromosome::Chromosome;
use crate::engines::genome::genes::char_gene::CharGene;
use crate::engines::genome::genes::gene::Gene;
use crate::engines::genome::genotype::Genotype;

use super::Codex;

pub struct CharCodex {
    pub num_chromosomes: usize,
    pub num_genes: usize,
}

impl CharCodex {
    pub fn new(num_chromosomes: usize, num_genes: usize) -> Self {
        CharCodex { num_chromosomes, num_genes }
    }
}

impl Codex<CharGene, char, String> for CharCodex {
    fn encode(&self) -> Genotype<CharGene, char> {
        Genotype {
            chromosomes: (0..self.num_chromosomes)
                .into_iter()
                .map(|_| Chromosome::from_genes((0..self.num_genes)
                        .into_iter()
                        .map(|_| CharGene::new())
                        .collect::<Vec<CharGene>>()))
                .collect::<Vec<Chromosome<CharGene, char>>>(),
        }
    }

    fn decode(&self, genotype: &Genotype<CharGene, char>) -> String {
        genotype
            .iter()
            .map(|chromosome| {
                chromosome
                    .iter()
                    .map(|gene| gene.allele())
                    .collect::<String>()
            })
            .collect::<String>()
    }
}