View Javadoc
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  }