1 package net.bmahe.genetics4j.core.combination.ordercrossover;
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.OrderCrossover;
15
16 public class IntOrderCrossoverHandler<T extends Comparable<T>> implements ChromosomeCombinatorHandler<T> {
17
18 private final RandomGenerator randomGenerator;
19
20 public IntOrderCrossoverHandler(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 OrderCrossover && 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 IntChromosomeOrderCrossover<>(randomGenerator);
44 }
45 }