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