/// <summary> /// Calculate individuals fitness by comparing it to our solution /// </summary> /// <param name="individual">Individual to check health from</param> /// <returns></returns> internal static int GetFitness(Individual individual) { int fitness = 0; //Loop through our individuals genes and compare them to our candidates for (int i = 0; i < individual.Size() && i < solution.Length; i++) { if (individual.GetGene(i) == solution[i]) { fitness++; } } return(fitness); }
/// <summary> /// Crossover individuals /// </summary> /// <param name="indiv1">Parent individual 1</param> /// <param name="indiv2">Parent individual 2</param> /// <returns>Child individual</returns> private static Individual Crossover(Individual indiv1, Individual indiv2) { Individual newSol = new Individual(); // Loop through genes for (int i = 0; i < indiv1.Size(); i++) { // Crossover if (rnd.NextDouble() <= uniformRate) { newSol.SetGene(i, indiv1.GetGene(i)); } else { newSol.SetGene(i, indiv2.GetGene(i)); } } return(newSol); }