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