예제 #1
0
        public void MowTurnJumpCallTest()
        {
            var width   = 8;
            var height  = 8;
            var geneSet = new FnCreateGeneDelegate[]
            {
                () => new Mow(),
                () => new Turn(),
                () => new Jump(Rand.Random.Next(0, Math.Min(width, height)),
                               Rand.Random.Next(0, Math.Min(width, height))),
                () => new Func(true),
                () => new Call(Rand.Random.Next(0, 6)),
            };
            var minGenes                     = 3;
            var maxGenes                     = 20;
            var maxMutationRounds            = 3;
            var expectedNumberOfInstructions = 18;
            var expectedNumberOfSteps        = 65;

            Field FnCreateField() =>
            new ToroidField(width, height, FieldContents.Grass);

            RunWith(geneSet, width, height, minGenes, maxGenes,
                    expectedNumberOfInstructions, maxMutationRounds,
                    FnCreateField, expectedNumberOfSteps);
        }
예제 #2
0
        public void MutateTest()
        {
            var parent = new List <INode> {
                new Mow(), new Mow(), new Mow(), new Mow()
            };
            var geneSet = new FnCreateGeneDelegate[] { () => new Turn() };

            Tuple <Field, Mower, Program> FnEvaluate(IReadOnlyList <INode> instructions)
            {
                var field    = new ToroidField(10, 10, FieldContents.Grass);
                var location = new Location(5, 5);
                var dir      = Directions.North;
                var mower    = new Mower(location, dir);
                var program  = new Program(instructions);

                program.Evaluate(mower, field, 0);
                return(new Tuple <Field, Mower, Program>(field, mower, program));
            }

            Fitness FnFitness(IReadOnlyList <INode> genes) =>
            GetFitness(genes, FnEvaluate);

            var copy = parent.ToList();

            Mutate(parent, geneSet, 2, 5, FnFitness, 1);
            CollectionAssert.AreNotEqual(copy, parent);
            Assert.IsTrue(parent.Any(c => c.GetType() != typeof(Mow)));
        }
예제 #3
0
        public void CreateTest()
        {
            var geneSet = new FnCreateGeneDelegate[] { () => new Mow(), () => new Turn() };
            var child   = Create(geneSet, 2, 5);

            Assert.IsTrue(child.Count >= 2);
            Assert.IsTrue(child.Count <= 5);
        }
예제 #4
0
        public void MowTurnTest()
        {
            var width                        = 8;
            var height                       = 8;
            var geneSet                      = new FnCreateGeneDelegate[] { () => new Mow(), () => new Turn(), };
            var minGenes                     = width * height;
            var maxGenes                     = 3 * minGenes / 2;
            var maxMutationRounds            = 3;
            var expectedNumberOfInstructions = 78;

            Field FnCreateField() =>
            new ToroidField(width, height, FieldContents.Grass);

            RunWith(geneSet, width, height, minGenes, maxGenes,
                    expectedNumberOfInstructions, maxMutationRounds,
                    FnCreateField, expectedNumberOfInstructions);
        }
예제 #5
0
        public void MowTurnJumpValidatingTest()
        {
            var width   = 8;
            var height  = 8;
            var geneSet = new FnCreateGeneDelegate[]
            {
                () => new Mow(),
                () => new Turn(),
                () => new Jump(Rand.Random.Next(0, Math.Min(width, height)),
                               Rand.Random.Next(0, Math.Min(width, height)))
            };
            var minGenes                     = width * height;
            var maxGenes                     = 3 * minGenes / 2;
            var maxMutationRounds            = 3;
            var expectedNumberOfInstructions = 79;

            Field FnCreateField() =>
            new ValidatingField(width, height, FieldContents.Grass);

            RunWith(geneSet, width, height, minGenes, maxGenes,
                    expectedNumberOfInstructions, maxMutationRounds,
                    FnCreateField, expectedNumberOfInstructions);
        }