public MainWindow() { InitializeComponent(); DataContext = this; SelectedType = SelectionMethods.First(); QueueTask = () => { while (Queue.Count != complited) { Fitness fitnessFunc = new Fitness(map.Count, false); Population population = new Population(Queue[complited].PopulationCount, new Chromosome(Cities, r, (ushort)r.Next(CitiesCount), true, (ushort)ConnectionsCount, Queue[complited].CrossoverMix, Queue[complited].KillBothParents), fitnessFunc, Queue[complited].SelectionMethod) { CrossoverRate = Queue[complited].CrossOver, MutationRate = Queue[complited].Mutation, RandomSelectionPortion = Queue[complited].RandomSelectionPortion, AutoShuffling = Queue[complited].AutoShufling }; int i = 0; bool needToStop = false; while (!needToStop) { population.RunEpoch(); Queue[complited].Results.Add(new Result(i, (population.BestChromosome as Chromosome).Path, population.BestChromosome.Fitness, population.FitnessAvg, fitnessFunc.GetLength(population.BestChromosome), (population.BestChromosome as Chromosome).Path.Count() )); System.Diagnostics.Debug.WriteLine("Best path: " + String.Join(",", (population.BestChromosome as Chromosome).Path) + $"\nBest fit: {population.BestChromosome.Fitness}"); System.Diagnostics.Debug.WriteLine("Avarge fit: " + population.FitnessAvg); System.Diagnostics.Debug.WriteLine("Best length: " + fitnessFunc.GetLength(population.BestChromosome)); System.Diagnostics.Debug.WriteLine("Edges visited: " + (population.BestChromosome as Chromosome).Path.Count() + $"\nGeneartion: {i}"); if (i > Queue[complited].GenerationCount) { break; } i++; } Queue[complited].Name += ": " + (int)fitnessFunc.GetLength(population.BestChromosome); complited++; } }; }