radiate_rust/engines/codexes/
char_codex.rs

1use crate::engines::genome::chromosome::Chromosome;
2use crate::engines::genome::genes::char_gene::CharGene;
3use crate::engines::genome::genes::gene::Gene;
4use crate::engines::genome::genotype::Genotype;
5
6use super::Codex;
7
8pub struct CharCodex {
9    pub num_chromosomes: usize,
10    pub num_genes: usize,
11}
12
13impl CharCodex {
14    pub fn new(num_chromosomes: usize, num_genes: usize) -> Self {
15        CharCodex { num_chromosomes, num_genes }
16    }
17}
18
19impl Codex<CharGene, char, String> for CharCodex {
20    fn encode(&self) -> Genotype<CharGene, char> {
21        Genotype {
22            chromosomes: (0..self.num_chromosomes)
23                .into_iter()
24                .map(|_| Chromosome::from_genes((0..self.num_genes)
25                        .into_iter()
26                        .map(|_| CharGene::new())
27                        .collect::<Vec<CharGene>>()))
28                .collect::<Vec<Chromosome<CharGene, char>>>(),
29        }
30    }
31
32    fn decode(&self, genotype: &Genotype<CharGene, char>) -> String {
33        genotype
34            .iter()
35            .map(|chromosome| {
36                chromosome
37                    .iter()
38                    .map(|gene| gene.allele())
39                    .collect::<String>()
40            })
41            .collect::<String>()
42    }
43}