void InitializeValues() { totalCities = SharedMethods.TotalCities; tourOrder = new int[totalCities]; tourLocations = new Vector2[totalCities]; (tourLocations, tourOrder) = SharedMethods.InitializeLocations(totalCities, random); SharedMethods.Order.CopyTo(tourOrder, 0); SharedMethods.Locations.CopyTo(tourLocations, 0); SharedMethods.DrawPoints(pointsGrid); initialDistance = SharedMethods.RoundTripDistance(tourLocations, tourOrder); populationSize = SharedMethods.PopulationSize; mutationRate = SharedMethods.MutationRate; elitism = SharedMethods.Elitism; count = 0; ga = null; ga = new GAClass(populationSize, totalCities, elitism, random, mutationRate); }
public static (int[], int) two_opt(int[] order, int count) { var bestdistance = SharedMethods.RoundTripDistance(SharedMethods.Locations, order); int flag = 0; for (int i = 0; i < order.Length - 1; i++) { for (int j = i + 1; j < order.Length; j++) { var newRout = two_opt_swap(order, i, j); var newdis = SharedMethods.RoundTripDistance(SharedMethods.Locations, newRout); if (bestdistance > newdis) { bestdistance = newdis; order = newRout; flag = 1; count++; break; } } if (flag == 1) { break; } } return(order, count); }
private async void CanvasAnimatedControl_Draw(Microsoft.Graphics.Canvas.UI.Xaml.ICanvasAnimatedControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasAnimatedDrawEventArgs args) { if (SharedMethods.isRunnnig) { var curDistance = SharedMethods.RoundTripDistance(tourLocations, tourOrder); bestTourDistance = curDistance; tourOrder = SimulatedAnnealing.PerformSimulatedAnnealing(tourOrder, Temperature, random); Temperature = Temperature * TemperatureRate; UpdateUI(); count++; SharedMethods.DrawPath(args.DrawingSession, tourLocations, tourOrder, Color.FromArgb(85, 255, 255, 255), 2f); } else { if (count > 0) { SharedMethods.DrawPath(args.DrawingSession, tourLocations, tourOrder, Color.FromArgb(85, 255, 255, 255), 4f); } await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { startBtn.Visibility = Visibility.Visible; stopBtn.Visibility = Visibility.Collapsed; }); sender.Paused = true; } }
void SetFitness() { for (int i = 0; i < PopulationSize; i++) { Population[i].Fitness = (float)SharedMethods.RoundTripDistance( SharedMethods.Locations, Population[i].Genes); if (Population[i].Fitness < BestFitnes) { BestFitnes = Population[i].Fitness; Population[i].Genes.CopyTo(BestGenes, 0); } } Population = Population.OrderBy(x => x.Fitness).ToList(); var inverse = Population.Select(x => 1 / x.Fitness).ToList(); var sum = inverse.Sum(); var inverseProportion = inverse.Select(x => x / sum).ToList(); var proportionSum = inverseProportion.Sum(); var normalizedProportion = inverseProportion.Select(x => x / proportionSum).ToList(); cumuProportion.Clear(); var cumuTotal = 0f; foreach (var item in normalizedProportion) { cumuTotal += item; cumuProportion.Add(cumuTotal); } cumuProportion[PopulationSize - 1] = 1; }
private async void CanvasAnimatedControl_Draw(Microsoft.Graphics.Canvas.UI.Xaml.ICanvasAnimatedControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasAnimatedDrawEventArgs args) { if (SharedMethods.isRunnnig) { var curDistance = SharedMethods.RoundTripDistance(tourLocations, tourOrder); if (curDistance < bestTourDistance) { bestTourDistance = curDistance; tourOrder.CopyTo(bestTourOrder, 0); } currentIteration++; UpdateUI(); tourOrder = LexicographicOrder.Lexicography(tourOrder); if (currentIteration >= totalIterations) { SharedMethods.isRunnnig = false; } else { SharedMethods.DrawPath(args.DrawingSession, tourLocations, tourOrder, Color.FromArgb(85, 255, 255, 255), 2f); SharedMethods.DrawPath(args.DrawingSession, tourLocations, bestTourOrder, Color.FromArgb(85, 255, 255, 255), 4f); } } else { if (currentIteration > 0) { SharedMethods.DrawPath(args.DrawingSession, tourLocations, bestTourOrder, Color.FromArgb(85, 255, 255, 255), 4f); } await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { startBtn.Visibility = Visibility.Visible; stopBtn.Visibility = Visibility.Collapsed; }); sender.Paused = true; } }
public static int[] PerformSimulatedAnnealing(int[] x, double Temp, Random random) { var newOrder = AnnealingSwap(x, random); var d1 = SharedMethods.RoundTripDistance(SharedMethods.Locations, x); var d2 = SharedMethods.RoundTripDistance(SharedMethods.Locations, newOrder); var prob = probability(d1, d2, Temp); var rand = random.NextDouble(); if (rand < prob) { x = newOrder; } //Temp = Temp * 0.999f; return(x); }
void InitializeValues() { totalCities = SharedMethods.TotalCities; tourOrder = new int[totalCities]; tourLocations = new Vector2[totalCities]; bestTourOrder = new int[totalCities]; (tourLocations, tourOrder) = SharedMethods.InitializeLocations(totalCities, random); SharedMethods.Order.CopyTo(tourOrder, 0); SharedMethods.Locations.CopyTo(tourLocations, 0); SharedMethods.DrawPoints(pointsGrid); initialDistance = SharedMethods.RoundTripDistance(tourLocations, tourOrder); bestTourDistance = float.PositiveInfinity; swaps = 0; }
void InitializeValues() { totalCities = SharedMethods.TotalCities; tourOrder = new int[totalCities]; tourLocations = new Vector2[totalCities]; bestTourOrder = new int[totalCities]; (tourLocations, tourOrder) = SharedMethods.InitializeLocations(totalCities, random); SharedMethods.Order.CopyTo(tourOrder, 0); SharedMethods.Locations.CopyTo(tourLocations, 0); SharedMethods.DrawPoints(pointsGrid); initialDistance = SharedMethods.RoundTripDistance(tourLocations, tourOrder); totalIterations = SharedMethods.Factorial(totalCities); currentIteration = 0; bestTourDistance = double.PositiveInfinity; }
void InitializeValues() { totalCities = SharedMethods.TotalCities; tourOrder = new int[totalCities]; tourLocations = new Vector2[totalCities]; (tourLocations, tourOrder) = SharedMethods.InitializeLocations(totalCities, random); SharedMethods.Order.CopyTo(tourOrder, 0); SharedMethods.Locations.CopyTo(tourLocations, 0); SharedMethods.DrawPoints(pointsGrid); initialDistance = SharedMethods.RoundTripDistance(tourLocations, tourOrder); Temperature = SharedMethods.Temperature; TemperatureRate = SharedMethods.TemperatureRate; count = 0; }