public static void MutationFunc(IIndividual<Wrapper<MyValuableClass>> individual, IGAconfiguration gaConfiguration)
 {
     foreach (var gene in individual.Chromosome.Genes)
     {
         if (gaConfiguration.MutationProbability != null && GAUtils.GetProbability(gaConfiguration.MutationProbability.Value))
         {
             gene.Value.MyVal += GAUtils.GetNextDouble() > 0.5 ? -1 : 1;
         }
     }
 }
 public static bool StopCondition(IStatistics stat, IGAconfiguration gaConfigs)
 {
     if (stat.CurrentIteration < gaConfigs.IterationsNumber)
     {
         return false;
     }
     else
     {
         return true;
     }
 }
        public static IList<IIndividual<Wrapper<MyValuableClass>>> SelectionFunc(IPopulation<Wrapper<MyValuableClass>> population, IGAconfiguration gaConfigs)
        {
            IList<IIndividual<Wrapper<MyValuableClass>>> list = new List<IIndividual<Wrapper<MyValuableClass>>>();
            int individualsCountToSelect = population.Individuals.Count;
            if (gaConfigs.ElitismPercentage != null)
            {
                int populationSize = population.Individuals.Count;
                int eliteIndCount = (int)(populationSize * gaConfigs.ElitismPercentage);
                individualsCountToSelect = populationSize - eliteIndCount;
            }

            while (list.Count < individualsCountToSelect)
            {
                var ind = GAUtils.ProvideTournamentSelection(2, population);
                list.Add(ind);
            }
            return list;
        }
        private void MutationFunc(IIndividual<Wrapper<LearningObject>> individual, IGAconfiguration gaConfiguration)
        {
            if (gaConfiguration.MutationProbability != null)
            {
                foreach (var gene in individual.Chromosome.Genes)
                {
                    if (GAUtils.GetProbability(gaConfiguration.MutationProbability.Value))
                    {
                        gene.Used = !gene.Used;
                    }
                }

                for (int i = 0; i < individual.Chromosome.Genes.Count; i++)
                {
                    if (GAUtils.GetProbability(gaConfiguration.MutationProbability.Value))
                    {
                        int newPos = GAUtils.GetRandom(0, individual.Chromosome.Genes.Count);
                        if (i != newPos)
                        {
                            var tmpVal = individual.Chromosome.Genes[newPos];
                            individual.Chromosome.Genes[newPos] = individual.Chromosome.Genes[i];
                            individual.Chromosome.Genes[i] = tmpVal;
                        }
                    }
                }
            }
        }