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