예제 #1
0
        private static void Main()
        {
            var evaluator   = new StateEvaluator();
            var fogRevealer = new SimpleFogRevealer();
            var ai          = new GreedyAi(evaluator);
            var reader      = new StateReader(Console.ReadLine);
            var initData    = reader.ReadInitialization();
            var isFirst     = true;

            while (true)
            {
                var state     = reader.ReadState(initData);
                var countdown = new Countdown(isFirst ? 95 : 45);
                isFirst = false;
                fogRevealer.ConsiderStateBeforeMove(state, 20);
                // ReSharper disable once RedundantAssignment
                var actions = reader.ReadActions();
                EnsureActionsAreSame(state.GetPossibleActions(), actions);
                var action = ai.GetAction(state, countdown);
                WriteOutput(action);
                Console.Error.WriteLine(countdown);
                fogRevealer.RegisterAction(action);
                action.ApplyTo(state);
            }
            // ReSharper disable once FunctionNeverReturns
        }
예제 #2
0
        public void CalculateNextMove()
        {
            var state = new StateReader("...0...|..000..|.00000.|0000000|.00000.|..000..|...0...|3 2|5 2|-1 -1|-1 -1|")
                        .ReadState(new InitializationData(7, 2));
            var            evaluator = new StateEvaluator();
            var            action    = new GreedyAi(evaluator).GetAction(state, 100);
            ExplainedScore score     = null;

            using (new MoveAndBuildAction(0, Direction.N, Direction.N).ApplyTo(state))
                score = evaluator.Evaluate(state, 0);
            using (action.ApplyTo(state))
                evaluator.Evaluate(state, 0).Should().BeGreaterOrEqualTo(score);
        }
예제 #3
0
        public void AbWithDepth1_IsSameAsGreedy(string input)
        {
            var state            = StateReader.Read(input);
            var initialStateDump = state.ToString();

            var greedyAction = new GreedyAi(evaluator).GetAction(state, 100);
            var abAction     = new AlphabetaAi(evaluator, 1).GetAction(state, 100);

            Console.WriteLine(state.ToString());
            Console.WriteLine(abAction);

            state.ToString().Should().Be(initialStateDump, "ai.GetAction should not change state");
            abAction.ToString().Should().Be(greedyAction.ToString(), "ab-ai with depth=1 should be exactly gready ai");
        }
        public void BeEquivalentToGreedy_WhenSearchDepthIs1(string input)
        {
            var state            = StateReader.Read(input);
            var initialStateDump = state.ToString();

            var greedyAction = new GreedyAi(evaluator).GetAction(state, 100);
            var abAction     = new AlphaBetaAi(evaluator, 1).GetAction(state, 100);

            Console.WriteLine(state.ToString());
            Console.WriteLine($"[{abAction}]");

            state.ToString().Should().Be(initialStateDump, "ai.GetAction should not change state");
            abAction.ToString().Should().Be(greedyAction.ToString(), "ab-ai with depth=1 should be exactly gready ai");
        }