/// <summary> /// Construct a neural genetic algorithm. /// </summary> /// /// <param name="network">The network to base this on.</param> /// <param name="randomizer">The randomizer used to create this initial population.</param> /// <param name="calculateScore">The score calculation object.</param> /// <param name="populationSize">The population size.</param> /// <param name="mutationPercent">The percent of offspring to mutate.</param> /// <param name="percentToMate">The percent of the population allowed to mate.</param> public NeuralGeneticAlgorithm(BasicNetwork network, IRandomizer randomizer, ICalculateScore calculateScore, int populationSize, double mutationPercent, double percentToMate) : base(TrainingImplementationType.Iterative) { Genetic = new NeuralGeneticAlgorithmHelper { CalculateScore = new GeneticScoreAdapter(calculateScore) }; IPopulation population = new BasicPopulation(populationSize); Genetic.MutationPercent = mutationPercent; Genetic.MatingPopulation = percentToMate * 2; Genetic.PercentToMate = percentToMate; Genetic.Crossover = new Splice(network.Structure.CalculateSize() / 3); Genetic.Mutate = new MutatePerturb(4.0d); Genetic.Population = population; for (int i = 0; i < population.PopulationSize; i++) { var chromosomeNetwork = (BasicNetwork)(network .Clone()); randomizer.Randomize(chromosomeNetwork); var genome = new NeuralGenome(chromosomeNetwork) { GA = Genetic }; Genetic.PerformCalculateScore(genome); Genetic.Population.Add(genome); } population.Sort(); }
/// <summary> /// Construct a neural genetic algorithm. /// </summary> /// <param name="network">The network to base this on.</param> /// <param name="randomizer">The randomizer used to create this initial population.</param> /// <param name="calculateScore">The score calculation object.</param> /// <param name="populationSize">The population size.</param> /// <param name="mutationPercent">The percent of offspring to mutate.</param> /// <param name="percentToMate">The percent of the population allowed to mate.</param> public NeuralGeneticAlgorithm(BasicNetwork network, IRandomizer randomizer, ICalculateScore calculateScore, int populationSize, double mutationPercent, double percentToMate) { this.Helper = new NeuralGeneticAlgorithmHelper(); this.Helper.CalculateScore = new GeneticScoreAdapter(calculateScore); IPopulation population = new BasicPopulation(populationSize); Helper.MutationPercent = mutationPercent; Helper.MatingPopulation = (percentToMate * 2); Helper.PercentToMate = (percentToMate); Helper.Crossover = (new Splice(network.Structure.CalculateSize() / 3)); Helper.Mutate = (new MutatePerturb(4.0)); Helper.Population = (population); for (int i = 0; i < population.PopulationSize; i++) { BasicNetwork chromosomeNetwork = (BasicNetwork)network .Clone(); randomizer.Randomize(chromosomeNetwork); NeuralGenome genome = new NeuralGenome(this, chromosomeNetwork); Helper.PerformScoreCalculation(genome); Helper.Population.Add(genome); } population.Sort(); }
private void initPopulation(GeneticAlgorithm ga) { ICalculateGenomeScore score = new TSPScore(cities); ga.CalculateScore = score; IPopulation population = new BasicPopulation(POPULATION_SIZE); ga.Population = population; for (int i = 0; i < POPULATION_SIZE; i++) { var genome = new TSPGenome(ga, cities); ga.Population.Genomes.Add(genome); ga.PerformCalculateScore(genome); } population.Sort(); }