public void ExecuteIteratedLocalSearchSession(AlgorithmExecutionSession algorithmExecutionSession)
        {
            var totalNumberOfNodes = DAL.Instance.Nodes.Count;
            var randomGenerator    = algorithmExecutionSession.ConstructionAlgorithm.RandomGenerator;

            for (var i = 0; i < Constants.NumberOfMslsAndIlsIteration; i++)
            {
                algorithmExecutionSession.ConstructionAlgorithm.ResetAlgorithm();
                algorithmExecutionSession.OptimalizationAlgorithm.ResetAlgorithm();
                Timer.Reset();
                Timer.Start();

                algorithmExecutionSession.ConstructionAlgorithm.FindRoute(algorithmExecutionSession.ConstructionAlgorithm.OperatingData.UnusedNodes[randomGenerator.Next(0, totalNumberOfNodes - 1)]);

                UpdateConstructionStatisticsData(algorithmExecutionSession);

                algorithmExecutionSession.OptimalizationAlgorithm.OperatingData =
                    algorithmExecutionSession.ConstructionAlgorithm.OperatingData.CloneData();

                algorithmExecutionSession.OptimalizationAlgorithm.Optimize();

                Timer.Stop();

                UpdateOptimalizationStatisticsData(algorithmExecutionSession);
            }
        }
Exemple #2
0
 public void WriteToFile(AlgorithmExecutionSession algorithmExecutionSession, string title)
 {
     if (StreamWriter == null)
     {
         return;
     }
     StreamWriter.WriteLine(title);
     StreamWriter.WriteLine("MIN: " + algorithmExecutionSession.ConstructionStatisticsData.MinimumDistance);
     StreamWriter.WriteLine("AVG: " + algorithmExecutionSession.ConstructionStatisticsData.AccumulatedDistance / algorithmExecutionSession.ConstructionStatisticsData.NumberOfDistanceMeasureAttempts);
     StreamWriter.WriteLine("MAX: " + algorithmExecutionSession.ConstructionStatisticsData.MaximumDistance);
     foreach (var nodes in algorithmExecutionSession.ConstructionStatisticsData.BestRoute)
     {
         StreamWriter.Write($"{nodes.Id} ");
     }
     StreamWriter.WriteLine();
     StreamWriter.WriteLine("---After Optimalization---");
     StreamWriter.WriteLine("MIN: " + algorithmExecutionSession.OptimalizationStatisticsData.MinimumDistance);
     StreamWriter.WriteLine("AVG: " + algorithmExecutionSession.OptimalizationStatisticsData.AccumulatedDistance / algorithmExecutionSession.OptimalizationStatisticsData.NumberOfDistanceMeasureAttempts);
     StreamWriter.WriteLine("MAX: " + algorithmExecutionSession.OptimalizationStatisticsData.MaximumDistance);
     StreamWriter.WriteLine("MINT: " + algorithmExecutionSession.OptimalizationStatisticsData.MinimumExecutionTime);
     StreamWriter.WriteLine("AVGT: " + (double)algorithmExecutionSession.OptimalizationStatisticsData.AccumulatedExecutionTime / algorithmExecutionSession.OptimalizationStatisticsData.NumberOfTimeMeasureAttempts);
     StreamWriter.WriteLine("MAXT: " + algorithmExecutionSession.OptimalizationStatisticsData.MaximumExecutionTime);
     foreach (var nodes in algorithmExecutionSession.OptimalizationStatisticsData.BestRoute)
     {
         StreamWriter.Write($"{nodes.Id} ");
     }
     StreamWriter.WriteLine();
 }
        public void ExecuteDefaultSession(AlgorithmExecutionSession algorithmExecutionSession)
        {
            var totalNumberOfNodes = DAL.Instance.Nodes.Count;

            for (var i = 0; i < totalNumberOfNodes; i++)
            {
                algorithmExecutionSession.ConstructionAlgorithm.FindRoute(algorithmExecutionSession.ConstructionAlgorithm.OperatingData.UnusedNodes[i]);

                UpdateConstructionStatisticsData(algorithmExecutionSession);

                algorithmExecutionSession.OptimalizationAlgorithm.OperatingData =
                    algorithmExecutionSession.ConstructionAlgorithm.OperatingData.CloneData();

                Timer.Start();

                algorithmExecutionSession.OptimalizationAlgorithm.Optimize();

                Timer.Stop();

                UpdateOptimalizationStatisticsData(algorithmExecutionSession);
                Timer.Reset();
                algorithmExecutionSession.ConstructionAlgorithm.ResetAlgorithm();
                algorithmExecutionSession.OptimalizationAlgorithm.ResetAlgorithm();
            }
        }
        private void UpdateOptimalizationStatisticsData(AlgorithmExecutionSession algorithmExecutionSession)
        {
            algorithmExecutionSession.OptimalizationStatisticsData.AccumulatedDistance += algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.Distance;
            algorithmExecutionSession.OptimalizationStatisticsData.NumberOfDistanceMeasureAttempts++;

            if (algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.Distance > algorithmExecutionSession.OptimalizationStatisticsData.MaximumDistance)
            {
                algorithmExecutionSession.OptimalizationStatisticsData.MaximumDistance = algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.Distance;
            }

            if (algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.Distance <
                algorithmExecutionSession.OptimalizationStatisticsData.MinimumDistance)
            {
                algorithmExecutionSession.OptimalizationStatisticsData.MinimumDistance = algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.Distance;
                algorithmExecutionSession.OptimalizationStatisticsData.BestRoute       = algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.PathNodes.CloneList();
            }

            algorithmExecutionSession.OptimalizationStatisticsData.AccumulatedExecutionTime += Timer.ElapsedMilliseconds;
            algorithmExecutionSession.OptimalizationStatisticsData.NumberOfTimeMeasureAttempts++;

            if (Timer.ElapsedMilliseconds > algorithmExecutionSession.OptimalizationStatisticsData.MaximumExecutionTime)
            {
                algorithmExecutionSession.OptimalizationStatisticsData.MaximumExecutionTime = Timer.ElapsedMilliseconds;
            }

            if (Timer.ElapsedMilliseconds >= algorithmExecutionSession.OptimalizationStatisticsData.MinimumExecutionTime)
            {
                return;
            }
            algorithmExecutionSession.OptimalizationStatisticsData.MinimumExecutionTime = Timer.ElapsedMilliseconds;
        }
        public void ExecuteMultipleStartLocalSearchSession(AlgorithmExecutionSession algorithmExecutionSession)
        {
            algorithmExecutionSession.OptimalizationAlgorithm.ConstructionAlgorithm = algorithmExecutionSession.ConstructionAlgorithm;

            for (var i = 0; i < Constants.NumberOfMslsAndIlsIteration; i++)
            {
                Timer.Reset();
                Timer.Start();
                algorithmExecutionSession.OptimalizationAlgorithm.Optimize();
                Timer.Stop();

                UpdateConstructionStatisticsData(algorithmExecutionSession);
                UpdateOptimalizationStatisticsData(algorithmExecutionSession);

                algorithmExecutionSession.OptimalizationAlgorithm.ResetAlgorithm();
            }
            DAL.Instance.AverangeMslsTime = algorithmExecutionSession.OptimalizationStatisticsData.AccumulatedExecutionTime / algorithmExecutionSession.OptimalizationStatisticsData.NumberOfTimeMeasureAttempts;
        }
        private void UpdateConstructionStatisticsData(AlgorithmExecutionSession algorithmExecutionSession)
        {
            algorithmExecutionSession.ConstructionStatisticsData.AccumulatedDistance += algorithmExecutionSession.ConstructionAlgorithm.OperatingData.Distance;
            algorithmExecutionSession.ConstructionStatisticsData.NumberOfDistanceMeasureAttempts++;

            if (algorithmExecutionSession.ConstructionAlgorithm.OperatingData.Distance > algorithmExecutionSession.ConstructionStatisticsData.MaximumDistance)
            {
                algorithmExecutionSession.ConstructionStatisticsData.MaximumDistance = algorithmExecutionSession.ConstructionAlgorithm.OperatingData.Distance;
            }

            if (algorithmExecutionSession.ConstructionAlgorithm.OperatingData.Distance >=
                algorithmExecutionSession.ConstructionStatisticsData.MinimumDistance)
            {
                return;
            }
            algorithmExecutionSession.ConstructionStatisticsData.MinimumDistance = algorithmExecutionSession.ConstructionAlgorithm.OperatingData.Distance;
            algorithmExecutionSession.ConstructionStatisticsData.BestRoute       = algorithmExecutionSession.ConstructionAlgorithm.OperatingData.PathNodes.CloneList();
        }
        public void ExecuteLocalSearchSession(AlgorithmExecutionSession algorithmExecutionSession)
        {
            var totalNumberOfNodes = DAL.Instance.Nodes.Count;
            var randomGenerator    = new Random();

            for (var i = 0; i < 1000; i++)
            {
                algorithmExecutionSession.ConstructionAlgorithm.FindRoute(algorithmExecutionSession.ConstructionAlgorithm.OperatingData.UnusedNodes[randomGenerator.Next(0, totalNumberOfNodes)]);
                algorithmExecutionSession.OptimalizationAlgorithm.OperatingData =
                    algorithmExecutionSession.ConstructionAlgorithm.OperatingData.CloneData();
                algorithmExecutionSession.OptimalizationAlgorithm.Optimize();

                if (algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.Distance < DAL.Instance.BestLsData.Distance)
                {
                    DAL.Instance.BestLsData =
                        algorithmExecutionSession.OptimalizationAlgorithm.OperatingData.CloneData();
                }
            }
        }
Exemple #8
0
        static void Main()
        {
            DAL.Instance.ReadFromFile();
            //DAL.Instance.PrepareFileToWrite();

            var sessionExecutionEngine = new AlgorithmExecutionEngine();

            var nearestNeighbourExecutionSession         = new AlgorithmExecutionSession(new NearestNeighbour(), new LocalSearch());
            var greedyCycleExecutionSession              = new AlgorithmExecutionSession(new GreedyCycle(), new LocalSearch());
            var nearestNeighbourGraspExecutionSession    = new AlgorithmExecutionSession(new NearestNeighbourGrasp(), new LocalSearch());
            var greedyCycleGraspExecutionSession         = new AlgorithmExecutionSession(new GreedyCycleGrasp(), new LocalSearch());
            var randomSolutionExecutionSession           = new AlgorithmExecutionSession(new RandomSolution(), new LocalSearch());
            var multipleStartLocalSearchExecutionSession = new AlgorithmExecutionSession(new NearestNeighbourGrasp(), new MultipleStartLocalSearch());
            var iteratedLocalSearchExecutionSession      = new AlgorithmExecutionSession(new NearestNeighbourGrasp(), new IteratedLocalSearch());
            //var multipleStartLocalSearchExecutionSession = new AlgorithmExecutionSession(new RandomSolution(), new MultipleStartLocalSearch());
            //var iteratedLocalSearchExecutionSession = new AlgorithmExecutionSession(new RandomSolution(), new IteratedLocalSearch());

            //sessionExecutionEngine.ExecuteDefaultSession(nearestNeighbourExecutionSession);
            //sessionExecutionEngine.ExecuteDefaultSession(greedyCycleExecutionSession);
            //sessionExecutionEngine.ExecuteDefaultSession(nearestNeighbourGraspExecutionSession);
            //sessionExecutionEngine.ExecuteDefaultSession(greedyCycleGraspExecutionSession);
            //sessionExecutionEngine.ExecuteDefaultSession(randomSolutionExecutionSession);
            //sessionExecutionEngine.ExecuteMultipleStartLocalSearchSession(multipleStartLocalSearchExecutionSession);
            //sessionExecutionEngine.ExecuteIteratedLocalSearchSession(iteratedLocalSearchExecutionSession);

            var drawer = new Drawer();

            //Console.WriteLine(Constants.NearestNeighbourText);
            //DAL.Instance.WriteToFile(nearestNeighbourExecutionSession, Constants.NearestNeighbourText);
            //drawer.DrawChart(Constants.NearestNeighbourFilename, nearestNeighbourExecutionSession.ConstructionStatisticsData.BestRoute);
            //drawer.DrawChart(Constants.NearestNeighbourOptimalizedFilename, nearestNeighbourExecutionSession.OptimalizationStatisticsData.BestRoute);

            //Console.WriteLine(Constants.GreedyCycleText);
            //DAL.Instance.WriteToFile(greedyCycleExecutionSession, Constants.GreedyCycleText);
            //drawer.DrawChart(Constants.GreedyCycleFilename, greedyCycleExecutionSession.ConstructionStatisticsData.BestRoute);
            //drawer.DrawChart(Constants.GreedyCycleOptimalizedFilename, greedyCycleExecutionSession.OptimalizationStatisticsData.BestRoute);

            //Console.WriteLine(Constants.NearestNeighboutGraspText);
            //DAL.Instance.WriteToFile(nearestNeighbourGraspExecutionSession, Constants.NearestNeighboutGraspText);
            //drawer.DrawChart(Constants.NearestNeighbourGraspFilename, nearestNeighbourGraspExecutionSession.ConstructionStatisticsData.BestRoute);
            //drawer.DrawChart(Constants.NearestNeighbourGraspOptimalizedFilename, nearestNeighbourGraspExecutionSession.OptimalizationStatisticsData.BestRoute);

            //Console.WriteLine(Constants.GreedyCycleGraspText);
            //DAL.Instance.WriteToFile(greedyCycleGraspExecutionSession, Constants.GreedyCycleGraspText);
            //drawer.DrawChart(Constants.GreedyCycleGraspFilename, greedyCycleGraspExecutionSession.ConstructionStatisticsData.BestRoute);
            //drawer.DrawChart(Constants.GreedyCycleGraspOptimalizedFilename, greedyCycleGraspExecutionSession.OptimalizationStatisticsData.BestRoute);

            //Console.WriteLine(Constants.RandomSolutionText);
            //DAL.Instance.WriteToFile(randomSolutionExecutionSession, Constants.RandomSolutionText);
            //drawer.DrawChart(Constants.RandomSolutionFilename, randomSolutionExecutionSession.ConstructionStatisticsData.BestRoute);
            //drawer.DrawChart(Constants.RandomSolutionOptimalizedFilename, randomSolutionExecutionSession.OptimalizationStatisticsData.BestRoute);

            //Console.WriteLine(Constants.MultipleStartLocalSearchText);
            //DAL.Instance.WriteToFile(multipleStartLocalSearchExecutionSession, Constants.MultipleStartLocalSearchText);
            //drawer.DrawChart(Constants.MultipleStartLocalSearchFilename, multipleStartLocalSearchExecutionSession.OptimalizationStatisticsData.BestRoute);

            //Console.WriteLine(Constants.IteratedLocalSearchText);
            //DAL.Instance.WriteToFile(iteratedLocalSearchExecutionSession, Constants.IteratedLocalSearchText);
            //drawer.DrawChart(Constants.IteratedLocalSearchFilename, iteratedLocalSearchExecutionSession.OptimalizationStatisticsData.BestRoute);

            //var LsExecutionSession = new AlgorithmExecutionSession(new RandomSolution(), new LocalSearch());

            var localSearchesResults = new List <AlgorithmOperatingData>();
            //var bestLocalSearchResult = new AlgorithmOperatingData {Distance = int.MaxValue};
            var bestLocalSearchDistance = int.MaxValue;
            var bestLocalSearchIndex    = 0;
            var localSearch             = new LocalSearch {
                ConstructionAlgorithm = new RandomSolution()
            };

            for (var i = 0; i < 10; i++)
            {
                localSearch.ConstructionAlgorithm.ResetAlgorithm();
                localSearch.ResetAlgorithm();
                localSearch.ConstructionAlgorithm.FindRoute(localSearch.ConstructionAlgorithm.OperatingData.UnusedNodes[0]);
                localSearch.OperatingData = localSearch.ConstructionAlgorithm.OperatingData.CloneData();
                localSearch.Optimize();
                var temporaryList = localSearch.OperatingData.CloneData();
                localSearchesResults.Add(temporaryList);
                if (localSearch.OperatingData.Distance >= bestLocalSearchDistance)
                {
                    continue;
                }
                bestLocalSearchDistance = localSearch.OperatingData.Distance;
                bestLocalSearchIndex    = i;
            }

            var averangeSimilarityToOthersBySharedVertices = new List <double>(new double[localSearchesResults.Count]);
            var averangeSimilarityToOthersBySharedEdges    = new List <double>(new double[localSearchesResults.Count]);
            var similarityToBestBySharedVertices           = new List <double>(new double[localSearchesResults.Count]);
            var similarityToBestBySharedEdges = new List <double>(new double[localSearchesResults.Count]);

            for (var i = 0; i < localSearchesResults.Count; i++)
            {
                for (var j = 0; j < localSearchesResults.Count; j++)
                {
                    if (i == j)
                    {
                        continue;
                    }
                    averangeSimilarityToOthersBySharedVertices[i] += Comparer.SharedVertices(localSearchesResults[i].PathNodes, localSearchesResults[j].PathNodes);
                    averangeSimilarityToOthersBySharedEdges[i]    += Comparer.SharedEdges(localSearchesResults[i].PathNodes, localSearchesResults[j].PathNodes);
                }
                if (i == bestLocalSearchIndex)
                {
                    continue;
                }
                similarityToBestBySharedVertices[i] = Comparer.SharedVertices(localSearchesResults[i].PathNodes, localSearchesResults[bestLocalSearchIndex].PathNodes);
                similarityToBestBySharedEdges[i]    = Comparer.SharedEdges(localSearchesResults[i].PathNodes, localSearchesResults[bestLocalSearchIndex].PathNodes);
            }

            averangeSimilarityToOthersBySharedVertices = averangeSimilarityToOthersBySharedVertices.Select(avg => avg / localSearchesResults.Count - 1) as List <double>;
            averangeSimilarityToOthersBySharedEdges    = averangeSimilarityToOthersBySharedEdges.Select(avg => avg / localSearchesResults.Count - 1) as List <double>;



            //DAL.Instance.CloseFileToWrite();

            Console.ReadKey();
        }