use crate::genotypes::Binary as BinaryGenotype;
use crate::traits::LinearChromosome;
use rand::Rng;
pub fn bit_flip<U>(chromosome: &mut U)
where
U: LinearChromosome<Gene = BinaryGenotype>,
{
let len = chromosome.dna().len();
if len == 0 {
return;
}
crate::log_debug!(target="mutation_events", method="bit_flip"; "Starting the bit flip mutation");
let mut rng = crate::rng::make_rng();
let index = rng.random_range(0..len);
let mut gene = chromosome.dna()[index];
gene.value = !gene.value;
chromosome.set_gene(index, gene);
crate::log_debug!(target="mutation_events", method="bit_flip"; "Bit flip mutation finished");
}