Beispiel #1
0
        /// <summary>
        ///  Demonstrate the mutate peterb operator.  An offspring will be created by randomly changing each
        /// gene.
        /// </summary>
        public static void MutatePeterb()
        {
            Console.WriteLine("Mutate Perturb");

            IGenerateRandom rnd = new MersenneTwisterGenerateRandom();

            // Create a new population.
            IPopulation pop = new BasicPopulation();

            pop.GenomeFactory = new DoubleArrayGenomeFactory(5);

            // Create a trainer with a very simple score function.  We do not care
            // about the calculation of the score, as they will never be calculated.
            IEvolutionaryAlgorithm train = new BasicEA(pop, new NullScore());


            var opp = new MutatePerturb(0.1);

            train.AddOperation(1.0, opp);


            // Create a peterb operator.  Use it 1.0 (100%) of the time.
            var parents = new DoubleArrayGenome[1];

            parents[0]            = (DoubleArrayGenome)pop.GenomeFactory.Factor();
            parents[0].Population = pop;

            for (int i = 1; i <= 5; i++)
            {
                parents[0].Data[i - 1] = i;
            }

            // Create an array to hold the offspring.
            var offspring = new DoubleArrayGenome[1];

            offspring[0] = new DoubleArrayGenome(5);

            // Perform the operation
            opp.PerformOperation(rnd, parents, 0, offspring, 0);

            // Display the results
            Console.WriteLine("Parent: " + string.Join(",", parents[0].Data));
            Console.WriteLine("Offspring: " + string.Join(",", offspring[0].Data));
        }
Beispiel #2
0
        private BasicPopulation InitPopulation()
        {
            BasicPopulation result = new BasicPopulation(populationSize, null);

            BasicSpecies defaultSpecies = new BasicSpecies()
            {
                Population = result
            };

            for (int i = 0; i < populationSize; i++)
            {
                IntegerArrayGenome genome = RandomGenome();
                defaultSpecies.Members.Add(genome);
            }

            result.GenomeFactory = new IntegerArrayGenomeFactory(cities.Length);
            result.Species.Add(defaultSpecies);

            return(result);
        }
        /// <summary>
        /// Construct a neat trainer with a new population.
        /// </summary>
        /// <param name="calculateScore">The score calculation object.</param>
        /// <param name="inputCount">The input neuron count.</param>
        /// <param name="outputCount">The output neuron count.</param>
        /// <param name="populationSize">The population size.</param>
        public NEATTraining(ICalculateScore calculateScore,
                            int inputCount, int outputCount,
                            int populationSize)
        {
            this.inputCount  = inputCount;
            this.outputCount = outputCount;

            CalculateScore = new GeneticScoreAdapter(calculateScore);
            Comparator     = new GenomeComparator(CalculateScore);
            Population     = new BasicPopulation(populationSize);

            // create the initial population
            for (int i = 0; i < populationSize; i++)
            {
                Population.Add(
                    new NEATGenome(this, Population.AssignGenomeID(),
                                   inputCount, outputCount));
            }

            Init();
        }
Beispiel #4
0
        /// <summary>
        ///     The entry point for this example.  If you would like to make this example
        ///     stand alone, then add to its own project and rename to Main.
        /// </summary>
        /// <param name="args">Not used.</param>
        public static void ExampleMain(string[] args)
        {
            // Create a new population.
            IPopulation pop     = new BasicPopulation();
            ISpecies    species = pop.CreateSpecies();

            // Create 1000 genomes, assign the score to be the index number.
            for (int i = 0; i < 1000; i++)
            {
                IGenome genome = new IntegerArrayGenome(1);
                genome.Score         = i;
                genome.AdjustedScore = i;
                pop.Species[0].Add(genome);
            }

            IGenerateRandom rnd = new MersenneTwisterGenerateRandom();

            // Create a trainer with a very simple score function.  We do not care
            // about the calculation of the score, as they will never be calculated.
            // We only care that we are maximizing.
            IEvolutionaryAlgorithm train = new BasicEA(pop, new NullScore());

            // Perform the test for round counts between 1 and 10.
            for (int roundCount = 1; roundCount <= 10; roundCount++)
            {
                var selection = new TournamentSelection(train, roundCount);
                int sum       = 0;
                int count     = 0;
                for (int i = 0; i < 100000; i++)
                {
                    int     genomeID = selection.PerformSelection(rnd, species);
                    IGenome genome   = species.Members[genomeID];
                    sum += (int)genome.AdjustedScore;
                    count++;
                }
                sum /= count;
                Console.WriteLine("Rounds: " + roundCount + ", Avg Score: " + sum);
            }
        }
Beispiel #5
0
 public BasicPopulation CreateInitialPopulation(int populationSize, int geneCountPerChromosome)
 {
     try
     {
         var genomeFactory  = new IntegerArrayGenomeFactory(geneCountPerChromosome);
         var population     = new BasicPopulation(populationSize, genomeFactory);
         var defaultSpecies = new BasicSpecies();
         for (var i = 1; i <= populationSize; i++)
         {
             Console.Write($"\n {i} Chomosome - ");
             IntegerArrayGenome genome = CreateRandomGenome(geneCountPerChromosome);
             defaultSpecies.Members.Add(genome);
         }
         population.Species.Add(defaultSpecies);
         return(population);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         throw;
     }
 }
Beispiel #6
0
        static void Main(string[] args)
        {
            try
            {
                Display("------------ Load City Coodinates");
                var travellingSalesman = new TravellingSalesMan();
                var cities             = travellingSalesman.LoadCities(Config.CityCount, Config.MaxXCordinate, Config.MaxYCordinate);

                // 1 create initial population
                Display("\n------------ Create Initial Solution Population");
                BasicPopulation population = travellingSalesman.CreateInitialPopulation(Config.PopulationSize, Config.CityCount);

                // 2 create fitness function
                Display("\n------------ Create Fitness function - sum of total diatance of cities within the chromosome - distance low --> better chormosome");
                var tspFitness = new TravellingSalesManFitnessScore(cities);

                // 3 create GA trainer
                Display("\n------------ Create GA Trainer for iterations");
                TrainEA geneticAlgorithm = travellingSalesman.CreateGA(Config.CityCount, population, tspFitness, Config.CrossOverProbabality, Config.MutationProbabality);

                // 4 iterate and create off spring of new solutions
                Display("\n------------ Run GA for iterations until good solutions found");
                geneticAlgorithm = travellingSalesman.RunGA(geneticAlgorithm, Config.MaxNumIterationsSameSolution);

                // 5 display GA results
                Display("\n------------ Display Final solution after iterations");
                travellingSalesman.DisplaySolution(geneticAlgorithm, cities);

                Display("\n------------ Fin");
                Console.ReadKey();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }