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