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