Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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 + "\"");
        }