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); } }
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(); } } }
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(); }