Пример #1
0
        private ScheduleChromosome RunOnce(LineSeries lineSeries = null)
        {
            var adamChromosome = new ScheduleChromosome(jobShop);
            var population     = new Population(Global.Config.MinPopulationSize, Global.Config.MaxPopulationSize, adamChromosome);

            var fitness          = new ScheduleFitness();
            var selection        = new NonDeterministicTournamentSelection(Global.Config.TournamentSelectionProbability);
            var crossover        = new SchedulesCrossover(new CycleCrossover());
            var mutation         = new ScheduleMutation(Global.Config.MutationPerGeneProbability, new ReverseSequenceMutation());
            var geneticAlgorithm =
                new GeneticSharp.Domain.GeneticAlgorithm(population, fitness, selection, crossover, mutation)
            {
                Termination          = new GenerationNumberTermination(Global.Config.GenerationsCount),
                MutationProbability  = Global.Config.MutationProbability,
                CrossoverProbability = Global.Config.CrossoverProbability,
                OperatorsStrategy    = new JobShopOperatorStrategy(),
                Reinsertion          = new JobShopReinsertion(
                    new EliteSelection(),
                    new Elitism(Global.Config.ElitismPercent),
                    fitness
                    )
            };
            var stopWatch = new Stopwatch();

            if (adaptive)
            {
                geneticAlgorithm.GenerationRan += (sender, e) => AdaptMutationProbability(geneticAlgorithm);;
            }
            geneticAlgorithm.GenerationRan += (sender, e) =>
            {
                Print(geneticAlgorithm.Population, stopWatch.Elapsed);
            };

            // plot the model
            if (PlotModel != null)
            {
                geneticAlgorithm.GenerationRan += (sender, e) =>
                {
                    lineSeries.Points.Add(new DataPoint(geneticAlgorithm.Population.GenerationsNumber,
                                                        ((ScheduleChromosome)geneticAlgorithm.Population.BestChromosome).ScheduleLength.Value));
                };
            }

            geneticAlgorithm.GenerationRan += (o, e) => GenerationRan?.Invoke(geneticAlgorithm.Population.CurrentGeneration);
            if (Global.Config.ThreadsCount > 1)
            {
                geneticAlgorithm.TaskExecutor = new ParallelTaskExecutor()
                {
                    MinThreads = 1,
                    MaxThreads = Global.Config.ThreadsCount
                };
            }

            stopWatch.Start();
            geneticAlgorithm.Start();
            stopWatch.Stop();

            return((ScheduleChromosome)geneticAlgorithm.BestChromosome);
        }
Пример #2
0
        //Одне скомбіноване рішення
        //Недоречний варіант!!!
        public void Start()
        {
            //Сам генетический алгоритм
            var ga = new GeneticSharp.Domain.GeneticAlgorithm(
                _population,
                _fitness,
                _selection,
                _crossover,
                _mutation);

            ga.Termination = _termination;

            var latestFitness = 0.0;

            ga.GenerationRan += (sender, e) =>
            {
                var bestChromosome = ga.BestChromosome as BinaryChromosome;
                var bestFitness    = bestChromosome.Fitness.Value;

                if (bestFitness != latestFitness)
                {
                    latestFitness = bestFitness;
                    var phenotype = bestChromosome.GetGenes();

                    Console.WriteLine("Поколiння №{0,2}. Кращий результат = {1}", ga.GenerationsNumber, bestFitness);
                    Console.Write("Вид хромосоми: ");

                    foreach (GeneticSharp.Domain.Chromosomes.Gene g in phenotype)
                    {
                        Console.Write(g.Value.ToString() + "");
                    }
                    Console.WriteLine();
                }
            };

            ga.Start();
        }
Пример #3
0
        static void Main(string[] args)
        {
            var selection  = new EliteSelection();
            var crossover  = new OnePointCrossover();
            var mutation   = new ReverseSequenceMutation();
            var fitness    = new MyProblemFitness();
            var chromosome = new MyProblemChromosome();
            var population = new Population(20, 20, chromosome);

            var ga = new GeneticSharp.Domain.GeneticAlgorithm(population, fitness, selection, crossover, mutation)
            {
                Termination = new GenerationNumberTermination(100)
            };

            Console.WriteLine("GA running...");
            ga.Start();

            if (ga.BestChromosome.Fitness != null)
            {
                double fitnessValue = ga.BestChromosome.Fitness.Value;
                string solution     = ga.BestChromosome.ToUserFriendly();
                Console.WriteLine($"Best solution {solution} found has {fitnessValue} fitness for {ga.GenerationsNumber} generations.");
            }
        }
Пример #4
0
 //Запустити генетичний алгоритм
 public void Start()//GeneticSharp.Domain.GeneticAlgorithm ga)
 => _ga.Start();