1 package net.bmahe.genetics4j.core.combination;
2
3 import java.util.List;
4 import java.util.Objects;
5
6 import net.bmahe.genetics4j.core.chromosomes.Chromosome;
7 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
8 import net.bmahe.genetics4j.core.spec.chromosome.ChromosomeSpec;
9 import net.bmahe.genetics4j.core.spec.combination.CombinationPolicy;
10 import net.bmahe.genetics4j.core.spec.combination.PickFirstParent;
11
12 public class PickFirstParentHandler<T extends Comparable<T>> implements ChromosomeCombinatorHandler<T> {
13
14 @Override
15 public boolean canHandle(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
16 final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
17 Objects.requireNonNull(combinationPolicy);
18
19 return combinationPolicy instanceof PickFirstParent;
20
21 }
22
23 @Override
24 public ChromosomeCombinator<T> resolve(final ChromosomeCombinatorResolver<T> chromosomeCombinatorResolver,
25 final CombinationPolicy combinationPolicy, final ChromosomeSpec chromosome) {
26
27 return new ChromosomeCombinator<>() {
28
29 @Override
30 public List<Chromosome> combine(final AbstractEAConfiguration<T> eaConfiguration, final Chromosome chromosome1,
31 final T firstParentFitness, final Chromosome chromosome2, final T secondParentFitness) {
32 Objects.requireNonNull(chromosome1);
33
34 return List.of(chromosome1);
35 }
36 };
37 }
38 }