private void createMember(List <HerdMember> fromList, List <HerdMember> outList) { int number = random.Next(fromList.Count); HerdMember member = new HerdMember(vertices, distanceTable, capacityTable, fromList[number].solution.capacityPath, target); System.Threading.Monitor.Enter(semaphore); outList.Add(member); System.Threading.Monitor.Exit(semaphore); }
public void firstGeneration() { for (int i = 1; i < mi; i++) { HerdMember member = members[0]; createMember(member, members); } bestMember = chooseBest(members); }
private void oneIteration() { List <HerdMember> newPopulation = generateNewPopulationMultiThreads(); members = mergePopulations(members, newPopulation); HerdMember bestChild = chooseBest(newPopulation); if (bestChild.solution.finalValue > bestMember.solution.finalValue) { bestMember = bestChild; } doSelection(2); }
private HerdMember chooseBest(List <HerdMember> list) { HerdMember toReturn = list.First(); foreach (var v in list) { if (v.solution.finalValue > toReturn.solution.finalValue) { toReturn = v; } } return(toReturn); }
private void rouletteSelection() { double sum = 0; foreach (var v in members) { sum += v.solution.finalValue; } List <HerdMember> newMembers = new List <HerdMember>(); for (int i = 0; i < mi; i++) { HerdMember toAdd = rouletteOnePoint(sum); newMembers.Add(toAdd); } members = newMembers; }
static void Main(string[] args) { string edgePath = "C://Users//user//Desktop//dane//przykladowe_dane//gen_50_d_2.xml"; string parametersPath = "C://Users//user//Desktop//dane//przykladowe_dane//gen_50_d_2_0_4_1.txt"; Graph graph = new Graph(); Globals.stopWatch.Start(); graph.readEdges(edgePath); Globals.stopWatch.Stop(); Globals.printElapsedTimeResetWatch(Globals.stopWatch.Elapsed, "Loaded edges"); Globals.stopWatch.Start(); graph.readParameters(parametersPath); Globals.stopWatch.Stop(); Globals.printElapsedTimeResetWatch(Globals.stopWatch.Elapsed, "Loaded parameters"); Globals.stopWatch.Start(); double[,] distanceTable = graph.createDistanceTable(); double[,] capacityTable = graph.createCapacityTable(); Globals.stopWatch.Stop(); Globals.printElapsedTimeResetWatch(Globals.stopWatch.Elapsed, "Created distance and capacity tables"); Globals.stopWatch.Start(); HerdMember member = new HerdMember(graph.vertices, distanceTable, capacityTable, graph.sourceNumber, graph.targetNumber); Globals.stopWatch.Stop(); Globals.printElapsedTimeResetWatch(Globals.stopWatch.Elapsed, "Found first solution"); member.solution.printSolution(); Globals.stopWatch.Start(); Population population = new Population(graph, 10, 15, 1000, 1000000000, 10, "roulette"); population.runAlgorithm(); Globals.stopWatch.Stop(); Globals.printElapsedTimeResetWatch(Globals.stopWatch.Elapsed, "Finished algorithm"); population.bestMember.solution.printSolution(); Console.ReadKey(); }
public Population(Graph graph, int m, int l, int iter, double val, double time, string sel) { mi = m; lambda = l; iterations = iter; minValue = val; maxTime = time; distanceTable = graph.createDistanceTable(); capacityTable = graph.createCapacityTable(); source = graph.sourceNumber; target = graph.targetNumber; vertices = graph.vertices; selection = sel; HerdMember member = new HerdMember(graph.vertices, distanceTable, capacityTable, source, target); bestMember = member; members = new List <HerdMember>(); members.Add(member); }
private void createMember(HerdMember member, List <HerdMember> outList) { HerdMember toAdd = new HerdMember(vertices, distanceTable, capacityTable, member.solution.capacityPath, target); outList.Add(toAdd); }