private int AverageDnaLength(Individual[] generation) { int result = 0; int n = popSize; for (int i = 0; i < generation.Count(); i++) { result += generation[i].DNALength; } //mix in our elite length if opted for if (Elite && BestDNA != null) { result += BestDNA.Count(); n++; } return(result / n); }
private void SelectParents(List <ScoreCard> scores) { //sort scorecards in descending fitness score scores.Sort((x, y) => y.Score.CompareTo(x.Score)); for (int i = 0; i < parents.Length; i++) { //choose parents parents[i] = generation[scores[i].Individual]; //Mix parent into master dna pool List <MoveDir> dna = parents[i].Dna; for (int j = 0; j < dna.Count(); j++) { if (dnaPool.Count() <= j) { dnaPool.Add(new MasterGene()); } dnaPool[j].Mix(dna[j], scores[i].Individual); } } // mix in our elites if opted for if (Elite && BestDNA != null) { dnaPool.Add(new MasterGene()); for (int i = 0; i < BestDNA.Count(); i++) { if (dnaPool.Count() <= i) { dnaPool.Add(new MasterGene()); } dnaPool[i].Mix(BestDNA[i], BestDNAFitness); } } }
private double ScoreFitness(List <ScoreCard> scores, Individual[] generation, int dnaAvgLength) { double result = 0.0; int n = generation.Length; for (int i = 0; i < generation.Length; i++) { double fitness = Fitness(generation[i].DNALength, dnaAvgLength); result += fitness; scores.Add(new ScoreCard(i, fitness)); } //mix in our elite fitness if opted for if (Elite && BestDNA != null) { BestDNAFitness = Fitness(BestDNA.Count(), dnaAvgLength); result += BestDNAFitness; n++; } return(result / n); }