示例#1
0
        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);
        }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        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);
        }