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