Example #1
0
        /// <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();
        }