Пример #1
0
        /// <summary>
        /// Creates instance of genetic algorithm
        /// </summary>
        /// <param name="graph">Graph on which algorithm will operate</param>
        /// <param name="problem">Problem for which algorithm will attempt to find solution</param>
        /// <param name="geneticOperators">Genetic operators used for breeding new generations</param>
        /// <param name="settings">General settings for solution finding process</param>
        /// <param name="startingPopulation">Starting population for algorithm</param>
        //TODO: Introduce SavedState complex type
        public GeneticAlgorithm(Graph graph, IProblem problem, GeneticOperators geneticOperators,
                                GeneticAlgorithmSettings settings, ICollection <Individual> startingPopulation = null,
                                uint currentGeneration = 0, Guid?id = null)
            : base(graph, problem, id)
        {
            if (geneticOperators == null)
            {
                throw new ArgumentNullException(nameof(geneticOperators));
            }
            if (!geneticOperators.IsValid())
            {
                throw new ArgumentException("Genetic operators are not valid", nameof(geneticOperators));
            }
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            GeneticOperators = geneticOperators;
            Settings         = settings;
            if (startingPopulation == null || startingPopulation.Count == 0 || !startingPopulation.All(IsIndividualValid))
            {
                GenerateInitialPopulation();
            }
            else
            {
                CurrentPopulation = new SortedSet <Individual>();
                foreach (var element in startingPopulation)
                {
                    CurrentPopulation.Add(element);
                }
            }

            CurrentGeneration = currentGeneration;
        }
Пример #2
0
        public void test4()
        {
            Console.WriteLine("Running test 4, cos...");

            NeuronSettings      nSettings     = new NeuronSettings();
            NeuronLayerSettings layerSettings = new NeuronLayerSettings(nSettings);

            layerSettings.mNumNeuronsPerLayerMin = 1;
            layerSettings.mNumNeuronsPerLayerMax = 1;

            NeuronNetSettings nnSettings = new NeuronNetSettings(layerSettings);

            nnSettings.mNumInputs    = 1;
            nnSettings.mNumOutputs   = 1;
            nnSettings.mNumLayersMin = 0;
            nnSettings.mNumLayersMax = 0;

            GeneticAlgorithmSettings gaSettings = new GeneticAlgorithmSettings(nnSettings.mFactory);

            gaSettings.mMaxPopulation = 1000;

            GeneticAlgorithm ga = new GeneticAlgorithm(gaSettings);

            List <double> inputs = new List <double>()
            {
                0
            };
            List <double> expected = new List <double>()
            {
                0
            };

            int mNumEpochs = 100;

            Console.WriteLine("Learning...");
            for (int iEpoch = 0; iEpoch < mNumEpochs; iEpoch++)
            {
                Console.Write(string.Format("Epoch: {0} / {1}\t", iEpoch + 1, mNumEpochs));

                for (double x = -1.5; x <= 1.5; x += 0.001)
                {
                    inputs[0]   = x;
                    expected[0] = Math.Sin(x);
                    learnPopulation(ga, inputs, expected);
                }

                Console.Write(string.Format("Average: {0}\t", ga.AverageFitness));
                Console.Write(string.Format("Best: {0}\t", ga.BestFitness));
                Console.Write(string.Format("Worst: {0}\n", ga.WorstFitness));

                ga.epoch();
            }


            Console.Write(ga.SortedPopulation[0].ToString());
        }
Пример #3
0
        static void Main(string[] args)
        {
            var settings = new GeneticAlgorithmSettings(new BasicStockTrading(), BasicStockTrading.Prices.Count);

            settings.StopFunction = new BasicStopFunction {
                MinFitness = 335
            };
            settings.Rng = new StrongRandom(new BufferedRadnomProvider((settings.PopulationSize * settings.GenotypeLength + (3 * settings.PopulationSize))));
            var algorithm = new GeneticAlgorithm(settings);

            algorithm.Run();
        }
Пример #4
0
        public static void GeneticAlgorithmTest()
        {
            // In this test case, the GA is tasked with finding two numbers A and B
            // where A to the power of B = 100 and the difference between A and B is
            // as great as possible.

            var settings = new GeneticAlgorithmSettings()
            {
                Objective      = OptimisationObjective.Minimise,
                MaxGenerations = 1000,
                WildcardRate   = 0.1,
                InitialBoost   = 5,
            };
            var solver = new TestGASolver(settings);
            var result = solver.Run();
            var value  = solver.CalculateValue(result);

            Core.Print("Result: " + result[0] + " ^ " + result[1] + " = " + value);
        }
Пример #5
0
        /// <summary>
        /// Creates instance of genetic algorithm
        /// </summary>
        /// <param name="graph">Graph on which algorithm will operate</param>
        /// <param name="problem">Problem for which algorithm will attempt to find solution</param>
        /// <param name="geneticOperators">Genetic operators used for breeding new generations</param>
        /// <param name="settings">General settings for solution finding process</param>
        /// <param name="startingPopulation">Starting population for algorithm</param>
        //TODO: Introduce SavedState complex type
        public GeneticAlgorithm(Graph graph, IProblem problem, GeneticOperators geneticOperators, 
            GeneticAlgorithmSettings settings, ICollection<Individual> startingPopulation = null, 
            uint currentGeneration = 0, Guid? id = null)
            : base(graph, problem, id)
        {
            if (geneticOperators == null)
                throw new ArgumentNullException(nameof(geneticOperators));
            if (!geneticOperators.IsValid())
                throw new ArgumentException("Genetic operators are not valid", nameof(geneticOperators));
            if (settings == null)
                throw new ArgumentNullException(nameof(settings));
            GeneticOperators = geneticOperators;
            Settings = settings;
            if (startingPopulation == null || startingPopulation.Count == 0 || !startingPopulation.All(IsIndividualValid))
                GenerateInitialPopulation();
            else
            {
                CurrentPopulation = new SortedSet<Individual>();
                foreach (var element in startingPopulation)
                    CurrentPopulation.Add(element);
            }

            CurrentGeneration = currentGeneration;
        }
Пример #6
0
 public TestGASolver(GeneticAlgorithmSettings settings) : base(settings)
 {
 }
Пример #7
0
        public void test1()
        {
            Console.WriteLine("Running test 1...");

            NeuronSettings      nSettings     = new NeuronSettings();
            NeuronLayerSettings layerSettings = new NeuronLayerSettings(nSettings);

            layerSettings.mNumNeuronsPerLayerMin = 2;
            layerSettings.mNumNeuronsPerLayerMax = 2;

            NeuronNetSettings nnSettings = new NeuronNetSettings(layerSettings);

            nnSettings.mNumInputs    = 1;
            nnSettings.mNumOutputs   = 1;
            nnSettings.mNumLayersMin = 0;
            nnSettings.mNumLayersMax = 0;

            GeneticAlgorithmSettings gaSettings = new GeneticAlgorithmSettings(nnSettings.mFactory);

            gaSettings.mMaxPopulation = 100;

            GeneticAlgorithm ga = new GeneticAlgorithm(gaSettings);

            List <double> inputs = new List <double>()
            {
                0
            };
            List <double> expected = new List <double>()
            {
                0
            };

            int mNumEpochs = 100;

            Console.WriteLine("Learning...");
            for (int iEpoch = 0; iEpoch < mNumEpochs; iEpoch++)
            {
                Console.Write(string.Format("Epoch: {0} / {1}\t", iEpoch + 1, mNumEpochs));

                for (int x = 0; x <= 100; x++)
                {
                    inputs.Clear();
                    expected.Clear();

                    inputs.Add((double)x / 100.0);
                    expected.Add((double)x / 100.0);
                    learnPopulation(ga, inputs, expected);
                }

                Console.Write(string.Format("Average: {0}\t", ga.AverageFitness));
                Console.Write(string.Format("Best: {0}\t", ga.BestFitness));
                Console.Write(string.Format("Worst: {0}\n", ga.WorstFitness));

                ga.epoch();
            }

            Console.WriteLine("Predicting...");

            for (int x = 0; x <= 100; x++)
            {
                inputs[0] = (double)x / 100.0;
                var outputs = predict(ga, inputs);
                Console.WriteLine(string.Format("Input:\t{0}\t\tOutput:\t{1}", inputs[0], outputs[0]));
            }
        }
Пример #8
0
        public void test5Thread()
        {
            Console.WriteLine("Running test 5, min...");

            DateTime timeStart = DateTime.Now;

            NeuronSettings      nSettings     = new NeuronSettings();
            NeuronLayerSettings layerSettings = new NeuronLayerSettings(nSettings);

            layerSettings.mNumNeuronsPerLayerMin = 2;
            layerSettings.mNumNeuronsPerLayerMax = 2;

            NeuronNetSettings nnSettings = new NeuronNetSettings(layerSettings);

            nnSettings.mNumInputs    = 2;
            nnSettings.mNumOutputs   = 1;
            nnSettings.mNumLayersMin = 2;
            nnSettings.mNumLayersMax = 2;

            GeneticAlgorithmSettings gaSettings = new GeneticAlgorithmSettings(nnSettings.mFactory);

            gaSettings.mMaxPopulation = 100;

            GeneticAlgorithm ga = new GeneticAlgorithm(gaSettings);

            List <double> inputs = new List <double>()
            {
                0, 0
            };
            List <double> expected = new List <double>()
            {
                0
            };

            int iEpoch = 0;

            Console.WriteLine("Learning...");
            while (!mLearningStopped && iEpoch < 100)
            {
                Console.Write(string.Format("Epoch: {0}\t", iEpoch++));

                for (double x = 0; x <= 1; x += 0.01)
                {
                    for (double y = 0; y <= 1; y += 0.01)
                    {
                        inputs[0] = x;
                        inputs[1] = y;

                        expected[0] = x * y;

                        learnPopulation(ga, inputs, expected);
                    }
                }

                Console.Write(string.Format("Average: {0:0.00}\t", ga.AverageFitness));
                Console.Write(string.Format("Best: {0:0.00}\t", ga.BestFitness));
                Console.Write(string.Format("Worst: {0:0.00}\n", ga.WorstFitness));

                ga.epoch();
            }
            DateTime timeEnd = DateTime.Now;
            TimeSpan ts      = timeEnd - timeStart;

            Console.WriteLine("Learning took: " + ts.ToString());

            Console.WriteLine("Predicting...");

            for (double x = 0; x < 1; x += 0.1)
            {
                for (double y = 0; y < 1; y += 0.1)
                {
                    inputs[0] = x;
                    inputs[1] = y;
                    var outputs = predict(ga, inputs);
                    Console.WriteLine(string.Format("Input:\t{0}, {1}\t\tOutput:\t{2:0.000}", inputs[0], inputs[1], outputs[0]));
                }
            }
        }