Пример #1
0
        static void Main(string[] args)
        {
            Population populacja = new Population(5, 6, n => n * n, new Random());
            int        ilosc     = 5;//ilosc pokoleń

            for (int i = 0; i < ilosc; i++)
            {
                for (int j = 0; j <= 2; i++)
                {
                    foreach (var z in populacja.Individuals)
                    {
                        foreach (var x in populacja.Individuals)
                        {
                            var crossoverOperator = new OnePointCrossover(new Random());
                            crossoverOperator.Crossover(z, x);
                        }
                    }
                }
                var lambda    = new OnePointCrossover(new Random());
                var pokolenie = lambda.IndividualsLambda;

                foreach (var y in pokolenie)
                {
                    populacja.Individuals.Add(y);
                }
                var top = populacja.Individuals.OrderByDescending(x => x.Fitness).Take(5);
                populacja = null;
                populacja.Individuals.Add(top);
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();

            Func <double, double> fitness = x => 2 * x + 1;
            var ga = new GeneticAlgorithm(1500, 500,
                                          new OnePointCrossover(),
                                          new ClassicMutationOperator(),
                                          new RouletteWheelSelection(),
                                          fitness);
            //ga.PrintStatistics = true;
            var result = ga.RunSimulation(500);

            Console.WriteLine($"x = {result.Chromosome.DecodedValue}, f = {result.Fitness}");

            var ind = new Individual(10);

            ind.ReplaceGenes(new bool[] { true, true, true, true, true, true, true, true, true, true });

            Console.WriteLine($"x = {ind.Chromosome.DecodedValue}, f = {fitness(ind.Chromosome.DecodedValue)}");

            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds + "ms");
            Console.ReadLine();

            return;

            var ind1 = new Individual(10);
            var ind2 = new Individual(10);

            Console.WriteLine("Individual 1: ");
            Console.WriteLine(ind1);
            Console.WriteLine("Individual 2: ");
            Console.WriteLine(ind2);

            var crossover = new OnePointCrossover();

            crossover.Crossover(ind1, ind2);

            Console.WriteLine("Individual 1: ");
            Console.WriteLine(ind1);
            Console.WriteLine("Individual 2: ");
            Console.WriteLine(ind2);

            var mutation = new ClassicMutationOperator();


            Console.WriteLine("--Before mutation: ");
            Console.WriteLine("Individual 1: ");
            Console.WriteLine(ind1);

            mutation.Mutation(ind1, 0.1);

            Console.WriteLine("--After mutation: ");
            Console.WriteLine("Individual 1: ");
            Console.WriteLine(ind1);
        }
Пример #3
0
 public void OnePointCrossoverTest()
 {
     IChromosome<int> a = new DigitalChromosome().GenerateFromArray(new int[] { 1, 2, 3, 4 });
     IChromosome<int> b = new DigitalChromosome().GenerateFromArray(new int[] { 4, 3, 2, 1 });
     OnePointCrossover<int> cross = new OnePointCrossover<int>(2);
     IChromosome<int>[] res = cross.Crossover(a, b);
     IChromosome<int>[] exp = new IChromosome<int>[2] { new DigitalChromosome().GenerateFromArray(new int[] { 1, 2, 2, 1 }), new DigitalChromosome().GenerateFromArray(new int[] { 4, 3, 3, 4 }) };
     CollectionAssert.AreEqual(res, exp);
 }
Пример #4
0
        public void NoCommonRegionCrossoverTest()
        {
            var converter = new MathExpressionConverter(MathPrimitiveSets.Default);
            var prog1     = converter.FromNormalNotation("sin((1-2))");
            var prog2     = converter.FromNormalNotation("((2+3)-1)");

            Console.WriteLine($"{prog1}, {prog2}");
            var op       = new OnePointCrossover <MathProgram, double>();
            var allProgs = new HashSet <MathProgram>(op.GetAllOffspring(prog1, prog2));
            var prog     = op.Crossover(prog1, prog2);

            Assert.IsTrue(allProgs.Contains(prog2),
                          $"{prog} should be a valid crossover between {prog1} and {prog2}.");
            Assert.IsTrue(prog.Equals(prog2),
                          $"{prog} should be the only valid crossover between {prog1} and {prog2}.");
            Assert.AreEqual(allProgs.Count, 1, double.Epsilon,
                            $"Crossover between {prog1} and {prog2} should only have 1 element.");
        }