private Guid GetIdOfChromosomeRoulette() { double SumFitness = Individuals.Select(x => x.Fitness).Sum(); if (SumFitness == 0) { return(Individuals[Random.Next() % Individuals.Count].Id); } int random = Random.Next() % (int)SumFitness; if (random <= 0) { random = 1; } double PartialSum = 0; foreach (var chromosome in Individuals) { PartialSum += chromosome.Fitness; if (PartialSum >= random) { return(chromosome.Id); } } if (Individuals.Count > 0) { return(GetIdOfRandomChromosome()); } return(Guid.Empty); }
/// <summary> /// Create a population with additional GA information /// </summary> /// <param name="population">Individuals to store</param> /// <param name="number">N-th generation in a GA</param> public NumberedPopulation(Population <TIndividual, TGene> population, int number) : base(population) { Number = number; TopFitness = Individuals.Select(i => i.Fitness).Max(); }
public override string ToString() { return(string.Join(Environment.NewLine, Individuals.Select((ind, i) => $"{i + 1}:\t{ind}"))); }
public double CalculateWorstDistance() { return(Individuals.Select(individual => individual.CalculateTotalDistance()).Max()); }
public double CalculateAverageDistance() { return(Individuals.Select(individual => individual.CalculateTotalDistance()).Average()); }
protected override void Initialize() { Individuals = Individuals.Select(individual => individual.Shuffle()).ToList(); }
public override string ToString() { return(string.Join(Environment.NewLine, Individuals.Select(i => i.ToString()).ToArray())); }