Пример #1
0
        public void AddIndividual(Individual individual)
        {
            index++;
            index %= pool.Count;

            pool[index] = individual;
        }
Пример #2
0
        public Individual SexyTime(Individual a, Individual b)
        {
            List<double> c = new List<double>();

            bool ab = true;

            for (int i = 0; i < a.genes.Count; i++)
            {
                if (ab)
                    c.Add(a.genes[i]);
                else
                    c.Add(b.genes[i]);

                if (r.NextDouble() < crossoverRate)
                    ab = !ab;
            }

            return new Individual(c);
        }
Пример #3
0
        public Individual Mutate(Individual mutee, double magnitude)
        {
            int loci = (int)(r.NextDouble() * mutee.genes.Count);

            mutee.genes[loci] += (r.NextDouble() * magnitude) - (magnitude/2);

            if ((mutee.genes[loci] > 1) || (mutee.genes[loci] < -1))
                mutee.genes[loci] = ((r.NextDouble()*2) -1);

            return mutee;
        }