Package de.mh4j.solver.genetic.darwin

Source Code of de.mh4j.solver.genetic.darwin.AgeSelectorTest

package de.mh4j.solver.genetic.darwin;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.List;

import org.testng.annotations.Test;

import de.mh4j.solver.genetic.AbstractGenomeTest;
import de.mh4j.solver.genetic.Genome;
import de.mh4j.solver.genetic.genepool.GenePool;

public class AgeSelectorTest extends AbstractGenomeTest {

    private List<Genome> oldGenomes;
    private List<Genome> newGenomes;

    @Test
    public void testSelect() {
        int maxAge = 3;
        int currentGeneration = 6;

        GenePool<Genome> population = new GenePool<>();
        List<Genome> allGenomes = createPopulation(maxAge, currentGeneration);

        population.addAllGenomes(allGenomes);

        // iterate to reach preferred generation
        for (int i = 0; i < currentGeneration; i++) {
            population.startNewGeneration();
        }

        Darwin<Genome> selector = new AgeSelector<>(maxAge);
        selector.select(population, 5);

        assert population.getSize() == 5 : "New population should have size: 5";

        for (Genome genome : oldGenomes) {
            assert population.contains(genome) == false;
        }

        for (Genome genome : newGenomes) {
            assert population.contains(genome) == true;
        }
    }

    private List<Genome> createPopulation(int maxAge, int currentGeneration) {
        int totalNumberOfGenomes = 10;
        int tooOld = currentGeneration - maxAge - 1;
        oldGenomes = new ArrayList<>(totalNumberOfGenomes / 2);
        newGenomes = new ArrayList<>(totalNumberOfGenomes / 2);

        Genome genome1 = mock(Genome.class);
        when(genome1.getFitness()).thenReturn(1000);
        when(genome1.getBirthGeneration()).thenReturn(tooOld);
        oldGenomes.add(genome1);

        Genome genome2 = mock(Genome.class);
        when(genome2.getFitness()).thenReturn(2000);
        when(genome2.getBirthGeneration()).thenReturn(tooOld);
        oldGenomes.add(genome2);

        Genome genome3 = mock(Genome.class);
        when(genome3.getFitness()).thenReturn(3000);
        when(genome3.getBirthGeneration()).thenReturn(tooOld);
        oldGenomes.add(genome3);

        Genome genome4 = mock(Genome.class);
        when(genome4.getFitness()).thenReturn(4000);
        when(genome4.getBirthGeneration()).thenReturn(tooOld);
        oldGenomes.add(genome4);

        Genome genome5 = mock(Genome.class);
        when(genome5.getFitness()).thenReturn(5000);
        when(genome5.getBirthGeneration()).thenReturn(tooOld);
        oldGenomes.add(genome5);

        Genome genome6 = mock(Genome.class);
        when(genome6.getFitness()).thenReturn(6000);
        when(genome6.getBirthGeneration()).thenReturn(currentGeneration);
        newGenomes.add(genome6);

        Genome genome7 = mock(Genome.class);
        when(genome7.getFitness()).thenReturn(7000);
        when(genome7.getBirthGeneration()).thenReturn(currentGeneration);
        newGenomes.add(genome7);

        Genome genome8 = mock(Genome.class);
        when(genome8.getFitness()).thenReturn(8000);
        when(genome8.getBirthGeneration()).thenReturn(currentGeneration);
        newGenomes.add(genome8);

        Genome genome9 = mock(Genome.class);
        when(genome9.getFitness()).thenReturn(9000);
        when(genome9.getBirthGeneration()).thenReturn(currentGeneration);
        newGenomes.add(genome9);

        Genome genome10 = mock(Genome.class);
        when(genome10.getFitness()).thenReturn(10000);
        when(genome10.getBirthGeneration()).thenReturn(currentGeneration);
        newGenomes.add(genome10);

        List<Genome> allGenomes = new ArrayList<>(totalNumberOfGenomes);
        allGenomes.addAll(oldGenomes);
        allGenomes.addAll(newGenomes);

        for (int i = 0; i < totalNumberOfGenomes; i++) {
            for (int j = 0; j < totalNumberOfGenomes; j++) {
                makeGenomeMockComparable(allGenomes.get(i), allGenomes.get(j));
            }
        }

        return allGenomes;
    }
}
TOP

Related Classes of de.mh4j.solver.genetic.darwin.AgeSelectorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.