public void PopulateGenes() { for (int i = 0; i < maxLength; i++) { genes.Add(GeneticFunction.GetGene()); } }
public void Mutate() { int mutationPoint = GeneticPrimes.rnd.Next(genes.Count); genes[mutationPoint] = GeneticFunction.GetGene(); //genes[mutationPoint].Mutate(); }
public Chromosome RandomMerge(Chromosome ch) { Chromosome result = new Chromosome(); for (int i = 0; i < genes.Count; i++) { GeneticFunction gene = GeneticPrimes.rnd.Next(100) < 50 ? genes[i].Clone() : ch.genes[i].Clone(); result.genes.Add(gene); } return(result); }
public Chromosome RouletteMerge(Chromosome ch) { Chromosome result = new Chromosome(); int splitPoint = GeneticPrimes.rnd.Next(genes.Count); for (int i = 0; i < genes.Count; i++) { GeneticFunction gene = i < splitPoint ? genes[i].Clone() : ch.genes[i].Clone(); result.genes.Add(gene); } return(result); }
public static GeneticFunction GetGene() { GeneticFunction result = null; int r = GeneticPrimes.rnd.Next(7); switch (r) { case 0: result = new AddFunction(); break; case 1: result = new SubtractFunction(); break; case 2: result = new MultiplyFunction(); break; case 3: result = new DivideFunction(); break; case 4: result = new OddFunction(); break; case 5: result = new SquareRootFunction(); break; case 6: result = new SquareFunction(); break; } result.modifier = GeneticPrimes.rnd.Next(rndRange); return(result); }