View Javadoc
1   package net.bmahe.genetics4j.core.combination.erx;
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.combination.ChromosomeCombinator;
9   import net.bmahe.genetics4j.core.combination.ChromosomeCombinatorHandler;
10  import net.bmahe.genetics4j.core.combination.ChromosomeCombinatorResolver;
11  import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
12  import net.bmahe.genetics4j.core.spec.chromosome.IntChromosomeSpec;
13  import net.bmahe.genetics4j.core.spec.combination.CombinationPolicy;
14  import net.bmahe.genetics4j.core.spec.combination.EdgeRecombinationCrossover;
15  
16  public class EdgeRecombinationCrossoverHandler<T extends Comparable<T>> implements ChromosomeCombinatorHandler<T> {
17  
18  	private final RandomGenerator randomGenerator;
19  
20  	public EdgeRecombinationCrossoverHandler(final RandomGenerator _randomGenerator) {
21  		Objects.requireNonNull(_randomGenerator);
22  
23  		this.randomGenerator = _randomGenerator;
24  	}
25  
26  	@Override
27  	public boolean canHandle(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
28  			final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
29  		Objects.requireNonNull(combinationPolicy);
30  		Objects.requireNonNull(chromosome);
31  
32  		return combinationPolicy instanceof EdgeRecombinationCrossover && chromosome instanceof IntChromosomeSpec;
33  	}
34  
35  	@Override
36  	public ChromosomeCombinator<T> resolve(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
37  			final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
38  		Objects.requireNonNull(chromosomeCombinatorResolver);
39  		Objects.requireNonNull(combinationPolicy);
40  		Objects.requireNonNull(chromosome);
41  		Validate.isTrue(canHandle(chromosomeCombinatorResolver, combinationPolicy, chromosome));
42  
43  		return new IntEdgeRecombinationCrossover<>(randomGenerator);
44  	}
45  }