private static void Randomize(IGeneticOptimizeable gen, double min, double max) { var w = gen.optimizeableValues; for (var i = 0; i < w.Count; i++) { w[i] = rnd.NextDouble() * (max - min) + min; } gen.optimizeableValues = w; }
public void Mutate(IGeneticOptimizeable gen) { var w = gen.optimizeableValues; for (var i = 0; i < w.Count; i++) { if (rnd.NextDouble() < mutateProbability) { w[i] += rnd.NextDouble() * 2 - 1; } } gen.optimizeableValues = w; }
public void Crossover(IGeneticOptimizeable mom, IGeneticOptimizeable dad) { var momW = mom.optimizeableValues; var dadW = dad.optimizeableValues; var n = rnd.Next(momW.Count); for (var i = 0; i < momW.Count; i++) { if (i < n) { momW[i] = dadW[i]; } else { dadW[i] = momW[i]; } } mom.optimizeableValues = momW; dad.optimizeableValues = dadW; }