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