public void AddIndividual(Individual individual) { index++; index %= pool.Count; pool[index] = individual; }
public Individual SexyTime(Individual a, Individual b) { List<double> c = new List<double>(); bool ab = true; for (int i = 0; i < a.genes.Count; i++) { if (ab) c.Add(a.genes[i]); else c.Add(b.genes[i]); if (r.NextDouble() < crossoverRate) ab = !ab; } return new Individual(c); }
public Individual Mutate(Individual mutee, double magnitude) { int loci = (int)(r.NextDouble() * mutee.genes.Count); mutee.genes[loci] += (r.NextDouble() * magnitude) - (magnitude/2); if ((mutee.genes[loci] > 1) || (mutee.genes[loci] < -1)) mutee.genes[loci] = ((r.NextDouble()*2) -1); return mutee; }