public override List <T> Procreate(List <T> population) { int max = population.Count; for (int i = 0; i < max - 1; i += 2) { T parent_one = population[i]; T parent_two = population[i + 1]; Stopwatch sw = Stopwatch.StartNew(); // We verwachten maar 1 kind. T child = crossover_provider.DoCrossover(parent_one, parent_two).Item1; child = local_search.Search(child); sw.Stop(); results.Add(child, sw.ElapsedTicks); if (!child.Data.Equals(parent_one.Data) && !child.Data.Equals(parent_two.Data)) { population.Add(child); } } return(population); }
private void searchThread(int pID, int max, int seed, INeighborhood <GraphGenome> neighborhood, bool silent = false) { Console.WriteLine("Thread {0} started...", pID); Random random = new Random(seed); // TODO: Resultaten (dus CPU computational time) opslaan in bestand. LocalSearch <GraphGenome> local_search = new LocalSearch <GraphGenome>(500, neighborhood, new GraphComparer <GraphGenome>(), random); // Dit wil ik eigenlijk static doen, maar dan komen we in de knoei met data_size. GraphGenome graph = new GraphGenome(500); graph.CreateGraph("Graph500.txt"); GraphGenome optimum = null; for (int i = 0; i < ExperimentAmount; ++i) { AssignmentTwoResults <GraphGenome> inner_results = new AssignmentTwoResults <GraphGenome>(); for (int j = 0; j < max; j++) { graph = new GraphGenome(500); graph.Generate(ref random); Stopwatch sw = Stopwatch.StartNew(); GraphGenome inner_optimum = local_search.Search(graph); sw.Stop(); inner_results.Add(inner_optimum, sw.ElapsedTicks); if (!silent) { Console.WriteLine("Found {0} in {1} ticks or {2}ms. ({3}/{4}), pID: {5}", inner_optimum.Fitness, sw.ElapsedTicks, sw.ElapsedMilliseconds, j, max, pID); } if (optimum == null || optimum.Fitness >= inner_optimum.Fitness) { optimum = inner_optimum; } } lock (solutionsThreads) { solutionsThreads[pID] = optimum; } lock (elapsedMilisecondsThreads) { elapsedMilisecondsThreads[pID].Add(inner_results); } } }
public override List <T> Generate(int population_size, int genome_size) { List <T> population = new List <T>(); for (uint i = 0; i < population_size; ++i) { T g = (T)Activator.CreateInstance(typeof(T), genome_size); g.Generate(ref random_source); g = local_search.Search(g); population.Add(g); } return(population); }
private AssignmentTwoResultList <GraphGenome> IteratedLocalSearch(INeighborhood <GraphGenome> neighborhood, bool silent = false) { LocalSearch <GraphGenome> local_search = new LocalSearch <GraphGenome>(500, neighborhood, new GraphComparer <GraphGenome>(), main_random_source); IMutation <GraphGenome> pertubation = new ILSPertubation <GraphGenome>(main_random_source); GraphGenome graph = new GraphGenome(500); graph.CreateGraph("Graph500.txt"); GraphGenome optimum = null; List <long> elapsedMilisecondsList = new List <long>(); AssignmentTwoResultList <GraphGenome> results = new AssignmentTwoResultList <GraphGenome>("$ILS_{" + neighborhood.Name + "}$"); for (int i = 0; i < ExperimentAmount; ++i) { AssignmentTwoResults <GraphGenome> res = new AssignmentTwoResults <GraphGenome>(); for (int j = 0; j < OptimaAmount; j++) { if (optimum == null) { graph = new GraphGenome(500); graph.Generate(ref main_random_source); } else { graph = pertubation.Mutate(optimum); } Stopwatch sw = Stopwatch.StartNew(); GraphGenome inner_optimum = local_search.Search(graph); sw.Stop(); elapsedMilisecondsList.Add(sw.ElapsedMilliseconds); res.Add(inner_optimum, sw.ElapsedTicks); if (!silent) { Console.WriteLine("Found {0} in {1} ticks or {2}ms. ({3}/{4})", inner_optimum.Fitness, sw.ElapsedTicks, sw.ElapsedMilliseconds, j, OptimaAmount); } if (optimum == null || optimum.Fitness >= inner_optimum.Fitness) { optimum = inner_optimum; } optimum.FunctionEvaluations = 0; } results.Add(res); } //Console.WriteLine("Best solution found: {0} in an average of {1} ms", optimum.Fitness, cpu_ticks.Average()); Console.WriteLine("Best solution found: {0} in an average of {1} ms", optimum.Fitness, elapsedMilisecondsList.Sum() / OptimaAmount); //Console.WriteLine("Total time: {0} sec", sw.ElapsedMilliseconds / 1000f); optimum.ToImage(String.Format("results/ILS[{0}]-{1}.bmp", neighborhood.Name, optimum.Fitness), 3000, 3000); //Console.ReadLine(); return(results); }