radiate_rust/engines/codexes/
bit_codex.rs

1use crate::engines::genome::chromosome::Chromosome;
2use crate::engines::genome::genes::bit_gene::BitGene;
3use crate::engines::genome::genes::gene::Gene;
4use crate::engines::genome::genotype::Genotype;
5
6use super::Codex;
7
8pub struct BitCodex {
9    pub num_chromosomes: usize,
10    pub num_genes: usize,
11}
12
13impl BitCodex {
14    pub fn new(num_chromosomes: usize, num_genes: usize) -> Self {
15        BitCodex { num_chromosomes, num_genes }
16    }
17}
18
19impl Codex<BitGene, bool, Vec<Vec<bool>>> for BitCodex {
20    fn encode(&self) -> Genotype<BitGene, bool> {
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(|_| BitGene::new())
27                        .collect::<Vec<BitGene>>()))
28                .collect::<Vec<Chromosome<BitGene, bool>>>(),
29        }
30    }
31
32    fn decode(&self, genotype: &Genotype<BitGene, bool>) -> Vec<Vec<bool>> {
33        genotype
34            .iter()
35            .map(|chromosome| {
36                chromosome
37                    .iter()
38                    .map(|gene| *gene.allele())
39                    .collect::<Vec<bool>>()
40            })
41            .collect::<Vec<Vec<bool>>>()
42    }
43}