Пример #1
0
 public AOptimizer(AEvaluation <Element> evaluation, AStopCondition stopCondition)
 {
     Result             = null;
     this.Evaluation    = evaluation;
     this.StopCondition = stopCondition;
     bestSolutions      = new List <double>();
 }
Пример #2
0
        public double Evaluate(AEvaluation <Element> evaluation)
        {
            if (!evaluated)
            {
                Fitness   = evaluation.dEvaluate(Genotype);
                evaluated = true;
            }

            return(Fitness);
        }
        public APopulationOptimizer(AEvaluation <Element> evaluation, AStopCondition stopCondition, AGenerator <Element> generator,
                                    ASelection selection, IMutation <Element> mutation, int populationSize)
            : base(evaluation, stopCondition)
        {
            this.generator = generator;
            this.selection = selection;
            this.mutation  = mutation;

            this.populationSize = populationSize;
            population          = new List <Individual <Element> >();

            averageValues = new List <double>();
            worstValues   = new List <double>();
        }
Пример #4
0
        private static void TestGA(AEvaluation <int> problem, double probCrossover, double probMutation, int population, int iterations, double tournament)
        {
            List <String> results          = new List <String>();
            List <String> learningProgress = new List <String>();
            int           savedRun         = new Random().Next(0, 10);

            for (int i = 0; i < 10; i++)
            {
                //var evaluation = new TspEvaluation(@"C:\Users\jbelter\source\repos\machine-learning-cvrp\data\A-n32-k5.vrp");
                var evaluation    = problem;
                var stopCondition = new IterationsStopCondition(iterations);
                //var optimizer = new TspRandomSearch(evaluation, stopCondition);
                var        generator = new TspGenerator(new Random());
                ASelection selection;
                if (tournament > 1 && tournament <= population)
                {
                    selection = new TournamentSelection(Convert.ToInt32(tournament));
                }
                else if (tournament > 0 && tournament <= 1)
                {
                    selection = new TournamentSelection(tournament);
                }
                else
                {
                    selection = new TournamentSelection(5);
                }

                var crossover = new OrderedCrossover(probCrossover);
                var mutation  = new SwapMutation(probMutation);
                var optimizer = new GeneticAlgorithm <int>(evaluation, stopCondition, generator, selection, crossover, mutation, population);

                optimizer.Run();

                if (i == savedRun)
                {
                    learningProgress = formatLearning(optimizer.worstValues, optimizer.averageValues, optimizer.bestSolutions);
                }

                //ReportOptimizationResult(optimizer.Result);
                results.Add(String.Join(", ",
                                        problem.iSize.ToString(),
                                        optimizer.timeTaken.ToString(),
                                        optimizer.bestSolutions.Last().ToString(),
                                        optimizer.averageValues.Last().ToString(),
                                        optimizer.worstValues.Last().ToString(),
                                        probCrossover.ToString(),
                                        probMutation.ToString(),
                                        population.ToString(),
                                        iterations.ToString(),
                                        tournament.ToString()
                                        ));
            }
            SaveToFile(@"C:\Users\jbelter\source\repos\machine-learning-cvrp\resultsGA.txt", results);
            SaveToFile((@"C:\Users\jbelter\source\repos\machine-learning-cvrp\progress\GA" + "-" +
                        problem.iSize.ToString() + "-" +
                        probCrossover.ToString() + "-" +
                        probMutation.ToString() + "-" +
                        population.ToString() + "-" +
                        iterations.ToString() + "-" +
                        tournament.ToString())
                       .Replace(".", "") + ".txt",
                       learningProgress);
        }
Пример #5
0
 public SamplingOptimizer(AEvaluation <Element> evaluation, AStopCondition stopCondition, AGenerator <Element> generator)
     : base(evaluation, stopCondition)
 {
     this.generator = generator;
 }
Пример #6
0
 public GeneticAlgorithm(AEvaluation <Element> evaluation, AStopCondition stopCondition, AGenerator <Element> generator,
                         ASelection selection, ACrossover crossover, IMutation <Element> mutation, int populationSize)
     : base(evaluation, stopCondition, generator, selection, mutation, populationSize)
 {
     this.crossover = crossover;
 }