static bool RunRandomAlgorytm(string sourceFileName, int amountOfRandoms) { DateTime date = DateTime.Now; int calculationNumber = CalculationNumber++; CapacitatedVehicleRoutingProblem problem = new CapacitatedVehicleRoutingProblem(); problem.GetDataFromSourceFile(_inputFolderPath + sourceFileName); RandomAlgorythm algorythm = new RandomAlgorythm(problem, amountOfRandoms); var result = algorythm.Calculate(); SaveRandomResultToFile(result, _outputFolderPath + sourceFileName + date.Month + "_" + date.Day + "_" + date.Hour + "_" + date.Minute + "_" + date.Second + "_random"); Console.WriteLine("Hello World! 2"); return(true); }
static void SaveResultToFile(Result[] results, string filePath, CapacitatedVehicleRoutingProblem problem) { // Create a file to write to. List <string> lines = new List <string>(); var lastResult = results.Last(); lines.Add($"\"Generation\",\"Average\",\"Max\",\"Min\",\"BestGen\",\"amountOfTours\",\"repeatedGens\",\"BestValue: {((lastResult!=null)? lastResult.Max.ToString(): "null")}\""); foreach (Result r in results) { if (r != null) { lines.Add($"{r.GenerationNumber},{r.Average},{r.Max},{r.Min},{IndividualToString(r.BestIndividual, problem)}"); } } File.AppendAllLines(filePath, lines); }
static bool RunGeneticAlgorytm(float crossProbability, float mutationProbability, int amountOfGenerations, int generationSize, int tournamentSize, string sourceFileName, bool useRoulette, out float bestScore, bool mutationBySwap, bool crossOX) { DateTime date = DateTime.Now; int calculationNumber = CalculationNumber++; Thread.CurrentThread.Name = GetOutputFileName(date, crossProbability, mutationProbability, amountOfGenerations, generationSize, tournamentSize, useRoulette, sourceFileName, calculationNumber); CapacitatedVehicleRoutingProblem problem = new CapacitatedVehicleRoutingProblem(); problem.GetDataFromSourceFile(_inputFolderPath + sourceFileName); GeneticAlgorythm algorythm = new GeneticAlgorythm(problem, crossProbability, mutationProbability, amountOfGenerations, generationSize, tournamentSize, useRoulette, mutationBySwap, crossOX); var result = algorythm.Calculate(); SaveResultToFile(result, _outputFolderPath + GetOutputFileName(date, crossProbability, mutationProbability, amountOfGenerations, generationSize, tournamentSize, useRoulette, sourceFileName, calculationNumber), problem); Console.WriteLine("Hello World! 2"); bestScore = result[result.Length - 1].Max; return(true); }
static bool RunGreedyAlgorytm(string sourceFileName) { var tasks = new List <Task <float> >(); DateTime date = DateTime.Now; List <string> lines = new List <string>(); int calculationNumber = CalculationNumber++; CapacitatedVehicleRoutingProblem problem = new CapacitatedVehicleRoutingProblem(); problem.GetDataFromSourceFile(_inputFolderPath + sourceFileName); float sum = 0; List <float> results = new List <float>(); for (int i = 0; i < 59; i++) { var result = (new GreedyAlgorythm(problem, i)).Calculate(); results.Add(result.Value); } sum = results.Sum(); //obliczenie średniej i odchylenia standardowego float average = sum / results.Count; float max = results.Max(); float min = results.Min(); float averageDiviationsSum = 0; float standardDeviation = 0; for (int i = 0; i < results.Count; i++) { averageDiviationsSum += (float)Math.Pow(results[i] - average, 2); } standardDeviation = (float)Math.Sqrt(averageDiviationsSum / results.Count); //obliczenie średniej i odchylenia standardowego lines.Add("max: " + (int)max); lines.Add("min: " + (int)min); lines.Add("average: " + (int)average); lines.Add("standardDeviation: " + (int)standardDeviation); File.AppendAllLines(_outputFolderPath + "greedy1" + ".txt", lines); return(true); }
static string IndividualToString(Individual ind, CapacitatedVehicleRoutingProblem capacitatedVehicleRoutingProblem) { float currentSum = 0; string value = ";"; int amountOfTours = 1; string repeatedNums = ""; for (int i = 0; i < ind.Genotype.Length; i++) { var marketid = (ind.Genotype[i]); var market = capacitatedVehicleRoutingProblem.Markets[marketid]; currentSum += market.Demand; if (currentSum > capacitatedVehicleRoutingProblem.Capability) { currentSum = market.Demand; value += '*'; amountOfTours++; } else { value += ';'; } value += (marketid + 1).ToString(); } for (int i = 0; i < ind.Genotype.Length; i++) { for (int j = i + 1; j < ind.Genotype.Length; j++) { if (ind.Genotype[i] == ind.Genotype[j]) { repeatedNums += (";" + (ind.Genotype[j] + 1).ToString()); } } } return("\"" + value + "\",\"" + amountOfTours + "\",\"" + repeatedNums + "\""); }