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 }