public static Population GeneratePopulation(IRandom rand, int populationSize, int numberOfChromosomes, int geneLength, int minChromosomeLength, int maxChromosomeLength, List<Chromosome> geneBlacklist, List<Chromosome> geneWhitelist, Func<IOrganism, IOrganism> correctionFunction)
        {
            Population candidates = new Population();
            RandomChromosomeGenerator generator = new RandomChromosomeGenerator(rand, new ChromosomePart(rand) {
                GeneLength = geneLength,
                GeneBlacklist = geneBlacklist,
                GeneWhitelist = geneWhitelist,
                MinimumChromosomeLength = minChromosomeLength,
                MaximumChromosomeLegnth = maxChromosomeLength
            });

            for (int organismId = 0; organismId <= populationSize - 1; organismId++) {
                IOrganism organism = new Organism();
                for (int chromosomeId = 0; chromosomeId <= numberOfChromosomes - 1; chromosomeId++) {
                    organism.Chromosomes.Add(generator.GetChromosome());
                }

                if (correctionFunction != null) {
                    organism = correctionFunction(organism);
                }

                candidates.Add(organism);
            }

            return candidates;
        }
        public void BitFlipMutationTest1()
        {
            Organism organism = new Organism();
            organism.Chromosomes.Add(new Chromosome(1, "0"));
            IRandom rand = new Deterministic(0);
            BitFlipMutation mutator = new BitFlipMutation(rand);
            mutator.Mutate(organism);

            Assert.AreEqual("1", organism.Chromosomes[0].ToString());
        }
Ejemplo n.º 3
0
        public IOrganism Clone()
        {
            Organism t = new Organism();
            t.Metadata = this.Metadata;

            foreach (Chromosome Chromosome in this.Chromosomes) {
                t.Chromosomes.Add(Chromosome.Clone());
            }

            return t;
        }
        public void PartiallyMatchedCrossoverTest2()
        {
            Organism parent1 = new Organism();
            Organism parent2 = new Organism();
            parent1.Chromosomes.Add(new Chromosome(3, "001110"));
            parent2.Chromosomes.Add(new Chromosome(3, "110001"));

            IRandom rand = new Deterministic(1, 0);
            PartiallyMatchedCrossover linker = new PartiallyMatchedCrossover(rand, 1);
            var children = linker.CrossLink(parent1, parent2);

            Assert.AreEqual("110001", children.Item1.ToString());
            Assert.AreEqual("001110", children.Item2.ToString());
        }
        public void OnePointCrossLinkTest2()
        {
            Organism parent1 = new Organism();
            Organism parent2 = new Organism();
            parent1.Chromosomes.Add(new Chromosome(1, "11"));
            parent2.Chromosomes.Add(new Chromosome(1, "00"));

            IRandom rand = new Deterministic(1, 1);
            OnePointCrossover crossLinker = new OnePointCrossover(rand, 0);
            var answer = crossLinker.CrossLink(parent1, parent2);

            Assert.AreEqual("11", answer.Item1.Chromosomes[0].ToString());
            Assert.AreEqual("00", answer.Item2.Chromosomes[0].ToString());
        }
        public void BitSwapMutationTest3()
        {
            Organism organism = new Organism();
            organism.Chromosomes.Add(new Chromosome(1, "01010"));

            IRandom rand = new Deterministic(1);
            BitSwapMutation mutator = new BitSwapMutation(rand);
            mutator.Mutate(organism);

            string answer = organism.Chromosomes[0].ToString();

            Assert.AreEqual("00110", answer);
        }
        public void MutatorTest4()
        {
            Organism organism = new Organism();
            organism.Chromosomes.Add(new Chromosome(1, "10"));

            int runCount = 100000;
            double mutationProbability = 0;

            MutationCounter mutator = new MutationCounter();
            IRandom rand = new Rand();
            Mutator mutationManager = new Mutator(rand, mutationProbability);
            mutationManager.AddMutator(mutator);
            for (int i = 0; i <= runCount - 1; i++) {
                mutationManager.Mutate(organism);
            }

            Assert.AreEqual(0, mutator.MutationCount);
            Assert.AreEqual("10", organism.Chromosomes[0].ToString());
        }
        public void MutatorTest1()
        {
            Organism organism = new Organism();
            organism.Chromosomes.Add(new Chromosome(1, "10"));

            MutationCounter mutator = new MutationCounter();
            mutator.Mutate(organism);
            mutator.Mutate(organism);
            mutator.Mutate(organism);
            mutator.Mutate(organism);

            Assert.AreEqual(4, mutator.MutationCount);
            Assert.AreEqual("10", organism.Chromosomes[0].ToString());
        }
        public void InsertionMutationTest2()
        {
            Organism organism = new Organism();
            organism.Chromosomes.Add(new Chromosome(1, "10"));

            IRandom rand = new Deterministic(0, 0);
            InsertionMutation mutator = new InsertionMutation(rand);
            mutator.Mutate(organism);

            string answer = organism.Chromosomes[0].ToString();
            Assert.AreEqual("010", answer);
        }
        public void GeneSwapTest3()
        {
            Organism organism = new Organism();
            organism.Chromosomes.Add(new Chromosome(1, "0011"));

            IRandom rand = new Deterministic(0);
            GeneSwapMutation mutator = new GeneSwapMutation(rand, 2);
            mutator.Mutate(organism);

            Assert.AreEqual("1100", organism.Chromosomes[0].ToString());
        }