1 package net.bmahe.genetics4j.core.replacement;
2
3 import java.util.List;
4 import java.util.Objects;
5
6 import org.apache.commons.lang3.Validate;
7
8 import net.bmahe.genetics4j.core.Genotype;
9 import net.bmahe.genetics4j.core.Population;
10 import net.bmahe.genetics4j.core.selection.Selector;
11 import net.bmahe.genetics4j.core.spec.AbstractEAConfiguration;
12 import net.bmahe.genetics4j.core.spec.replacement.GenerationalReplacement;
13
14 public class GenerationalReplacementImpl<T extends Comparable<T>> implements ReplacementStrategyImplementor<T> {
15
16 private final GenerationalReplacement generationalReplacementSpec;
17 private final Selector<T> offspringSelector;
18
19 public GenerationalReplacementImpl(final GenerationalReplacement _elistismSpec,
20 final Selector<T> _offspringSelector) {
21 Objects.requireNonNull(_elistismSpec);
22
23 this.generationalReplacementSpec = _elistismSpec;
24 this.offspringSelector = _offspringSelector;
25 }
26
27 @Override
28 public Population<T> select(final AbstractEAConfiguration<T> eaConfiguration, final long generation,
29 final int numIndividuals, final List<Genotype> population, final List<T> populationScores,
30 final List<Genotype> offsprings, final List<T> offspringScores) {
31 Objects.requireNonNull(eaConfiguration);
32 Validate.isTrue(generation >= 0);
33 Validate.isTrue(numIndividuals > 0);
34 Objects.requireNonNull(population);
35 Objects.requireNonNull(populationScores);
36 Validate.isTrue(population.size() == populationScores.size());
37 Objects.requireNonNull(offsprings);
38 Objects.requireNonNull(offspringScores);
39 Validate.isTrue(offsprings.size() == offspringScores.size());
40
41 final Population<T> selected = new Population<>();
42
43 final Population<T> selectedOffspring = offspringSelector
44 .select(eaConfiguration, generation, numIndividuals, offsprings, offspringScores);
45 selected.addAll(selectedOffspring);
46
47 return selected;
48 }
49 }