public void ScoreCacheTest() { AlphaBetaEngine engine = new AlphaBetaEngine(); //engine.TraceSource.Listeners.Clear(); //engine.TraceSource.Listeners.Add(new TextWriterTraceListener(new StreamWriter(@"C:\Users\huww\Documents\engine.log", false))); //engine.TraceSource.Switch.Level = SourceLevels.All; var board = new Player[20, 20]; board[10, 10] = board[10, 11] = board[11, 10] = board[9, 11] = board[9, 6] = board[12, 9] = board[12, 11] = board[11, 11] = Player.Own; board[9, 10] = board[9, 9] = board[9, 8] = board[9, 7] = board[10, 8] = board[13, 8] = board[13, 11] = board[8, 11] = Player.Opponent; engine.SetBoard(board); engine.HasTimeLimit = false; engine.HasForbiddenPlayer = Player.Own; for (int i = 1; i <= 5; i++) { engine.AlphaBetaSearch(i); } engine.SelfMove((12, 10)); engine.OpponentMove((12, 8)); var score = engine.AlphaBetaSearch(3); // this will use score cache from previous search engine.TraceSource.Flush(); Assert.Equal(-Evaluator.MaxScore, score); }
public void ScoreCacheTest() { var board = new Player[20, 20]; board[10, 10] = board[10, 11] = board[11, 10] = board[9, 11] = board[9, 6] = board[12, 9] = board[12, 11] = board[11, 11] = Player.Own; board[9, 10] = board[9, 9] = board[9, 8] = board[9, 7] = board[10, 8] = board[13, 8] = board[13, 11] = board[8, 11] = Player.Opponent; AlphaBetaEngine engine = new AlphaBetaEngine(new Board(board)); engine.HasNoTimeLimit(); engine.HasForbiddenPlayer = Player.Own; engine.InitializeSearch(); for (int i = 1; i <= 5; i++) { engine.AlphaBetaSearch(i); } engine.SelfMove((12, 10)); engine.OpponentMove((12, 8)); engine.InitializeSearch(); var score = engine.AlphaBetaSearch(3); // this will possibly use score cache from previous search Assert.Equal(-Evaluator.MaxScore, score); }
static async Task Main(string[] args) { var engine = new AlphaBetaEngine(); engine.TraceSource.Listeners.Clear(); //engine.TraceSource.Listeners.Add(new TextWriterTraceListener(new StreamWriter(@"C:\Users\huww\Documents\engine.log", false)) //{ // TraceOutputOptions = TraceOptions.DateTime //}); engine.TraceSource.Switch.Level = SourceLevels.Information; var pbrain = new PbrainAdapter(engine) { About = new About { Name = "H2", Author = "Weiwen Hu", Country = "CN", Version = "1.0", Email = "*****@*****.**" } }; engine.TraceSource.Listeners.Add(new PbrainTraceListener(pbrain)); await pbrain.StartAsync(); }
public void SearchToLoss() { AlphaBetaEngine engine = new AlphaBetaEngine(); var board = new Player[10, 10]; board[2, 2] = board[3, 2] = board[4, 2] = board[5, 2] = Player.Opponent; engine.SetBoard(board); engine.HasTimeLimit = false; var score = engine.AlphaBetaSearch(3); Assert.Equal(-Evaluator.MaxScore, score); }
public void SearchToLoss() { var board = new Player[10, 10]; board[2, 2] = board[3, 2] = board[4, 2] = board[5, 2] = Player.Opponent; AlphaBetaEngine engine = new AlphaBetaEngine(new Board(board)); engine.HasNoTimeLimit(); engine.InitializeSearch(); var score = engine.AlphaBetaSearch(3); Assert.Equal(-Evaluator.MaxScore, score); }
public void SearchToScore() { PatternTable patternTable = new PatternTable(); patternTable["_ _ o o o * _ _ _ _".ToPatternPair()] = 100; AlphaBetaEngine engine = new AlphaBetaEngine(patternTable); var board = new Player[10, 10]; board[2, 2] = board[3, 2] = board[5, 2] = Player.Own; engine.SetBoard(board); engine.HasTimeLimit = false; var score = engine.AlphaBetaSearch(2); Assert.Equal(100, score); }
public static void SimulateGames() { List <simulator> simulations = new List <simulator>(); //simulations.Add(new simulator(50, 2, 100)); //simulations.Add(new simulator(100, 2, 50)); //simulations.Add(new simulator(150, 2, 33)); //simulations.Add(new simulator(200, 2, 25)); //simulations.Add(new simulator(50, 3, 100)); //simulations.Add(new simulator(100, 3, 50)); //simulations.Add(new simulator(150, 3, 33)); //simulations.Add(new simulator(200, 3, 25)); //simulations.Add(new simulator(50, 4, 100)); //simulations.Add(new simulator(100, 4, 50)); //simulations.Add(new simulator(150, 4, 33)); //simulations.Add(new simulator(200, 4, 25)); //simulations.Add(new simulator(150, 5, 10)); //simulations.Add(new simulator(200, 5, 10)); //simulations.Add(new simulator(250, 5, 10)); //simulations.Add(new simulator(300, 5, 10)); //simulations.Add(new simulator(350, 5, 10)); //simulations.Add(new simulator(400, 5, 10)); //simulations.Add(new simulator(450, 5, 10)); //simulations.Add(new simulator(500, 5, 10)); //simulations.Add(new simulator(200, 6, 10)); //simulations.Add(new simulator(300, 6, 10)); //simulations.Add(new simulator(400, 6, 10)); //simulations.Add(new simulator(500, 6, 10)); //simulations.Add(new simulator(600, 6, 10)); //simulations.Add(new simulator(700, 6, 10)); //simulations.Add(new simulator(800, 6, 10)); //simulations.Add(new simulator(900, 6, 8)); //simulations.Add(new simulator(500, 7, 10)); //simulations.Add(new simulator(750, 7, 10)); //simulations.Add(new simulator(1000, 7, 10)); //simulations.Add(new simulator(2500, 7, 10)); //simulations.Add(new simulator(5000, 7, 10)); //simulations.Add(new simulator(7500, 7, 1)); //simulations.Add(new simulator(10000, 7, 10)); //simulations.Add(new simulator(500, 8, 10)); //simulations.Add(new simulator(750, 8, 10)); //simulations.Add(new simulator(1000, 8, 10)); //simulations.Add(new simulator(2500, 8, 10)); //simulations.Add(new simulator(5000, 8, 10)); //simulations.Add(new simulator(7500, 8, 10)); //simulations.Add(new simulator(10000, 8, 10)); //simulations.Add(new simulator(500, 9, 10)); //simulations.Add(new simulator(1000, 9, 10)); simulations.Add(new simulator(2500, 9, 10)); simulations.Add(new simulator(5000, 9, 10)); simulations.Add(new simulator(10000, 9, 10)); simulations.Add(new simulator(15000, 9, 10)); simulations.Add(new simulator(20000, 9, 10)); simulations.Add(new simulator(25000, 9, 10)); simulations.Add(new simulator(1000, 10, 10)); simulations.Add(new simulator(5000, 10, 10)); simulations.Add(new simulator(10000, 10, 10)); simulations.Add(new simulator(15000, 10, 10)); simulations.Add(new simulator(20000, 10, 10)); simulations.Add(new simulator(25000, 10, 10)); double mctsIterations = 0; double mctsUctParameter = 1.5; double alphaBetaDeep = 0; IEngine white, black; foreach (var simulation in simulations) { mctsIterations = simulation.mctsIterations; alphaBetaDeep = simulation.alphaBetaDeep; white = new AlphaBetaEngine(PieceColor.White, (int)alphaBetaDeep); black = new MctsEngine(PieceColor.Black, null, mctsUctParameter, (int)mctsIterations); var mctsParameters = $" Liczba iteracji: {mctsIterations},\t parametr UCT: {mctsUctParameter}."; var alphaBetaParameters = $" Głębokość drzewa {alphaBetaDeep}."; System.Console.WriteLine($"Gracz biały: {white.Kind}." + (white.Kind == EngineKind.AlphaBeta ? alphaBetaParameters : mctsParameters)); System.Console.WriteLine($"Gracz czarny: {black.Kind}." + (black.Kind == EngineKind.AlphaBeta ? alphaBetaParameters : mctsParameters)); System.Console.WriteLine($"Liczba iteracji: {simulation.numberOfSimulations}"); for (int i = 0; i < simulation.numberOfSimulations; i++) { Stopwatch sw = new Stopwatch(); sw.Start(); System.Console.Write($"{i}.\t"); SimulateGame(white, black); System.Console.WriteLine(); System.Console.WriteLine($"\tczas: {sw.Elapsed.Seconds}s. "); } } }