Example #1
0
        public Population(int count, IPopulationGenerator <T> generator, IFitnessEvaluator <T> evaluator)
        {
            if (count <= 0)
            {
                throw new ArgumentException($"{nameof(count)} must be greater than 0. Actual: {count}.");
            }

            if (generator == null)
            {
                throw new System.ArgumentNullException(nameof(generator));
            }

            if (evaluator == null)
            {
                throw new System.ArgumentNullException(nameof(evaluator));
            }

            TargetSize = count;

            // TODO: This really shouldn't be here. We should instead pass the
            // population
            for (var i = 0; i < count; i++)
            {
                var value      = generator.Generate();
                var fitness    = evaluator.ComputeFitness(value);
                var chromosome = new Chromosome <T>(value, fitness);

                Chromosomes.Add(chromosome);
            }
        }
Example #2
0
        Chromosome <string> ICrossOver <string> .CrossOver(Chromosome <string> parent1, Chromosome <string> parent2)
        {
            var parent1Genes = parent1.Genes;
            var parent2Genes = parent2.Genes;

            var index = Random.Next(0, parent1.Genes.Length);

            var newChars = new char[parent1Genes.Length];

            for (int i = 0; i < newChars.Length; i++)
            {
                newChars[i] = i >= index ? parent2Genes[i] : parent1Genes[i];
            }

            var chromosome = new Chromosome <string>(new string(newChars));

            chromosome.Fitness = Evaluator.ComputeFitness(chromosome.Genes);

            return(chromosome);
        }
Example #3
0
        public Population(int count, IPopulationGenerator <T> generator, IFitnessEvaluator <T> evaluator)
        {
            Contract.Requires <ArgumentOutOfRangeException>(count > 0);
            Contract.Requires <ArgumentNullException>(generator != null);
            Contract.Requires <ArgumentNullException>(evaluator != null);

            TargetSize = count;
            Evaluator  = evaluator;

            // TODO: This really shouldn't be here. We should instead pass the
            // population
            for (var i = 0; i < count; i++)
            {
                var value      = generator.Generate();
                var chromosome = new Chromosome <T>(value);
                chromosome.Fitness = evaluator.ComputeFitness(chromosome.Genes);

                Chromosomes.Add(chromosome);
            }
        }
Example #4
0
        private Chromosome <string> Mutate(Chromosome <string> chromosome)
        {
            var genes = chromosome.Genes;

            var random = new Random();

            var index = random.Next(0, genes.Length - 1);

            var min = 97;
            var max = 122;

            var newCharacter = (char)random.Next(min, max);

            var chars = genes.ToCharArray();

            chars[index] = newCharacter;

            var newGenes = new string(chars);

            return(new Chromosome <string>(new string(chars), Evaluator.ComputeFitness(newGenes)));
        }