1 package net.bmahe.genetics4j.neat.combination.parentcompare;
2
3 import java.util.Objects;
4
5 import net.bmahe.genetics4j.neat.chromosomes.NeatChromosome;
6 import net.bmahe.genetics4j.neat.spec.combination.parentcompare.FitnessThenSizeComparison;
7 import net.bmahe.genetics4j.neat.spec.combination.parentcompare.ParentComparisonPolicy;
8
9 public class FitnessThenSizeComparisonHandler implements ParentComparisonHandler {
10
11 @Override
12 public boolean canHandle(final ParentComparisonPolicy parentComparisonPolicy) {
13 Objects.requireNonNull(parentComparisonPolicy);
14
15 return parentComparisonPolicy instanceof FitnessThenSizeComparison;
16 }
17
18 @Override
19 public ChosenOtherChromosome compare(final ParentComparisonPolicy parentComparisonPolicy, final NeatChromosome first,
20 final NeatChromosome second, final int fitnessComparison) {
21 Objects.requireNonNull(parentComparisonPolicy);
22 Objects.requireNonNull(first);
23 Objects.requireNonNull(second);
24
25 if (fitnessComparison < 0 || (fitnessComparison == 0 && first.getNumAlleles() > second.getNumAlleles())) {
26 return new ChosenOtherChromosome(second, first);
27 }
28 return new ChosenOtherChromosome(first, second);
29 }
30 }