コード例 #1
0
        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)));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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.");
        }
コード例 #5
0
 public IEnumerable <Robot> GenerateInitialPopulation(int populationSize)
 {
     return(new Robot[populationSize]
            .Select((x, i) => new Robot(StrategyGenerator.Random(), new Scorer())));
 }