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); }
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))); }
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); }
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); }
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); }