final int populationSize, final double mutationPercent,
final double percentToMate) {
super(TrainingImplementationType.Iterative);
this.genetic = new NeuralGeneticAlgorithmHelper();
this.genetic.setCalculateScore(new GeneticScoreAdapter(calculateScore));
final Population population = new BasicPopulation(populationSize);
getGenetic().setMutationPercent(mutationPercent);
getGenetic().setMatingPopulation(percentToMate * 2);
getGenetic().setPercentToMate(percentToMate);
getGenetic().setCrossover(
new Splice(network.getStructure().calculateSize() / 3));
getGenetic().setMutate(new MutatePerturb(4.0));
getGenetic().setPopulation(population);
for (int i = 0; i < population.getPopulationSize(); i++) {
final BasicNetwork chromosomeNetwork = (BasicNetwork) network
.clone();
randomizer.randomize(chromosomeNetwork);
final NeuralGenome genome = new NeuralGenome(chromosomeNetwork);
genome.setGeneticAlgorithm(getGenetic());
getGenetic().calculateScore(genome);
getGenetic().getPopulation().add(genome);
}
population.sort();
}