1 package net.bmahe.genetics4j.core.chromosomes.factory;
2
3 import java.util.BitSet;
4 import java.util.Objects;
5 import java.util.random.RandomGenerator;
6
7 import org.apache.commons.lang3.Validate;
8
9 import net.bmahe.genetics4j.core.chromosomes.BitChromosome;
10 import net.bmahe.genetics4j.core.spec.chromosome.BitChromosomeSpec;
11 import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
12
13 public class BitChromosomeFactory implements ChromosomeFactory<BitChromosome> {
14
15 private final RandomGenerator randomGenerator;
16
17 public BitChromosomeFactory(final RandomGenerator _randomGenerator) {
18 Objects.requireNonNull(_randomGenerator);
19
20 this.randomGenerator = _randomGenerator;
21 }
22
23 @Override
24 public boolean canHandle(final ChromosomeSpec chromosomeSpec) {
25 Objects.requireNonNull(chromosomeSpec);
26
27 return chromosomeSpec instanceof BitChromosomeSpec;
28 }
29
30 @Override
31 public BitChromosome generate(final ChromosomeSpec chromosomeSpec) {
32 Objects.requireNonNull(chromosomeSpec);
33 Validate.isInstanceOf(BitChromosomeSpec.class, chromosomeSpec);
34
35 final BitChromosomeSpec bitChromosomeSpec = (BitChromosomeSpec) chromosomeSpec;
36 final int numBits = bitChromosomeSpec.numBits();
37
38 final BitSet bitSet = new BitSet(numBits);
39 for (int i = 0; i < numBits; i++) {
40 bitSet.set(i, randomGenerator.nextBoolean());
41 }
42
43 return new BitChromosome(numBits, bitSet);
44 }
45 }