View Javadoc
1   package net.bmahe.genetics4j.core.combination.multicombinations;
2   
3   import java.util.List;
4   import java.util.Objects;
5   import java.util.random.RandomGenerator;
6   
7   import net.bmahe.genetics4j.core.chromosomes.Chromosome;
8   import net.bmahe.genetics4j.core.combination.ChromosomeCombinator;
9   import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
10  
11  public class MultiChromosomeCombinations<T extends Comparable<T>> implements ChromosomeCombinator<T> {
12  
13  	private final RandomGenerator randomGenerator;
14  	private final List<ChromosomeCombinator<T>> chromosomeCombinators;
15  
16  	public MultiChromosomeCombinations(final RandomGenerator _randomGenerator,
17  			final List<ChromosomeCombinator<T>> _chromosomeCombinators) {
18  		Objects.requireNonNull(_randomGenerator);
19  		Objects.requireNonNull(_chromosomeCombinators);
20  
21  		this.randomGenerator = _randomGenerator;
22  		this.chromosomeCombinators = _chromosomeCombinators;
23  	}
24  
25  	@Override
26  	public List<Chromosome> combine(final AbstractEAConfiguration<T> eaConfiguration, final Chromosome chromosome1,
27  			final T firstParentFitness, final Chromosome chromosome2, final T secondParentFitness) {
28  
29  		final int chromosomeCombinatorIndex = randomGenerator.nextInt(chromosomeCombinators.size());
30  		final ChromosomeCombinator<T> chromosomeCombinator = chromosomeCombinators.get(chromosomeCombinatorIndex);
31  
32  		return chromosomeCombinator
33  				.combine(eaConfiguration, chromosome1, firstParentFitness, chromosome2, secondParentFitness);
34  	}
35  
36  }