radiate_rust/engines/codexes/
char_codex.rs1use 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}