Beispiel #1
0
        public void RunTest(int reps = 5, string outputName = "output", IList <string> fileNames = null)
        {
            fileNames = fileNames ?? FileNames;
            var outputNameTime       = outputName + "_time.csv";
            var outputNameScore      = outputName + "_score.csv";
            var outputNameMin        = outputName + "_score_min.csv";
            var outputNameMax        = outputName + "_score_max.csv";
            var outputNameMedian     = outputName + "_score_median.csv";
            var outputNameStd        = outputName + "_score_std.csv";
            var outputNameSimilarity = outputName + "_score_similarity.csv";

            var outputNameSteps        = outputName + "_steps_gs.csv";
            var outputNameCheckedElems = outputName + "_checked_elems_gs.csv";

            var bench       = new QapSolutionBenchmark();
            var outputScore = new ulong [fileNames.Count, 6];
            var outputTime  = new double [fileNames.Count, 6];

            var outputMin        = new ulong[fileNames.Count, 6];
            var outputMax        = new ulong[fileNames.Count, 6];
            var outputMedian     = new ulong[fileNames.Count, 6];
            var outputStd        = new int[fileNames.Count, 6];
            var outputSimilarity = new double[fileNames.Count, 6];

            var outputSteps        = new int[fileNames.Count, 4];
            var outputCheckedElems = new int[fileNames.Count, 4];


            for (int i = 0; i < fileNames.Count; ++i)
            {
                for (int j = 0; j < 6; j++)
                {
                    outputMin[i, j] = UInt64.MaxValue;
                    outputMax[i, j] = 0;
                }
            }

            for (int i = 0; i < fileNames.Count; ++i)
            {
                string s             = fileNames[i];
                var    qapDataReader = new QapDataFileReader();
                var    data          = qapDataReader.ReadData(@"../AlgBattle/Data/BaseData/" + s + ".dat");
                var    solution      = qapDataReader.ReadSolution(@"../AlgBattle/Data/BaseData/" + s + ".sln");

                Stopwatch sw = new Stopwatch();

                ulong  mediumRate = 0;
                double mediumSim  = 0;

                for (int a = 0; a < 6; ++a)
                {
                    var algorithm = GetAlgorithm(a, data);
                    Console.WriteLine("File: " + s + "Alg num: " + a);
                    var tempList = new List <ulong>();
                    for (int j = 0; j < reps; j++)
                    {
                        sw.Start();
                        var sol = algorithm.GetSolution();
                        sw.Stop();
                        ulong rate = bench.RateSolution(sol, data);
                        var   sim  = bench.RateSimilarity(sol, solution.Solution.ToArray());
                        mediumRate += Convert.ToUInt64(rate);
                        mediumSim  += sim;
                        if (rate > outputMax[i, a])
                        {
                            outputMax[i, a] = rate;
                        }
                        if (rate < outputMin[i, a])
                        {
                            outputMin[i, a] = rate;
                        }
                        tempList.Add(rate);

                        if (a >= 2) //GS
                        {
                            outputCheckedElems[i, a - 2] += algorithm.CheckedElems;
                            outputSteps[i, a - 2]        += algorithm.Steps;
                        }
                    }
                    if (a >= 2)
                    {
                        outputCheckedElems[i, a - 2] = (int)(outputCheckedElems[i, a - 2] / reps);
                        outputSteps[i, a - 2]        = (int)(outputSteps[i, a - 2] / reps);
                    }
                    outputMedian[i, a] = this.GetMedian(tempList);
                    outputStd[i, a]    = Convert.ToInt32(tempList.Select(x => Convert.ToInt32(x)).ToList().StandardDeviation());
                    mediumRate        /= Convert.ToUInt64(reps);
                    mediumSim         /= reps;
                    var mediumTime = sw.Elapsed.TotalMilliseconds / reps;
                    sw.Reset();

                    //save
                    outputScore[i, a]      = mediumRate;
                    outputTime[i, a]       = mediumTime;
                    outputSimilarity[i, a] = mediumSim;
                }
            }

            using (StreamWriter file = File.AppendText(outputNameTime))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputTime[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameScore))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputScore[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameMin))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputMin[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameMax))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputMax[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameMedian))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputMedian[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameStd))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputStd[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameSimilarity))
            {
                for (int i = 0; i < 6; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputSimilarity[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }


            using (StreamWriter file = File.AppendText(outputNameCheckedElems))
            {
                for (int i = 0; i < 4; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputCheckedElems[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }

            using (StreamWriter file = File.AppendText(outputNameSteps))
            {
                for (int i = 0; i < 4; ++i)
                {
                    for (int j = 0; j < fileNames.Count; ++j)
                    {
                        file.Write(outputSteps[j, i] + ";");
                    }
                    file.Write("\n");
                }
            }
        }