genetic_algorithm/chromosome/
bit.rs1use 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}