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++;
                }
            };
        }