Duda con JGAP en java

Hola, implemente un software sobre algoritmos geneticos utilizando la libreria jgap, ya funciona y hace las iteraciones, pero en ocaciones duplica los individuos, sin mesclarlos ni nada, simplemente pone varias veces el mismo individuo padre como un hijo, ojala alguien me pudiera ayudar, les dejo el codigo de mi progrma, tambien por si le sirve a alguien, gracias por su ayuda
clase con el main

package algoritmogenetico;

/**
 *
 * @author uriel
 */

public class Main {

    public static void main(String[] args) {
        Prueba a=new Prueba();
        a.empezar();
    }

}

clase prueba

package algoritmogenetico;

/**
 *
 * @author uriel
 */

import org.jgap.Chromosome;
import org.jgap.Configuration;
import org.jgap.FitnessFunction;
import org.jgap.Gene;
import org.jgap.Genotype;
import org.jgap.IChromosome;
import org.jgap.InvalidConfigurationException;
import org.jgap.impl.DefaultConfiguration;
import org.jgap.impl.IntegerGene;

public class Prueba {
    public void empezar(){
        try{
             //Configuramos JGAP
            Configuration configuracion = new DefaultConfiguration();
            FitnessFunction myFunc = new funcionAptitud();
            configuracion.setFitnessFunction(myFunc); //Le indicamos a JGAP cual sera nuestra funcion de aptitud
            Gene[] genEjemplo = new Gene[8];
            Mostrar show=new Mostrar();
            //Creamos una codificacion de 8 genes que nos servira para nuestros individuos (fenotipo)
            //Los genes seran valores entre 0 y 1  ejem 01001110 individuo ejemplo
            genEjemplo[0] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[1] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[2] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[3] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[4] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[5] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[6] = new IntegerGene(configuracion, 0, 1);
            genEjemplo[7] = new IntegerGene(configuracion, 0, 1);
           
            //Recordemos que los cromosomas son el correspondiente a los individuos
            Chromosome cromosomaNumero = new Chromosome(configuracion, genEjemplo); //Creamos un individuo a partir de la configuracion de los genes anterior
            configuracion.setSampleChromosome(cromosomaNumero); //Le indicamos a JGAP un ejemplo de como seran los individuos, a partir del individuo de ejemplo que creamos
            configuracion.setPopulationSize(5); //Creamos nuestra poblacion inicial
            //Creamos el genotipo de la poblacion
            //Recordemos que el genotipo se determina del fenotipo = la configuracion de los genes para un cromosoma particular
            Genotype population = Genotype.randomInitialGenotype(configuracion);
             //Comienza a iterar el algoritmo
            System.out.println("Poblacion inicial");
            for (int m = 0 ; m < 50 ; m++){ //50 iteraciones, cada iteracion sera una generacion
                show.mostrarTodosIndividuos(population.getChromosomes());
                population.evolve(8);
                System.out.println("");
                System.out.println("Iteracion #"+m);
                show.mostrarTodosIndividuos(population.getChromosomes());
                IChromosome mejor_individuo = population.getFittestChromosome(); //Obtenemos el mejor individuo para esta generacion
                System.out.println("Mejor Individuo de la generacion "+m+" :");
                show.mostrarIndividuo(mejor_individuo);
                System.out.println("Valor de aptitud obtenido:"+mejor_individuo.getFitnessValue());
            }
             /*Al final de las iteraciones, obtenemos el mejor individuo,
             * para nuestro ejemplo, es el cuadrado que no repite valores
             * en sus casillas, y cuya suma de lineas verticales, horizontales y
             * diagonales es 15
             */

            show.mostrarIndividuo(population.getFittestChromosome()); //mejor individuo obtenido

           // System.out.println("Este es el mejor individuo encontrado para el cuadrado magico de 3x3 despues de 50 generaciones:");
            //show.mostrarIndividuo(bestSolutionSoFar);//Mostramos al individuo
            //System.out.println("Valor de aptitud obtenido:"+bestSolutionSoFar.getFitnessValue()); //Mostramos el valor obtenido en la función de aptitud para el mejor individuo

        }
        catch (InvalidConfigurationException ex) {
            System.out.println("No se pudo ejecutar el AG");
        }
    }
}

clase funcionAptitud

package algoritmogenetico;

/**
 *
 * @author uriel
 */

import org.jgap.FitnessFunction;
import org.jgap.IChromosome;

public class funcionAptitud extends FitnessFunction {

    private double fitness; //La variable que llevará el valor de aptitud

    public funcionAptitud() {
        fitness=0;
    }

    @Override
    protected double evaluate(IChromosome cromosoma) {
        Evaluar(cromosoma);
        return fitness;//agregar comprobacion de si es 50
    }

    private void Evaluar(IChromosome cromosoma) {
        Integer c1= (Integer)cromosoma.getGene(0).getAllele();
        Integer c2 = (Integer) cromosoma.getGene(1).getAllele();
        Integer c3 = (Integer) cromosoma.getGene(2).getAllele();
        Integer c4= (Integer)cromosoma.getGene(3).getAllele();
        Integer c5 = (Integer) cromosoma.getGene(4).getAllele();
        Integer c6 = (Integer) cromosoma.getGene(5).getAllele();
        Integer c7= (Integer)cromosoma.getGene(6).getAllele();
        Integer c8 = (Integer) cromosoma.getGene(7).getAllele();
        String cromo=c1.toString()+c2.toString()+c3.toString()+c4.toString()+c5.toString()+c6.toString()+c7.toString()+c8.toString();
        int valor=(Integer.parseInt(cromo,2));//convierte string a numero en la base indicada(cromo,base en la que esta)
        System.out.println(cromo+" = "+valor);
        fitness=256-Math.abs(valor-50);
    }

}

clase mostrar

package algoritmogenetico;

import org.jgap.IChromosome;

/**
 *
 * @author uriel
 */

public class Mostrar {
    Integer c1,c2,c3,c4,c5,c6,c7,c8;
    public void mostrarIndividuo(IChromosome ind){

        c1 = (Integer) ind.getGene(0).getAllele();
        c2 = (Integer) ind.getGene(1).getAllele();
        c3 = (Integer) ind.getGene(2).getAllele();
        c4 = (Integer) ind.getGene(3).getAllele();
        c5 = (Integer) ind.getGene(4).getAllele();
        c6 = (Integer) ind.getGene(5).getAllele();
        c7 = (Integer) ind.getGene(6).getAllele();
        c8 = (Integer) ind.getGene(7).getAllele();

        String cromo=c1.toString()+c2.toString()+c3.toString()+c4.toString()+c5.toString()+c6.toString()+c7.toString()+c8.toString();
        int valor=(Integer.parseInt(cromo,2));

        System.out.println(c1+""+c2+""+c3+""+c4+""+c5+""+c6+""+c7+""+c8+" = "+valor);
        System.out.println("");
    }
    public void mostrarTodosIndividuos(IChromosome[] ind){
        int cantidad=ind.length,x=0;
        while(x<cantidad){
            c1 = (Integer) ind[x].getGene(0).getAllele();
            c2 = (Integer) ind[x].getGene(1).getAllele();
            c3 = (Integer) ind[x].getGene(2).getAllele();
            c4 = (Integer) ind[x].getGene(3).getAllele();
            c5 = (Integer) ind[x].getGene(4).getAllele();
            c6 = (Integer) ind[x].getGene(5).getAllele();
            c7 = (Integer) ind[x].getGene(6).getAllele();
            c8 = (Integer) ind[x].getGene(7).getAllele();
            String cromo=c1.toString()+c2.toString()+c3.toString()+c4.toString()+c5.toString()+c6.toString()+c7.toString()+c8.toString();
            int valor=(Integer.parseInt(cromo,2));
            System.out.println(c1+""+c2+""+c3+""+c4+""+c5+""+c6+""+c7+""+c8+" = "+valor);

            x++;
        }
        System.out.println("");
    }

}

En la salida me muestra esto, bueno es una pequeña parte pero desde aqui se ve la repeticion

Poblacion inicial
10110101 = 181
01011011 = 91
11111101 = 253
10111010 = 186
01100111 = 103

10110101 = 181
01011011 = 91
11111101 = 253
10111010 = 186
01100111 = 103
11111010 = 250
10111101 = 189
01011011 = 91
11110101 = 245
01100111 = 103
10110111 = 183
01011001 = 89
11011011 = 219
01100111 = 103
10010101 = 149
01100111 = 103
01100111 = 103
01011001 = 89
01011011 = 91
01100111 = 103
01011001 = 89
01011001 = 89
01011001 = 89
01011011 = 91
01011011 = 91
01011001 = 89
01011001 = 89
01011101 = 93
01011001 = 89
01011001 = 89
01011001 = 89
01011001 = 89
01011001 = 89
11011001 = 217
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
01011001 = 89
01011001 = 89

Iteracion #0
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
01011001 = 89

Mejor Individuo de la generacion 0 :
00011001 = 25

Valor de aptitud obtenido:231.0
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
01011001 = 89

00011001 = 25
00011001 = 25
00001001 = 9
00011001 = 25
11011001 = 217
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
00010001 = 17
00001001 = 9
00111001 = 57
00011001 = 25
00011001 = 25
00110001 = 49
00011000 = 24
10011001 = 153
00110001 = 49
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
00011001 = 25
00110001 = 49
00011001 = 25
00111001 = 57
00011001 = 25
00110001 = 49
00110001 = 49
00101001 = 41
00110001 = 49
00110001 = 49
00110011 = 51
10110001 = 177
00110001 = 49
00110001 = 49
00100001 = 33
00110001 = 49

Iteracion #1
00110001 = 49
00110001 = 49
00110001 = 49
00110001 = 49
00110001 = 49

Mejor Individuo de la generacion 1 :
00110001 = 49

Valor de aptitud obtenido:255.0