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()); }