public void Can_Test_Multiple_Strategies_And_Order_Them_By_Score() { int strategiesToTest = 10; var strategies = new Dictionary <Situation, RobotAction> [strategiesToTest] .Select(x => StrategyGenerator.Random()).ToArray(); var testingRobots = new Robot[strategiesToTest] .Select((x, i) => new Robot(strategies[i], new Scorer())).ToArray(); foreach (var robot in testingRobots) { Board b = new Board(10, 10); var litterer = new BoardLitterer(0.5); litterer.Litter(b); b.AddElement(robot, new Point(0, 0)); const int numberOfTurns = 200; for (int i = 0; i < numberOfTurns; i++) { robot.Act(b); } } var orderedResults = testingRobots.OrderBy(x => x._scorer.Score); Debug.Print(String.Join(", ", orderedResults.Select(x => x._scorer.Score))); }
public void Can_Run_A_Robot_Through_A_Game_And_Get_A_Score() { IDictionary <Situation, RobotAction> moveStrategy = StrategyGenerator.Random(); Scorer scorer = new Scorer(); Robot robot = new Robot(moveStrategy, scorer); Board board = new Board(10, 10); var litterer = new BoardLitterer(0.5); litterer.Litter(board); board.AddElement(robot, new Point(0, 0)); const int numberOfTurns = 200; for (int i = 0; i < numberOfTurns; i++) { robot.Act(board); } int score = robot._scorer.Score; Debug.Print("Score is: {0}", score); }
public void Can_Combine_Strategies() { IDictionary <Situation, RobotAction> s1 = StrategyGenerator.Random(); IDictionary <Situation, RobotAction> s2 = StrategyGenerator.Random(); var newStrategy = StrategyGenerator.Merge(s1, s2); Assert.AreEqual(s1.Count, newStrategy.Count); Assert.AreEqual(s2.Count, newStrategy.Count); }
public void Strategy_Is_Created_With_Correct_Random_State() { var strategy = StrategyGenerator.Random(); var possibilities = Math.Pow(3, 5); // 3 = BoardContent possibilites, 5 = parts to Situation. Assert.AreEqual(243, strategy.Count()); int[] possibilityCounts = new int[7]; // 7 possibilities. foreach (var element in strategy) { ++possibilityCounts[(int)element.Value]; } Debug.Print("Possiblitiy counts: {0}", String.Join(": ", possibilityCounts)); Assert.IsTrue(possibilityCounts.Min() > 15, "Will PROBABLY pass. May randomly fail. Try running test again."); Assert.IsTrue(possibilityCounts.Max() < 50, "Will PROBABLY pass. May randomly fail. Try running test again."); }
public IEnumerable <Robot> GenerateInitialPopulation(int populationSize) { return(new Robot[populationSize] .Select((x, i) => new Robot(StrategyGenerator.Random(), new Scorer()))); }