Esempio n. 1
0
        private void runSolver(QapSolver solver, QapData data, QapSolutionBenchmark benchmark, QapSolution optimalSolution, String outputFileName)
        {
            List <long> solutionsScore    = new List <long>();
            ulong       bestSolutionScore = 0;
            //LocalOptimumValidator validator = new LocalOptimumValidator();
            List <ulong[]> list = new List <ulong[]>();

            for (int i = 0; i < RepetitionsNo; i++)
            {
                var lastSolution      = solver.GetSolution();
                var lastSolutionScore = benchmark.RateSolution(lastSolution, data);
                if ((bestSolutionScore == 0) || (bestSolutionScore > lastSolutionScore))
                {
                    bestSolutionScore = lastSolutionScore;
                }
                solutionsScore.Add(((long)lastSolutionScore));

                list.Add(new ulong[] { Convert.ToUInt64(optimalSolution.Score), lastSolutionScore, (ulong)solutionsScore.Average(), bestSolutionScore });
            }

            using (StreamWriter file = File.AppendText(outputFileName))
            {
                foreach (ulong[] line in list)
                {
                    file.WriteLine(line[0].ToString() + ',' + line[1].ToString() + ',' + line[2].ToString() + ',' + line[3].ToString() + ';');
                }
            }
        }
Esempio n. 2
0
        private void runSolver(QapSolver solver, QapData data, QapSolutionBenchmark benchmark, QapSolution optimalSolution, String outputFileName)
        {
            //LocalOptimumValidator validator = new LocalOptimumValidator();
            List <ulong[]> list = new List <ulong[]>();

            for (int i = 0; i < RepetitionsNo; i++)
            {
                var lastSolution = solver.GetSolution();

                //Console.WriteLine(validator.CheckLocalOptimum(lastSolution, data, false));
                var firstSolution     = solver.FirstSolution;
                var lastSolutionScore = benchmark.RateSolution(lastSolution, data);
                //Console.WriteLine("last : "+lastSolutionScore);
                var firstSolutionScore = benchmark.RateSolution(firstSolution, data);

                list.Add(new ulong[] { Convert.ToUInt64(optimalSolution.Score), firstSolutionScore, lastSolutionScore });
            }

            using (StreamWriter file = File.AppendText(outputFileName))
            {
                foreach (ulong[] line in list)
                {
                    file.WriteLine(line[0].ToString() + ',' + line[1].ToString() + ',' + line[2].ToString() + ';');
                }
            }
        }
Esempio n. 3
0
        public void run()
        {
            string outputFileName          = InstanceName + ".csv";
            var    qapDataReader           = new QapDataFileReader();
            QapSolutionBenchmark benchmark = new QapSolutionBenchmark();
            var data            = qapDataReader.ReadData(@"../AlgBattle/Data/BaseData/" + InstanceName + ".dat");
            var optimalSolution = qapDataReader.ReadSolution(@"../AlgBattle/Data/BaseData/" + InstanceName + ".sln");

            Console.WriteLine("Start processing");
            QapSimpleGreedySolver hSolver = new QapSimpleGreedySolver(data);

            RunSolver(hSolver, data, benchmark, optimalSolution, "efficiency_heuristic_" + outputFileName);
            Console.WriteLine("Heuristic done");
            QapRandomSolver rSolver = new QapRandomSolver(data);

            RunSolver(rSolver, data, benchmark, optimalSolution, "efficiency_random_" + outputFileName);
            Console.WriteLine("Random done");
            QapSteepestLocalSolver sSolver = new QapSteepestLocalSolver(data);

            RunSolver(sSolver, data, benchmark, optimalSolution, "efficiency_steepest_" + outputFileName);
            Console.WriteLine("Steepest done");
            QapGreedyLocalSolver gSolver = new QapGreedyLocalSolver(data);

            RunSolver(gSolver, data, benchmark, optimalSolution, "efficiency_greedy_" + outputFileName);
            Console.WriteLine("greedy done");
            QapAnnealingSolver aSolver = new QapAnnealingSolver(data);

            RunSolver(aSolver, data, benchmark, optimalSolution, "efficiency_annealing_" + outputFileName);
            Console.WriteLine("annealing done");
            QapTabuSolver tSolver = new QapTabuSolver(data);

            RunSolver(tSolver, data, benchmark, optimalSolution, "efficiency_tabu_" + outputFileName);
            Console.WriteLine("tabu done");
        }
        public DeltaSolutionBenchmark(QapData data, QapSolution solution)
        {
            QapSolutionBenchmark bench = new QapSolutionBenchmark();

            ActualBestSolution = solution;
            Data        = data;
            SwapCounter = 0;
            ActualBestSolution.Score = Convert.ToInt32(bench.RateSolution(solution.Solution.ToArray(), data));
            CalcDeltaTable();
        }
Esempio n. 5
0
        public void run()
        {
            string outputFileName          = InstanceName + ".csv";
            var    qapDataReader           = new QapDataFileReader();
            QapSolutionBenchmark benchmark = new QapSolutionBenchmark();
            var data            = qapDataReader.ReadData(@"../AlgBattle/Data/BaseData/" + InstanceName + ".dat");
            var optimalSolution = qapDataReader.ReadSolution(@"../AlgBattle/Data/BaseData/" + InstanceName + ".sln");
            //QapSteepestLocalSolver sSolver = new QapSteepestLocalSolver(data);
            //runSolver(sSolver, data, benchmark, optimalSolution, "firstVsLastsResult_steepest_" + outputFileName);
            //QapGreedyLocalSolver gSolver = new QapGreedyLocalSolver(data);
            //runSolver(gSolver, data, benchmark, optimalSolution, "firstVsLastsResult_greedy_" + outputFileName);
            //QapAnnealingSolver aSolver = new QapAnnealingSolver(data);
            //runSolver(aSolver, data, benchmark, optimalSolution, "firstVsLastsResult_annealing_" + outputFileName);
            QapTabuSolver tSolver = new QapTabuSolver(data);

            runSolver(tSolver, data, benchmark, optimalSolution, "firstVsLastsResult_tabu_" + outputFileName);
        }
Esempio n. 6
0
        private void RunSolver(QapSolver solver, QapData data, QapSolutionBenchmark benchmark, QapSolution optimalSolution, String outputFileName)
        {
            ulong           bestSolutionScore          = 0;
            int             repetitionsWithoutProgress = 0;
            List <double[]> list = new List <double[]>();
            Stopwatch       sw   = new Stopwatch();

            for (int i = 0; i < Repetitions; i++)
            {
                while (true)
                {
                    sw.Start();
                    var lastSolution = solver.GetSolution();
                    sw.Stop();
                    var lastSolutionScore = benchmark.RateSolution(lastSolution, data);
                    if ((bestSolutionScore == 0) || (bestSolutionScore > lastSolutionScore))
                    {
                        bestSolutionScore          = lastSolutionScore;
                        repetitionsWithoutProgress = 0;
                    }
                    else
                    {
                        repetitionsWithoutProgress++;
                    }
                    var efficiency = (double)(ulong)optimalSolution.Score / bestSolutionScore;
                    var time       = sw.Elapsed.TotalMilliseconds;
                    list.Add(new double[] { efficiency, time });

                    if (repetitionsWithoutProgress > MaxRepetitionsWithoutImprove)
                    {
                        break;
                    }
                    if (efficiency > 0.99999999999999999999)
                    {
                        break;
                    }
                }
            }
            using (StreamWriter file = File.AppendText(outputFileName))
            {
                foreach (double[] line in list)
                {
                    file.WriteLine(line[0].ToString() + ';' + line[1].ToString() + ';');
                }
            }
        }
        public bool CheckLocalOptimum(int[] solution, QapData data, bool startZeroIndex)
        {
            int size = data.Distances.Length;
            QapSolutionBenchmark benchmark = new QapSolutionBenchmark();
            var bestFitness = 0.0;

            if (startZeroIndex)
            {
                bestFitness = benchmark.RateSolutionIndexedFromZero(solution, data);
            }
            else
            {
                bestFitness = benchmark.RateSolution(solution, data);
            }
            for (int i = 0; i < size - 1; i++)
            {
                for (int j = i + 1; i < size; i++)
                {
                    var tempSolution = solution;
                    var temp         = tempSolution[i];
                    tempSolution[i] = tempSolution[j];
                    tempSolution[j] = temp;
                    var fitness = 0.0;
                    if (startZeroIndex)
                    {
                        fitness = benchmark.RateSolutionIndexedFromZero(tempSolution, data);
                    }
                    else
                    {
                        fitness = benchmark.RateSolution(tempSolution, data);
                    }
                    if (fitness < bestFitness)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }