Exemplo n.º 1
0
        public void RandomSolutionShouldBeFeasible()
        {
            HeuristicsFactory.Register("SA", () => new SimulatedAnnealing());
            MemeticAlgorithm algorithm  = new MemeticAlgorithm();
            Parameters       parameters = new Parameters
            {
                PopulationSize       = 30,
                Selection            = new RouletteSelection(),
                CrossoverOperators   = new List <CrossoverOperator>(),
                MutationOperators    = new List <MutationOperator>(),
                CrossoverProbability = 0.75f,
                MutationProbability  = 0.05f,
                Fitness                    = new FitnessFunction(4.0f, 1.0f),
                ChromosomeFactory          = new SolutionFactory(),
                EliteChildrenCount         = 3,
                GeneCount                  = problem.Customers.Count,
                FitnessStrategy            = MemeticLibrary.Fitness.FitnessStrategy.MINIMIZE,
                ConvergenceLimit           = 1.0f,
                PreservedChromosomesNumber = 10,
                MaxIterations              = 5000
            };

            parameters.CrossoverOperators.Add(new PartiallyMatchedCrossover());
            parameters.MutationOperators.Add(new SwapOperator());
            algorithm.Run(problem, parameters);
        }
 private void Register()
 {
     SelectionFactory.Register("roulette", () => new RouletteSelection());
     CrossoverOperatorFactory.Register("OX", () => new OrderCrossover());
     CrossoverOperatorFactory.Register("CX", () => new CycleCrossover());
     CrossoverOperatorFactory.Register("PMX", () => new PartiallyMatchedCrossover());
     CrossoverOperatorFactory.Register("UOX", () => new UniformBasedOrderCrossover());
     MutationOperatorFactory.Register("swap", () => new SwapOperator());
     MutationOperatorFactory.Register("insertion", () => new InsertionOperator());
     MutationOperatorFactory.Register("inversion", () => new InversionOperator());
     MutationOperatorFactory.Register("displacement", () => new DisplacementOperator());
     HeuristicsFactory.Register("SA", () => new SimulatedAnnealing());
 }
        public void RegisterAlgorithm(string problemName, ParametersWebsite webParameters)
        {
            string       filePath = HttpContext.Current.Server.MapPath("~/Data/Homberger/" + problemName.ToUpper() + @".txt");
            VrptwProblem problem  = new VrptwProblemReader().ReadFromFile(filePath);

            string connecionId = Context.ConnectionId;

            Register();
            MemeticAlgorithm ma;

            if (algorithms.ContainsKey(connecionId))
            {
                ma = algorithms[connecionId];
                ma.Stop();
            }
            else
            {
                ma = new MemeticAlgorithm();
            }
            Parameters parameters = new Parameters
            {
                Heuristics           = HeuristicsFactory.Create(webParameters.Heuristics),
                PopulationSize       = webParameters.PopulationSize,
                Selection            = SelectionFactory.Create(webParameters.Selection),
                CrossoverOperators   = new List <CrossoverOperator>(),
                MutationOperators    = new List <MutationOperator>(),
                CrossoverProbability = webParameters.CrossoverProbability,
                MutationProbability  = webParameters.MutationProbability,
                Fitness                    = new FitnessFunction(webParameters.FitnessRoutes, webParameters.FitnesDistance),
                EliteChildrenCount         = webParameters.EliteChildrenCount,
                GeneCount                  = problem.Customers.Count,
                FitnessStrategy            = FitnessStrategy.MINIMIZE,
                ConvergenceLimit           = webParameters.ConvergenceLimit,
                PreservedChromosomesNumber = webParameters.PreservedChromosomeNumber,
                MaxIterations              = webParameters.Iterations,
                ChromosomeFactory          = new SolutionFactory(),
                HeuristicsParameters       = webParameters.HeuristicsParameters
            };

            parameters.CrossoverOperators.Add(CrossoverOperatorFactory.Create(webParameters.Crossover));
            parameters.MutationOperators.Add(MutationOperatorFactory.Create(webParameters.Mutation));
            algorithms.TryAdd(connecionId, ma);
            var    result         = ma.Run(problem, parameters, UpdateSolution, connecionId);
            var    solution       = result.Result as Solution;
            string outputPath     = HttpContext.Current.Server.MapPath("~/Results/Memetic");
            string outputFilePath = outputPath + @"/" + problem.Name + ".txt";

            File.WriteAllText(outputFilePath, solution.ToFileText());
        }