public void TestProvided_ADLreturned() { var expected = "adl"; var evaluator = new TestCase1.Evaluator(); var generator = new TestCase1.Generator(); var applier = new TestCase1.Applier(); var algorithm = new MinimaxAverageAlgorithm <TestCase1.State, TestCase1.Move>(evaluator, generator, applier) { MaxDepth = int.MaxValue, MinLevelAverageDepth = 2, MaxLevelAverageDepth = 2 }; var sb = new StringBuilder(); var state = new TestCase1.State(1, 0); var move = algorithm.Calculate(state); sb.Append(move.Label); state = applier.Apply(state, move); move = algorithm.Calculate(state); sb.Append(move.Label); state = applier.Apply(state, move); move = algorithm.Calculate(state); sb.Append(move.Label); var actual = sb.ToString(); Assert.Equal(expected, actual); }
public void MaxLevel1(int depth) { var evaluator = new TestCase1.Evaluator(); var generator = new TestCase1.Generator(); var applier = new TestCase1.Applier(); var algorithm1 = new MinimaxAlgorithm <TestCase1.State, TestCase1.Move>(evaluator, generator, applier) { MaxDepth = depth }; var algorithm2 = new MinimaxAverageAlgorithm <TestCase1.State, TestCase1.Move>(evaluator, generator, applier) { MaxDepth = depth, MaxLevelAverageDepth = 1, MinLevelAverageDepth = 1 }; var algorithm3 = new AlphaBetaAlgorithm <TestCase1.State, TestCase1.Move>(evaluator, generator, applier) { MaxDepth = 1 }; var state = new TestCase1.State(0, 0); var move1 = algorithm1.Calculate(state); var move2 = algorithm2.Calculate(state); var move3 = algorithm3.Calculate(state); Assert.Equal(move1, move2); Assert.Equal(move2, move3); Assert.Equal(move3, move1); }
private IAlgorithm <ChessRepresentation, BaseMove> GetAlgorithm(Type algorithmType, Type evaluatorType) { var generator = new MoveGenerator(_mechanism); var applier = new MoveApplier(_mechanism); var evaluator = (IEvaluator <ChessRepresentation>)Activator.CreateInstance(evaluatorType, new[] { _mechanism }); // TODO : A bit hacky, refactor later! if (algorithmType == typeof(MinimaxAlgorithm <ChessRepresentation, BaseMove>)) { var minimax = new MinimaxAlgorithm <ChessRepresentation, BaseMove>(evaluator, generator, applier) { MaxDepth = (int)numericUpDown1.Value }; return(minimax); } if (algorithmType == typeof(AlphaBetaAlgorithm <ChessRepresentation, BaseMove>)) { var ab = new AlphaBetaAlgorithm <ChessRepresentation, BaseMove>(evaluator, generator, applier) { MaxDepth = (int)numericUpDown1.Value }; return(ab); } if (algorithmType == typeof(MinimaxAverageAlgorithm <ChessRepresentation, BaseMove>)) { var minimaxAvg = new MinimaxAverageAlgorithm <ChessRepresentation, BaseMove>(evaluator, generator, applier) { MaxDepth = (int)numericUpDown1.Value }; return(minimaxAvg); } if (algorithmType == typeof(GreedyAlgorithm <ChessRepresentation, BaseMove>)) { var greedy = new GreedyAlgorithm <ChessRepresentation, BaseMove>(evaluator, generator, applier); return(greedy); } if (algorithmType == typeof(RandomAlgorithm <ChessRepresentation, BaseMove>)) { var randomAlgorithm = new RandomAlgorithm <ChessRepresentation, BaseMove>(generator); return(randomAlgorithm); } throw new ArgumentOutOfRangeException(nameof(algorithmType)); }