/// <summary> /// Fitness Function /// </summary> /// <returns>Between 0 and 1 with 1 being being most fit</returns> private double CalculateFitness(Chromosome chromosome) { int[] arr = new int[25]; int i = 0; foreach (Gene gene in chromosome) { arr[i] = (int)gene.ObjectValue; i++; } double fitnessValue = -1; if (chromosome != null) { int fitness = ClickOMania.Game(arr, gameBoard.GetBoardAsArray()); double adjustedFitness = (50 - fitness); // fitness is how many squares are empty, not how many are left adjustedFitness = adjustedFitness * (1F / 50F); // fitness needs to be between 0 and one, so multiply by min/max fitnessValue = adjustedFitness; } else { //chromosome is null throw new ArgumentNullException("chromosome", "The specified Chromosome is null."); } return(fitnessValue); }