genetic_algorithm/chromosome/
bit.rs

1use super::GenesHash;
2use crate::fitness::FitnessValue;
3use fixedbitset::FixedBitSet;
4
5#[derive(Clone, Debug)]
6pub struct Bit {
7    pub genes: FixedBitSet,
8    pub fitness_score: Option<FitnessValue>,
9    pub genes_hash: Option<GenesHash>,
10    pub age: usize,
11    pub reference_id: usize,
12}
13
14impl super::Chromosome for Bit {
15    fn age(&self) -> usize {
16        self.age
17    }
18    fn reset_age(&mut self) {
19        self.age = 0;
20    }
21    fn increment_age(&mut self) {
22        self.age += 1
23    }
24    fn fitness_score(&self) -> Option<FitnessValue> {
25        self.fitness_score
26    }
27    fn set_fitness_score(&mut self, fitness_score: Option<FitnessValue>) {
28        self.fitness_score = fitness_score
29    }
30    fn genes_hash(&self) -> Option<GenesHash> {
31        self.genes_hash
32    }
33    fn set_genes_hash(&mut self, genes_hash: Option<GenesHash>) {
34        self.genes_hash = genes_hash
35    }
36    fn reset_state(&mut self, genes_hash: Option<GenesHash>) {
37        self.age = 0;
38        self.fitness_score = None;
39        self.genes_hash = genes_hash;
40        self.reference_id = usize::MAX;
41    }
42    fn copy_state(&mut self, other: &Self) {
43        self.age = other.age;
44        self.fitness_score = other.fitness_score;
45        self.genes_hash = other.genes_hash;
46        self.reference_id = other.reference_id;
47    }
48}
49impl super::GenesOwner for Bit {
50    type Genes = FixedBitSet;
51    fn new(genes: Self::Genes) -> Self {
52        Self {
53            genes,
54            fitness_score: None,
55            genes_hash: None,
56            age: 0,
57            reference_id: usize::MAX,
58        }
59    }
60    fn genes(&self) -> &FixedBitSet {
61        &self.genes
62    }
63}