static void Main(string[] args) { Stopwatch watch = new Stopwatch(); watch.Start(); PathService pathService = PathService.Instance; ISelectionService selectionService = RouletteService.Instance; ISelectionService secondarySelectionService = TournamentService.Instance; PmxCrossoverService crossoverService = PmxCrossoverService.Instance; Subject min = new Subject(); int minDitanceInIntance = 0; instances = pathService.RandomizeInstances(40); for (int i = 0; i < 100000; i++) { Random r = new Random(); instances = (r.Next(100) > 97) ? selectionService.Select(instances) : secondarySelectionService.Select(instances); //instances = secondarySelectionService.Select(instances); //instances = selectionService.Select(instances); if (i < 80000) { instances = crossoverService.CrossPopulation(instances, 80, 45); } else { instances = crossoverService.CrossPopulation(instances, 90, 15); } minDitanceInIntance = instances.Min(x => x.Distance); if (min.Cities == null || min.Distance > minDitanceInIntance) { min = instances.First(x => x.Distance == minDitanceInIntance); Console.WriteLine($"Generacja: {i}, wynik: {min.Distance}"); } } Console.WriteLine("Time elapsed: " + watch.Elapsed); pathService.SaveInstance(min); Console.ReadKey(); }